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
Sahil YadavSahil Yadav 

Apex Test Class Code Coverage

Hello Folks , 
    I will be working on one scenario where a case is been get created from one screen flow where there is one multiselect picklist fields  with the label state where end user can select multiple state value during the case creation . Now I need to create a child cases of the cases which is been created bu the screen flow.
So ideally one parent case is get created through screen flow where suppose state an end user selected is  AK, AL, CZ then the three child cases must be get created because  3 states is been selected  AK, AL, CZ

So 
Parent Case get created from screen flow and passing the case id from flow to apex class to create a no of child cases depend upon the number of state field values.
Code for creating a child Case 



public class createChildCase {
      @InvocableMethod
    public static void createChild(List<Id> caseIds){
        System.debug('createChildCaseInvoked');
        Case parentCase = [Select id, subject , description, DDI_States_Of_Interests__c from Case where id = : caseIds[0]];
         List<String> States = parentCase.DDI_States_Of_Interests__c.split(';');
        System.debug('States Size' +States.size() );
         List<Case> childCase = new List<Case>();
        for(integer i = 0; i< States.size(); i++ ){
            String state = States[i];
            System.debug('State :' +state);
             Case caseAL = new Case();
                         System.debug('@@');
                         caseAL.Subject = 'Sub Case for Different States';
                         System.debug('@@');
                         caseAL.ParentId = parentCase.Id;
                         System.debug('@@');
                         caseAL.RecordTypeId = '01223000000NZDEAA4';
                         System.debug('@@');
                         caseAl.DDI_States_Of_Interests__c = state;
                         //insert caseAK;
                         childCase.add(caseAL);
            
        }
         
       
                          
                          System.debug('@@' +childCase.size());
                         //System.debug('@@' +caseAL.Id);
          insert childCase;
                         //return childCase;
                         
        
    }

}
 
Test Class


@isTest
public class createChildCaseTest {
    
    @isTest
    public static void createChild(){
        Case cases = new Case();
        cases.CaseEmail__c= 'yadavsahil46623@gmail.com';
        cases.MultiSelect_State__c = 'AZ, AR, CA';
        cases.Subject = 'Case is been getting created';
        insert cases;
       
        List<Case> caseList = [Select Id, subject,CaseEmail__c, MultiSelect_State__c from Case where id =: cases.Id ];
        System.assertEquals('yadavsahil46623@gmail.com',cases.CaseEmail__c );
        
    }

}

Now how may i proceed futher not geting an idea please let me know if any comments 
How should i wrote a test class for this scenarios?
Best Answer chosen by Sahil Yadav
CharuDuttCharuDutt
Hii Sahil
TRy Below Class 100 % Coverage
@IsTest
public class createChildCaseTest{
	@isTest
    public Static void unitTest(){
          Case cases = new Case();
        cases.CaseEmail__c= 'yadavsahil46623@gmail.com';
        cases.DDI_States_Of_Interests__c  = 'AZ, AR, CA';
        cases.Subject = 'Case is been getting created';
        insert cases;
       
        List<Case> caseList = [Select Id, subject,CaseEmail__c from Case where id =: cases.Id ];
        createChildCase.createChild(new list<Id>{cases.Id});
        System.assertEquals('yadavsahil46623@gmail.com',cases.CaseEmail__c );
    }
}
Please Mark It As Best Answer If It Helps
Thank You!

All Answers

CharuDuttCharuDutt
Hii Sahil
TRy Below Class 100 % Coverage
@IsTest
public class createChildCaseTest{
	@isTest
    public Static void unitTest(){
          Case cases = new Case();
        cases.CaseEmail__c= 'yadavsahil46623@gmail.com';
        cases.DDI_States_Of_Interests__c  = 'AZ, AR, CA';
        cases.Subject = 'Case is been getting created';
        insert cases;
       
        List<Case> caseList = [Select Id, subject,CaseEmail__c from Case where id =: cases.Id ];
        createChildCase.createChild(new list<Id>{cases.Id});
        System.assertEquals('yadavsahil46623@gmail.com',cases.CaseEmail__c );
    }
}
Please Mark It As Best Answer If It Helps
Thank You!
This was selected as the best answer
mukesh guptamukesh gupta
Hi Shail,

Please use below code:-
 
@IsTest
public class createChildCaseTest{
	@isTest
    public Static void unitTest(){
        Case case = new Case();
        case.CaseEmail__c= 'abc@gmail.com';
        case.DDI_States_Of_Interests__c  = 'AZ; AR; CA;';
        case.Subject = 'Case is been getting created';
        case.description = 'test'
        insert case;
		
         createChildCase.createChild(new list<Id>{case.Id});
        System.assertEquals('abc@gmail.com',case.CaseEmail__c );
    }
}

 
if you need any assistanse, Please let me know!!

Kindly mark my solution as the best answer if it helps you.

Thanks
Mukesh
Sahil YadavSahil Yadav
Hello CharuDutt and Mukesh could you please review my apex class code as well  is it correct or not if any changes needed please let me know or mine approach is correct or not Please let me know!!
mukesh guptamukesh gupta
Hi Shail,

you can check my code and compare with your and execute my code in your test class.

As per my analysis in main class you are spliting using ; and in test class you are using ,

cases.DDI_States_Of_Interests__c = 'AZ, AR, CA';

if you see in my code i am usign ; instead of ,


Don't need to write SOQL 
List<Case> caseList = [Select Id, subject,CaseEmail__c, MultiSelect_State__c from Case where id =: cases.Id ];

 
if you need any assistanse, Please let me know!!

Kindly mark my solution as the best answer if it helps you.

Thanks
Mukesh