You need to sign in to do that
Don't have an account?
Sushil Dholani
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
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
Arjun Otturu 5
It would be best to use the SOQL outside the for loop