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
Roopa S 1Roopa S 1 

please help me to write test class for this codee

handler class

Handler class

public class WorkOredrTriggerHelper {
    public static void helperMethod(list<SVMXC__Service_Order__c> WorkOrders){
        
        Map<Id,List<SVMXC__Service_Order_Line__c>> mapLine = new Map<Id,List<SVMXC__Service_Order_Line__c>>();
        List<SVMXC__Service_Order_Line__c> lineItems = new List<SVMXC__Service_Order_Line__c>();
        List<SVMXC__Service_Order_Line__c> lineItemsToUpdate = new List<SVMXC__Service_Order_Line__c>();
        
        lineItems = [select id, Status__c, SVMXC__Service_Order__c from  SVMXC__Service_Order_Line__c where SVMXC__Service_Order__c in :WorkOrders];
        
        
        for(SVMXC__Service_Order_Line__c asd : lineItems) {
            if(mapLine.containsKey(asd.SVMXC__Service_Order__c)){
                mapLine.get(asd.SVMXC__Service_Order__c).add(asd);
                continue;
            }
            mapLine.put(asd.SVMXC__Service_Order__c,new List<SVMXC__Service_Order_Line__c>{asd});
        }
        
        for(SVMXC__Service_Order__c wo : WorkOrders){
            if(wo.SVMXC__Order_Status__c == 'Closed' || wo.SVMXC__Order_Status__c == 'Completed'){
                if(mapLine.get(wo.Id) != null) {
                   boolean flag = false;
                   for(SVMXC__Service_Order_Line__c wd : mapLine.get(wo.Id)){
                        if(wd.Status__c=='open'){
                            flag = true;
                        }
                    }
                   if(flag == true) {
                       System.debug('222The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.');
                       wo.addError('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.');
                   }
                }
                else {
                    System.debug('No items');
                       wo.addError('No line items');
                }
                    
               
            }
        }

    }
    
    public static void updateRelatedLines(list<SVMXC__Service_Order__c> WorkOrdersNew, Map<Id,SVMXC__Service_Order__c> WorkOrdersOld) {
        
        Map<Id,List<SVMXC__Service_Order_Line__c>> mapLine = new Map<Id,List<SVMXC__Service_Order_Line__c>>();
        List<SVMXC__Service_Order_Line__c> lineItems = new List<SVMXC__Service_Order_Line__c>();
        List<SVMXC__Service_Order_Line__c> lineItemsToUpdate = new List<SVMXC__Service_Order_Line__c>();
        List<SVMXC__Service_Order__c> workOrdersToUpdate = new List<SVMXC__Service_Order__c>();
        String closureStatus = '';
        Integer countLineItems;
        Map<Id,String> closureStatusMap = new Map<Id,String>();
        
        lineItems = [select id, Status__c, SVMXC__Service_Order__c, Work_order_status__c, SVMXC__Start_Date_and_Time__c, SVMXC__End_Date_and_Time__c  from  SVMXC__Service_Order_Line__c where SVMXC__Service_Order__c in :WorkOrdersNew];
                
        for(SVMXC__Service_Order_Line__c asd : lineItems) {
            if(mapLine.containsKey(asd.SVMXC__Service_Order__c)){
                mapLine.get(asd.SVMXC__Service_Order__c).add(asd);
                continue;
            }
            mapLine.put(asd.SVMXC__Service_Order__c,new List<SVMXC__Service_Order_Line__c>{asd});
        }
        
        for(SVMXC__Service_Order__c wo : WorkOrdersNew){
            closureStatus = '';
            countLineItems = 0;
            if(wo.SVMXC__Order_Status__c != WorkOrdersOld.get(wo.Id).SVMXC__Order_Status__c && wo.SVMXC__Order_Status__c == 'Closed'){
                for(SVMXC__Service_Order_Line__c wd : mapLine.get(wo.Id)){
                    countLineItems = countLineItems + 1;
                    SVMXC__Service_Order_Line__c newLineItem = new SVMXC__Service_Order_Line__c();
                    newLineItem.Id = wd.Id;
                    newLineItem.Work_order_status__c = 'Work Order is Closed';
                    lineItemsToUpdate.add(newLineItem);
                    closureStatus += 'Start time of WDL'+ countLineItems + ' : ' + wd.SVMXC__Start_Date_and_Time__c+'\n';
                    closureStatus += 'End Date time of WDL'+ countLineItems + ' : ' + wd.SVMXC__End_Date_and_Time__c+'\n'+'\n';
                }
                closureStatusMap.put(wo.Id, closureStatus);
                
            }
        }
        
        List<SVMXC__Service_Order__c> workOrders = [SELECT Id, closure_status__c from SVMXC__Service_Order__c where Id in :WorkOrdersNew];
        for(SVMXC__Service_Order__c workOrder : workOrders){
            workOrder.closure_status__c = closureStatusMap.get(workorder.Id);
            workOrdersToUpdate.add(workOrder);
        }
        
        if(lineItemsToUpdate != null && lineItemsToUpdate.size() > 0){
            update lineItemsToUpdate;
        }
        
        if(lineItemsToUpdate != null && lineItemsToUpdate.size() > 0){
            update workOrdersToUpdate;
        }
    }    
}

trigger

trigger woTriggerrr on SVMXC__Service_Order__c (before insert, before update, after update, after insert) {
    if(trigger.isBefore && trigger.isupdate){
        system.debug('Inside new trigger'+ Trigger.new);
        WorkOredrTriggerHelper.helperMethod(trigger.new);
    }
    
    if(trigger.isAfter && trigger.isupdate){
        system.debug('Inside new trigger after update'+ Trigger.new);
        WorkOredrTriggerHelper.updateRelatedLines(trigger.new, trigger.oldMap);
    }
}

i have written this test class but not getting code coverage

@isTest
public class WorkOredrTriggerHelperTest {
    @isTest static void helperMethod(){
        
        SVMXC__Service_Order__c serviceOrderObj = new SVMXC__Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
        insert serviceOrderObj;
        
        SVMXC__Service_Order_Line__c lineObj = new SVMXC__Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC__Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        Test.startTest();
        update serviceOrderObj;
        System.assertNotEquals('closed', serviceOrderObj.SVMXC__Order_Status__c);
        Test.stopTest();
        
    }
    
    @isTest static void helperMethodSecond(){
        
        SVMXC__Service_Order__c serviceOrderObj = new SVMXC__Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
        insert serviceOrderObj;
        
        
        SVMXC__Service_Order_Line__c lineObj = new SVMXC__Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC__Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        Test.startTest();
        serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
        update serviceOrderObj;
        System.assertNotEquals('closed', serviceOrderObj.SVMXC__Order_Status__c);
        Test.stopTest();
        
        
    }
}
Best Answer chosen by Roopa S 1
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Roopa,

Can you update the test class as below with proper  API names of the objects and fields as per your org. It should give you 100% coverage now .
 
@isTest
public class WorkOredrTriggerHelperTest {
    @isTest static void helperMethod(){
        
        SVMXC_Service_Order__c serviceOrderObj = new SVMXC_Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC_Order_Status__c = 'Closed';
        insert serviceOrderObj;
        SVMXC_Service_Order__c serviceOrderObj2 = new SVMXC_Service_Order__c();
        serviceOrderObj2.closure_status__c= 'test';
        serviceOrderObj2.SVMXC_Order_Status__c = 'Closed';
        insert serviceOrderObj2;
        SVMXC_Service_Order_Line__c lineObj = new SVMXC_Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        SVMXC_Service_Order_Line__c lineObj1 = new SVMXC_Service_Order_Line__c();
        lineObj1.Status__c = 'open';
        lineObj1.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj1;
        Test.startTest();
        
         Database.SaveResult result = Database.update(serviceOrderObj, false);
        System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.',result.getErrors()[0].getMessage());
        Database.SaveResult result1 = Database.update(serviceOrderObj2, false);
        System.assertEquals('No line items',result1.getErrors()[0].getMessage());
        serviceOrderObj.SVMXC_Order_Status__c = 'new';
        update serviceOrderObj;
        //update serviceOrderObj;
       // System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.', serviceOrderObj.SVMXC_Order_Status__c);
        Test.stopTest();
        
    }
    
    @isTest static void helperMethodSecond(){
        
        SVMXC_Service_Order__c serviceOrderObj = new SVMXC_Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC_Order_Status__c = 'Open';
        insert serviceOrderObj;
        SVMXC_Service_Order_Line__c lineObj = new SVMXC_Service_Order_Line__c();
        lineObj.Status__c = 'new';
        lineObj.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        Test.startTest();
        serviceOrderObj.SVMXC_Order_Status__c='Closed';
         Database.SaveResult result = Database.update(serviceOrderObj, false);
        if(!result.isSuccess())
        System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.',result.getErrors()[0].getMessage());
        Test.stopTest();
        
        
    }
}

If this solution helps, Please mark it as best answer.

Thanks,
​​​​​​​

All Answers

Sai PraveenSai Praveen (Salesforce Developers) 
Hi Roopa,

Please try the below Test Class. It is giving around 80% of code coverage. Please change the name API names of the objects and fields as per your org.
 
@isTest
public class WorkOredrTriggerHelperTest {
    @isTest static void helperMethod(){
        
        SVMXC_Service_Order__c serviceOrderObj = new SVMXC_Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC_Order_Status__c = 'Closed';
        insert serviceOrderObj;
        SVMXC_Service_Order__c serviceOrderObj2 = new SVMXC_Service_Order__c();
        serviceOrderObj2.closure_status__c= 'test';
        serviceOrderObj2.SVMXC_Order_Status__c = 'Closed';
        insert serviceOrderObj2;
        SVMXC_Service_Order_Line__c lineObj = new SVMXC_Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        SVMXC_Service_Order_Line__c lineObj1 = new SVMXC_Service_Order_Line__c();
        lineObj1.Status__c = 'open';
        lineObj1.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj1;
        Test.startTest();
        
         Database.SaveResult result = Database.update(serviceOrderObj, false);
        System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.',result.getErrors()[0].getMessage());
        Database.SaveResult result1 = Database.update(serviceOrderObj2, false);
        System.assertEquals('No line items',result1.getErrors()[0].getMessage());
        serviceOrderObj.SVMXC_Order_Status__c = 'new';
        update serviceOrderObj;
        //update serviceOrderObj;
       // System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.', serviceOrderObj.SVMXC_Order_Status__c);
        Test.stopTest();
        
    }
    
   /* @isTest static void helperMethodSecond(){
        
        SVMXC_Service_Order__c serviceOrderObj = new SVMXC_Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC_Order_Status__c = 'Closed';
        insert serviceOrderObj;
        
        
        SVMXC_Service_Order_Line__c lineObj = new SVMXC_Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        Test.startTest();
        serviceOrderObj.SVMXC_Order_Status__c = 'Closed';
        update serviceOrderObj;
        System.assertEquals('closed', serviceOrderObj.SVMXC_Order_Status__c);
        Test.stopTest();
        
        
    }*/
}

If this solution helps, Please mark it as best answer.

Thanks,
 
AnkaiahAnkaiah (Salesforce Developers) 
Hi Roopa,

Please try with below code.
 
@isTest
public class WorkOredrTriggerHelperTest {
    @isTest static void helperMethod(){
        
        SVMXC__Service_Order__c serviceOrderObj = new SVMXC__Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
        insert serviceOrderObj;
        
        SVMXC__Service_Order_Line__c lineObj = new SVMXC__Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC__Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        Test.startTest();
        update serviceOrderObj;
		WorkOredrTriggerHelper.updateRelatedLines(serviceOrderObj);
        System.assertNotEquals('closed', serviceOrderObj.SVMXC__Order_Status__c);
        Test.stopTest();
        
    }
    
    @isTest static void helperMethodSecond(){
        
        SVMXC__Service_Order__c serviceOrderObj = new SVMXC__Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
        insert serviceOrderObj;
        
        
        SVMXC__Service_Order_Line__c lineObj = new SVMXC__Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC__Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        Test.startTest();
        serviceOrderObj.SVMXC__Order_Status__c = 'Closed';
        update serviceOrderObj;
		WorkOredrTriggerHelper.updateRelatedLines(serviceOrderObj);
        System.assertNotEquals('closed', serviceOrderObj.SVMXC__Order_Status__c);
        Test.stopTest();
        
        
    }
}

If this helps, please mark it as best answer.

Regards,
Ankaiah
Roopa S 1Roopa S 1
@Ankaiah  its throwing error like "Method does not exist or incorrect signature: void updateRelatedLines(SVMXC__Service_Order__c) from the type WorkOredrTriggerHelper" at line number 16 and 37
Roopa S 1Roopa S 1
@Sai Praveen  
getting 73% code coverage but i should get more than 80% plz help
Sai PraveenSai Praveen (Salesforce Developers) 
Hi Roopa,

Can you update the test class as below with proper  API names of the objects and fields as per your org. It should give you 100% coverage now .
 
@isTest
public class WorkOredrTriggerHelperTest {
    @isTest static void helperMethod(){
        
        SVMXC_Service_Order__c serviceOrderObj = new SVMXC_Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC_Order_Status__c = 'Closed';
        insert serviceOrderObj;
        SVMXC_Service_Order__c serviceOrderObj2 = new SVMXC_Service_Order__c();
        serviceOrderObj2.closure_status__c= 'test';
        serviceOrderObj2.SVMXC_Order_Status__c = 'Closed';
        insert serviceOrderObj2;
        SVMXC_Service_Order_Line__c lineObj = new SVMXC_Service_Order_Line__c();
        lineObj.Status__c = 'open';
        lineObj.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        SVMXC_Service_Order_Line__c lineObj1 = new SVMXC_Service_Order_Line__c();
        lineObj1.Status__c = 'open';
        lineObj1.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj1;
        Test.startTest();
        
         Database.SaveResult result = Database.update(serviceOrderObj, false);
        System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.',result.getErrors()[0].getMessage());
        Database.SaveResult result1 = Database.update(serviceOrderObj2, false);
        System.assertEquals('No line items',result1.getErrors()[0].getMessage());
        serviceOrderObj.SVMXC_Order_Status__c = 'new';
        update serviceOrderObj;
        //update serviceOrderObj;
       // System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.', serviceOrderObj.SVMXC_Order_Status__c);
        Test.stopTest();
        
    }
    
    @isTest static void helperMethodSecond(){
        
        SVMXC_Service_Order__c serviceOrderObj = new SVMXC_Service_Order__c();
        serviceOrderObj.closure_status__c= 'test';
        serviceOrderObj.SVMXC_Order_Status__c = 'Open';
        insert serviceOrderObj;
        SVMXC_Service_Order_Line__c lineObj = new SVMXC_Service_Order_Line__c();
        lineObj.Status__c = 'new';
        lineObj.SVMXC_Service_Order__c = serviceOrderObj.ID ; 
        insert lineObj;
        Test.startTest();
        serviceOrderObj.SVMXC_Order_Status__c='Closed';
         Database.SaveResult result = Database.update(serviceOrderObj, false);
        if(!result.isSuccess())
        System.assertEquals('The work order cannot be closed since there are no associated work detail lines or the related work detail lines are open.',result.getErrors()[0].getMessage());
        Test.stopTest();
        
        
    }
}

If this solution helps, Please mark it as best answer.

Thanks,
​​​​​​​
This was selected as the best answer