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
Sushil DholaniSushil Dholani 

I am getting 100% coverage but getting System.LimitException: Apex CPU time limit exceeded - Apex Specialist Step 4


trigger MaintenanceRequest on Case ( after update) {
    // ToDo: Call MaintenanceRequestHelper.updateWorkOrders
    	 
	    for(Case c : Trigger.new){
        	if(Trigger.isAfter && Trigger.isUpdate){
     			MaintenanceRequestHelper.updateWorkOrders();
    		}    
    	}
}
public with sharing class MaintenanceRequestHelper {
    
    public static void updateWorkOrders() {
         list<case> insertCaseList = new list<case>();
        List<Case> ClosedCaseList =  [select id,Vehicle__r.Id,Equipment__r.Id,Equipment__r.Maintenance_Cycle__c,(select id from Work_Parts__r) from case where status = 'Closed' and Id IN :Trigger.new and Type in('Repair','Routine Maintenance') LIMIT 200];
        // TODO: Complete the method to update workorders
        
        for(Case c:ClosedCaseList){
        Case maintenanceRequest             = new Case();
        maintenanceRequest.Type             = 'Routine Maintenance';
        maintenanceRequest.Vehicle__c       = c.Vehicle__c;
        maintenanceRequest.Subject          = 'Routine Checkup';
        maintenanceRequest.Date_Reported__c = System.today();
        maintenanceRequest.Equipment__c     = c.Equipment__c;
        insertCaseList.add(maintenanceRequest);
        }
        system.debug('NewCasesList: '+ insertCaseList);
        system.debug('CaseList: '+ ClosedCaseList);
        Integer i=0;
        List<Aggregateresult> agrResult = [SELECT MIN(equipment__r.Maintenance_Cycle__c)MinimumValue FROM WORK_PART__c where Maintenance_Request__c=:ClosedCaseList];
        for(Aggregateresult r: agrResult){
            system.debug('Agg result: '+r);
                if(r.get('MinimumValue')!=NULL)
                	insertCaseList[i].Date_Due__c=system.today()+integer.valueof(r.get('MinimumValue'));
                    i++;
        		}
        		if(insertCaseList.size()>0){
        		insert insertCaseList;
         }
    }
}
@isTest
public class MaintenanceRequestTest {
	@isTest
    static void testMaintenanceRequest(){
        Date d = System.Today();
        List<Case> maintenanceList = new List<Case>();
        List<Case> maintenanceListClosed = new List<Case>();
        Vehicle__c vehicle = new Vehicle__c(Name='tata sumo',Air_Conditioner__c=true,Model__c='23Test');
        insert vehicle;
        Product2 equipment = new Product2(Name='tire',Cost__c=100,Current_Inventory__c=10,Replacement_Part__c=true,Warehouse_SKU__c='test',Lifespan_Months__c=10,Maintenance_Cycle__c=100);
        insert equipment;
        
        for(Integer i=1;i<=300;i++){
            Case maintenance = new Case(Subject='Test subject'+i,Date_Reported__c = System.today(),Type='Routine Maintenance'+i,Status='New'+i,Origin='Phone'+i,Equipment__C=equipment.Id,Vehicle__c=vehicle.Id);
            maintenanceList.add(maintenance);   
        }
        insert maintenanceList;
        List<Work_Part__c> workPartList = new List<Work_Part__c>();
        for(Case caseupdate :maintenanceList){
            caseupdate.Status='Closed';
            caseupdate.Type='routine Maintenance';
            Work_Part__c w=new Work_Part__c(Maintenance_Request__c=caseupdate.Id,Equipment__c=equipment.Id);
            caseupdate.Date_Due__c = date.Today().addDays(Integer.valueOf(equipment.Maintenance_Cycle__c));
            maintenanceListClosed.add(caseupdate);
            workPartList.add(w);
        }
        Test.startTest();
        try{
            Database.SaveResult[] inserResult = Database.insert(workPartList);
            for(database.SaveResult sr : inserResult){
                {
                    if(sr.IsSuccess()){
                        database.SaveResult[] updatequipment = Database.update(maintenanceListClosed);
                        for(database.SaveResult sa :updatequipment){
                            if(sa.Issuccess()){
                                List<Case> assertNewCase=[SELECT Id FROM Case Where Equipment__c=:equipment.Id AND Vehicle__c=:vehicle.Id AND Type='Routine Maintenance' AND Subject='New Request' AND Date_Reported__c=:d ];
                            	system.assertEquals(300,assertNewCase.size());
                            }
            			
                    }
                }
            }
                
          }
        }
        catch(Exception e)
        {
                    
        }
        Test.stopTest();
        
     }
 }
Hello Everyone,
Apex Specialist Step 4
I am getting 100% coverage but getting error. Can anyone please help where I need to change code
Class.MaintenanceRequestHelper.updateWorkOrders: line 8, column 1
Trigger.MaintenanceRequest: line 6, column 1

User-added image


 
Arjun Otturu 5Arjun Otturu 5
It would be best to use the SOQL outside the for loop