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
Sudipta DebSudipta Deb 

Issue with Unit Test having test data > 200

Hi All -

I am getting the below error when I am testing the my block of code(Trigger helper method) with test data > 200. Any amount of test data which is < 200, my block of code is working fine. Do you have any idea or anybody faced the similar issue earlier
System.DmlException: Update failed. First exception on row 200 with id 50036000003SZd8AAG; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, MaintenanceRequest: execution of AfterUpdate

caused by: System.DmlException: Insert failed. First exception on row 0 with id 50036000003SZd9AAG; first error: INVALID_FIELD_FOR_INSERT_UPDATE, cannot specify Id in an insert call: [Id]

Class.MaintenanceRequestHelper.createFollowUpMaintenanceRequest: line 52, column 1
Class.MaintenanceRequestHelper.updateAfterUpdateActivity: line 15, column 1
Trigger.MaintenanceRequest: line 3, column 1: []

 
veda shriveda shri
Hi Sudipta,
Reason for this issue is you are inserting a record having ID != null. So it is giving exception. While inserting record, record Id should be blanck. 

Please cross check the code and let me know if any help.

Thanks,
Vedashri

 
Sudipta DebSudipta Deb
Hi Veda,

I am not specifying any ID value in the new record. But still getting this error. That is why I am little confused here.
veda shriveda shri
Hi Sudipta,

Please try below code:

 
public class MaintenanceRequestHelper {
    private static List<Case> closedCases = new List<Case>();
    private static List<Case> newlyCreatedCases = new List<Case>();
    private static List<Work_Part__c> allWorkParts = new List<Work_Part__c>();
    

    public static void updateAfterUpdateActivity(List<Case> newCases, Map<Id, Case> oldCases){
        closedCases = new List<Case>();
    	for(Case singleCase : newCases){
	    	if(singleCase.status == 'Closed' && oldCases.get(singleCase.ID).status != singleCase.status){
	    		if(singleCase.Type == 'Repair' || singleCase.Type == 'Routine Maintenance'){
	    			closedCases.add(singleCase);
	       		}
	    	}
	    }
	    
	   
	    system.debug('====closedCases========'+closedCases.size());
	    createFollowUpMaintenanceRequest();
    }

    private static void createFollowUpMaintenanceRequest(){
        system.debug('====createFollowUpMaintenanceRequest========');
        
    	Set<ID> caseIds = new Set<ID>();
    	for(Case singleCase : closedCases){
    		caseIds.add(singleCase.Id);
    	}
    	Integer shortestMaintCycle;
    	
    	Map<Id, List<Work_Part__c>> maintWorkPartMap = createMaintWorkPartMap(caseIds);
        newlyCreatedCases = new List<Case>();
    	for(Case singleCase : closedCases){
    		List<Work_Part__c> workParts = maintWorkPartMap.get(singleCase.Id);
    		if(workParts != null){
    			shortestMaintCycle = Integer.valueOf(findShortestMaintCycle(workParts));	
    		}else{
    			shortestMaintCycle = Integer.valueOf(0.0);
    		}
    		

    		Case newCase = new Case();
    		newCase.Vehicle__c = singleCase.Vehicle__c;
    		newCase.Type = 'Routine Maintenance';
    		newCase.status = 'New';
    		newCase.Origin = singleCase.Origin;
    		newCase.Reason = singleCase.Reason;
    		newCase.Subject = String.isBlank(singleCase.Subject) ? 'Routine Maintenance Request' :
    			singleCase.Subject;
    		newCase.Date_Reported__c = Date.today();
    		newCase.Date_Due__c = Date.today().addDays(shortestMaintCycle);
    		newCase.Equipment__c = singleCase.Equipment__c;
    		newCase.Old_Case__c = String.valueOf(singleCase.Id);
    		newlyCreatedCases.add(newCase);
    	}

    	if(newlyCreatedCases.size() > 0){
    	    system.debug('===================test=========='+newlyCreatedCases.size());
    		insert newlyCreatedCases;
    		updateRelatedWorkOrders(newlyCreatedCases);
    	}
    }

    private static void updateRelatedWorkOrders(List<Case> cases){
    	Map<Id, Id> oldToNewCaseMap = new Map<Id, Id>();
    	for(Case singleCase : cases){
    		oldToNewCaseMap.put(Id.valueOf(singleCase.Old_Case__c),singleCase.Id);
    	}

    	if(allWorkParts != null){
    		for(Work_Part__c singleWorkPart : allWorkParts){
    			Id newCaseId = oldToNewCaseMap.get(singleWorkPart.Maintenance_Request__c);
    			singleWorkPart.Maintenance_Request__c = newCaseId;
    		}
    	}

    	if(allWorkParts != null && allWorkParts.size() > 0){
    		update allWorkParts;
    	}
    }

    private static Decimal findShortestMaintCycle(List<Work_Part__c> workParts){
    	Decimal shortestValue;
    	if(workParts.size()>0){
    		shortestValue = workParts.get(0).Equipment__r.Maintenance_Cycle__c;
    	}
    	for(Work_Part__c singleWorkPart : workParts){
    		if(singleWorkPart.Equipment__r.Maintenance_Cycle__c < shortestValue){
    			shortestValue = singleWorkPart.Equipment__r.Maintenance_Cycle__c;
    		}
    	}
    	return shortestValue;
    }

    private static Map<Id, List<Work_Part__c>> createMaintWorkPartMap(Set<ID> caseIds){
    	//Fetch all WorkPart details
    	allWorkParts = [SELECT ID, Equipment__c, Maintenance_Request__c, 
    			Quantity__c, Equipment__r.Maintenance_Cycle__c FROM Work_Part__c 
    			WHERE Maintenance_Request__c in: caseIds];
    	Map<Id, List<Work_Part__c>> maintWorkPartMap = new Map<Id, List<Work_Part__c>>();
    	for(Work_Part__c singleWorkPart : allWorkParts){
    		List<Work_Part__c> tempList;
    		if(maintWorkPartMap.get(singleWorkPart.Maintenance_Request__c) == null){
    			tempList = new List<Work_Part__c>();
    		}else{
    			tempList = maintWorkPartMap.get(singleWorkPart.Maintenance_Request__c);
    		}
    		tempList.add(singleWorkPart);
    		maintWorkPartMap.put(singleWorkPart.Maintenance_Request__c, tempList);
    	}

    	return maintWorkPartMap;
    }
    
}


 
@isTest
private class MaintenanceRequestHelperTest {
    
	private static testMethod void positeTest() 
	{
	    Vehicle__c objVehicle = new Vehicle__c(Name ='test1');
	    insert objVehicle;
	    
	    Product2 objEquipment = new Product2( Name='Test Equipment', Maintenance_Cycle__c =10, Replacement_Part__c =true);
	    insert objEquipment;
	   
	    Case objCase = new Case(Type ='Other', Status='New', Origin='Phone', Vehicle__c = objVehicle.Id, Equipment__c = objEquipment.id);
	    insert objCase;
	    
	    List<Work_Part__c> lstWorkApp = new List<Work_Part__c>();
	    lstWorkApp.add(New Work_Part__c(Equipment__c = objEquipment.id, Maintenance_Request__c = objCase.Id,Quantity__c = 1));
	    lstWorkApp.add(New Work_Part__c(Equipment__c = objEquipment.id, Maintenance_Request__c = objCase.Id,Quantity__c = 2));
	    insert lstWorkApp;
	    
	     
        objCase.Type = 'Repair';
        objCase.status = 'Closed';
        update objCase;
        
        system.assertEquals(1,[select id from case where status != 'Closed'].size());
        
        
       
	}
    
    private static testMethod void positeTest1() 
	{
	    
        Vehicle__c objVehicle1 = new Vehicle__c(Name ='test1');
	    insert objVehicle1;
	    
	    Product2 objEquipment1 = new Product2( Name='Test Equipment', Maintenance_Cycle__c =10, Replacement_Part__c =true);
	    insert objEquipment1;
	    
	    Product2 objEquipment2 = new Product2( Name='Test Equipment', Maintenance_Cycle__c =5, Replacement_Part__c =true);
	    insert objEquipment2;
	    
	    Product2 objEquipment3 = new Product2( Name='Test Equipment', Maintenance_Cycle__c =3, Replacement_Part__c =true);
	    insert objEquipment3;
        
        Case objCase1 = new Case(Type ='Other', Status='New', Origin='Phone', Vehicle__c = objVehicle1.Id, Equipment__c = objEquipment1.id, Subject='test');
	    insert objCase1;
	    
	    
	    List<Work_Part__c> lstWorkApp1 = new List<Work_Part__c>();
	    lstWorkApp1.add(New Work_Part__c(Equipment__c = objEquipment2.id, Maintenance_Request__c = objCase1.Id,Quantity__c = 1));
	    lstWorkApp1.add(New Work_Part__c(Equipment__c = objEquipment1.id, Maintenance_Request__c = objCase1.Id,Quantity__c = 2));
	    lstWorkApp1.add(New Work_Part__c(Equipment__c = objEquipment3.id, Maintenance_Request__c = objCase1.Id,Quantity__c = 5));
	    insert lstWorkApp1;
	    
	    
	    objCase1.Type = 'Routine Maintenance';
	    objCase1.status = 'Closed';
        update objCase1;
        system.assertEquals(1,[select id from case where status != 'Closed'].size());
	    
        
	}
    
    private static testMethod void positeTest2() 
	{
	    
        Vehicle__c objVehicle1 = new Vehicle__c(Name ='test1');
	    insert objVehicle1;
	    
	    Product2 objEquipment1 = new Product2( Name='Test Equipment', Maintenance_Cycle__c =10, Replacement_Part__c =true);
	    insert objEquipment1;
	    
	    Product2 objEquipment2 = new Product2( Name='Test Equipment', Maintenance_Cycle__c =5, Replacement_Part__c =true);
	    insert objEquipment2;
	   

        Case objCase1 = new Case(Type ='Other', Status='New', Origin='Phone', Vehicle__c = objVehicle1.Id, Equipment__c = objEquipment1.id, Subject='test');
	    insert objCase1;
	    
	    objCase1.Type = 'Routine Maintenance';
	    objCase1.status = 'Closed';
        update objCase1;
        system.assertEquals(1,[select id from case where status != 'Closed'].size());
	    
        
	}
    
    private static testMethod void negetiveTest() 
	{
	    Vehicle__c objVehicle = new Vehicle__c(Name ='test1');
	    insert objVehicle;
	    
	    Product2 objEquipment = new Product2( Name='Test Equipment', Maintenance_Cycle__c =10, Replacement_Part__c =true);
	    insert objEquipment;
	    
	    Case objCase = new Case(Type ='Other', Status='New', Origin='Phone', Vehicle__c = objVehicle.Id, Equipment__c = objEquipment.id);
	    insert objCase;
	    
	    List<Work_Part__c> lstWorkApp = new List<Work_Part__c>();
	    lstWorkApp.add(New Work_Part__c(Equipment__c = objEquipment.id, Maintenance_Request__c = objCase.Id,Quantity__c = 1));
	    lstWorkApp.add(New Work_Part__c(Equipment__c = objEquipment.id, Maintenance_Request__c = objCase.Id,Quantity__c = 2));
	    insert lstWorkApp;
	    
	     
        objCase.status = 'Closed';
        update objCase;
        
        system.assertEquals(0,[select id from case where status != 'Closed'].size());
	}
	
	private static testMethod void bulkTest() 
	{
	    Vehicle__c objVehicle = new Vehicle__c(Name ='test1');
	    insert objVehicle;
	    
	    Product2 objEquipment = new Product2( Name='Test Equipment', Maintenance_Cycle__c =10, Replacement_Part__c =true);
	    insert objEquipment;
	    
	    List<case> lstCaseToInsert = new List<case>();
	    List<case> lstCaseToUpdate = new List<case>();
	    for(Integer i=0; i<=300; i++)
	    {
	        if(i<50)
	            lstCaseToInsert.add(new Case(Type ='Other', Status='New', Origin='Phone', Vehicle__c = objVehicle.Id, Equipment__c = objEquipment.id));
	       else if( i<100) 
	            lstCaseToInsert.add(new Case(Type = 'Routine Maintenance', Status='New', Origin='Phone', Vehicle__c = objVehicle.Id, Equipment__c = objEquipment.id));
	        else if(i<150 && i< 250) 
	            lstCaseToInsert.add(new Case(Type ='Repair', Status='New', Origin='Phone', Vehicle__c = objVehicle.Id, Equipment__c = objEquipment.id));
	       else 
	            lstCaseToInsert.add(new Case(Type ='Mechanical', Status='New', Origin='Phone', Vehicle__c = objVehicle.Id, Equipment__c = objEquipment.id));
	    }
	    
        insert lstCaseToInsert;
        
        system.debug('=====Routine=========='+[select id,Type from case where Type ='Routine Maintenance' ].size());
        
        system.debug('=====lstCaseToInsert=====Repair====='+[select id,Type from case where Type = 'Repair' ].size());
        for(Case objCase : lstCaseToInsert)
        {
            objCase.status = 'Closed';
            lstCaseToUpdate.add(objCase);
        }
        
        update lstCaseToUpdate;
        
        system.assertEquals(100,[select id from case where status != 'Closed' And ID !=: lstCaseToInsert ].size());
	}
	
}