function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Pavani Akella 9Pavani Akella 9 

Help writing test class for apex trigger

Can someone please help me to write and understand a test class for Apex trigger on platform event:

trigger Checkin on Vehicle_Daily_Checkin__e (after insert) {
    public List<VIN__c> records = new List<VIN__c>();
    for (Vehicle_Daily_Checkin__e event : Trigger.New) {
        System.debug('Starting trigger');
         List<VIN__c> existingRecords = Database.query(
            'SELECT VIN_External_ID__c, Odometer__c, Longitude__c, Latitude__c, Last_Signal_Datetime__c ' +
            'FROM VIN__c WHERE VIN_External_ID__c=\'' + event.VIN__c + '\'');
        
        if(existingRecords.size() != 0) {
            existingRecords[0].Odometer__c=event.Odometer__c;
            existingRecords[0].Longitude__c=event.Longitude__c;
            existingRecords[0].Latitude__c=event.Latitude__c;
            existingRecords[0].Last_Signal_Datetime__c=event.Last_Signal_Datetime__c;
            update existingRecords[0];
            records.add(existingRecords[0]);
        }
        else {
            VIN__c record=new VIN__c();
            record.VIN_External_ID__c=event.VIN__c;
            record.Odometer__c=event.Odometer__c;
            record.Longitude__c=event.Longitude__c;
            record.Latitude__c=event.Latitude__c;
            record.Last_Signal_Datetime__c=event.Last_Signal_Datetime__c;
            records.add(record);
        }
        System.debug('Above service center query');
        String sc;
         List<Account> acc=Database.query(
            'SELECT Id, Name, Location__c FROM Account '+
            'WHERE (public_service_center__c != \'N/A\' OR public_service_center__c != \'No\')'+
            ' AND DISTANCE(Location__c, GEOLOCATION(' +event.Latitude__c+ ', ' +event.Longitude__c + '), \'mi\') < 2') ; 
        System.debug('Account list query');
        String cId;
        for(Account a:acc){
            // Retrieve any open Case records for a vehicle within 1000 feet of a service center
            sc=a.Id;
        System.debug('Above case query');    
            List<Case> cas=Database.query('SELECT Id,CaseNumber FROM Case WHERE AccountId =\''+ sc +'\' AND VIN_Entry__c =\''+ event.VIN__c+'\'');
            for (Case c : cas) {
                cId = c.Id;
                break;
            }            
        }
        
        Enhanced_Daily_Checkin__e enchancheck=new Enhanced_Daily_Checkin__e(CaseID__c = cId,Last_Signal_Datetime__c=event.Last_Signal_Datetime__c,Latitude__c=event.Latitude__c,Longitude__c=event.Longitude__c,Odometer__c=event.Odometer__c,VIN__c=event.VIN__c,ServiceCenterID__c=sc); 
            EventBus.publish(enchancheck);
        System.debug('Published enhanced event'+enchancheck);
    }    
    // Insert all cases corresponding to events received.
    upsert records;
}

Thanks in advance!
Steven NsubugaSteven Nsubuga
All you need to know is that your test should check whether the operations in your trigger executed as expected.
Also, spend some time reading the Apex language reference on Triggers and Trigger best practices, particularly how to bulkify triggers. It is a very very very bad idea to have a SOQL query inside a loop.