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
srkSFsrkSF 

how to write Test class for map collection object

Hi All,
I need to write Test Method for the code which is iteration collection object allSubs(means allSubscriptions) in BOLD.
I am able to write Test code for getConForProduct method but stuck with the later part.
Please help me!!
Thanks in Advance.
Apex Class:
Global class getContactsMatrixOrders {
    public static List<Map<String, Id>> getConForProduct(Map<String, Id> allProducts){
        // This method will return contacts who are eligible for C031 & C041 Testing done
        List<Map<String, Id>> conAndPro = new List<Map<String, Id>>();
        List<OrderApi__Subscription__c> allSubs = [SELECT id , OrderApi__Contact__r.id , OrderAPi__Contact__r.AccountId,OrderApi__Contact__r.apfy_products_received__c 
                                                   , OrderApi__Subscription_Plan__r.Name,OrderApi__Item__r.Name
                                                   FROM OrderApi__Subscription__c 
                                                   WHERE OrderApi__Status__c = 'Active'
                                                   AND OrderApi__Contact__r.CUSTOMER_CLASS__c = 'Member' 
                                                   AND OrderApi__Contact__r.Customer_Status__c = 'Active' 
                                                   AND OrderApi__Contact__r.DonorApi__Spouse__r.CUSTOMER_CLASS__c = 'Member' 
                                                   AND OrderApi__Contact__r.DonorApi__Spouse__r.Customer_Status__c = 'DECEASED'
                                                   AND OrderApi__Sales_Order_Line__r.OrderApi__Sales_Order__r.OrderApi__Source_Code__r.Name = 'WIDOW'];
        System.debug('allSubs'+allSubs);
        
        for(OrderApi__Subscription__c sub : allSubs){
            String itemName = sub.OrderApi__Item__r.Name;
            Id conId = sub.OrderApi__Contact__r.id;
            Id accId = sub.OrderAPi__Contact__r.AccountId;
            String proReceived = sub.OrderApi__Contact__r.apfy_products_received__c;
            List<String> productsReceived = new List<String>();
            if(proReceived!=null){
                productsReceived = proReceived.split(',');
            }
            Map<String,Id> singleCon = new Map<String, Id>();
            if((itemName == 'BASIC Membership for Surviving Spouse' || itemName == 'PREMIUM Membership for Surviving Spouse') && !productsReceived.contains('C031')){
                singleCon.put('conId',conId);
                singleCon.put('accId',accId);
                singleCon.put('proId',allProducts.get('C031'));
                conAndPro.add(singleCon);
            }else if(itemName == 'LIFE Membership for Surviving Spouse' && !productsReceived.contains('C041')){
                singleCon.put('conId',conId);
                singleCon.put('accId',accId);
                singleCon.put('proId',allProducts.get('C041'));
                conAndPro.add(singleCon);

            }
            
        }
        return conAndPro;
    }
    
  
Best Answer chosen by srkSF
Suraj Tripathi 47Suraj Tripathi 47

Hi,

Do some changes according to your code. I have written almost 90% of your test class.

@isTest
public class getContactsMatrixOrdersTest {

    @isTest
    public static void getConForProductTest() {
	Account ac=new Account();
	ac.Name='Test Data';
	Insert ac;
	
	DonorApi__Spouse__c spouseObj=new DonorApi__Spouse__c();
	spouseObj.Name='Spouse';
	spouseObj.CUSTOMER_CLASS__c ='Member';
	spouseObj.Customer_Status__c ='DECEASED';
	Insert spouseObj;
	
	OrderApi__Contact__c conObj=new OrderApi__Contact__c();
	conObj.CUSTOMER_CLASS__c='Member';
	conObj.Customer_Status__c='Active';
	conObj.DonorApi__Spouse__c=spouseObj.id;
	conObj.accountId=ac.id;
	conObj.apfy_products_received__c='Data'; //check Data Type and fill it
	insert conObj;
	
	OrderApi__Subscription_Plan__c subObj=new OrderApi__Subscription_Plan__c();
	subObj.Name='Test Data';
	insert subObj;
	
	OrderApi__Item__c oaObj=new OrderApi__Item__c();
	oaObj.Name='BASIC Membership for Surviving Spouse';
	insert oaObj;
	
	OrderApi__Source_Code__c objSourceCode=new OrderApi__Source_Code__c();
	objSourceCode.Name='Data Source';
	insert objSourceCode;
	
	OrderApi__Sales_Order__c objSales=new OrderApi__Sales_Order__c();
	objSales.Name='Sales';
	objSales.OrderApi__Source_Code__c=objSourceCode.id;
	Insert objSales;
	
        OrderApi__Sales_Order_Line__c objOrder=new OrderApi__Sales_Order_Line__c();
		objOrder.Name='Data test';
		objOrder.OrderApi__Sales_Order__c=objSales.id;
		insert objOrder;
		
        OrderApi__Subscription__c obj=new OrderApi__Subscription__c();
		obj.OrderApi__Item__c=oaObj.id;
		obj.OrderApi__Subscription_Plan__c=subObj.id;
		obj.OrderApi__Contact__c=conObj.id;
		obj.OrderApi__Status__c ='Active';
		obj.OrderApi__Sales_Order_Line__c=objOrder.id;
		insert obj;
        
		
		
		Map<String, Id> allProducts=new Map<String, Id>();
		
		allProducts.put('C031',obj.id);
		allProducts.put('C041',obj.id);
        test.startTest();
            getContactsMatrixOrders.getConForProduct(allProducts);
        test.stopTest();
    }         
        
}

Please mark it as the Best Answer.

Thank You

All Answers

Suraj Tripathi 47Suraj Tripathi 47

Hi,

Do some changes according to your code. I have written almost 90% of your test class.

@isTest
public class getContactsMatrixOrdersTest {

    @isTest
    public static void getConForProductTest() {
	Account ac=new Account();
	ac.Name='Test Data';
	Insert ac;
	
	DonorApi__Spouse__c spouseObj=new DonorApi__Spouse__c();
	spouseObj.Name='Spouse';
	spouseObj.CUSTOMER_CLASS__c ='Member';
	spouseObj.Customer_Status__c ='DECEASED';
	Insert spouseObj;
	
	OrderApi__Contact__c conObj=new OrderApi__Contact__c();
	conObj.CUSTOMER_CLASS__c='Member';
	conObj.Customer_Status__c='Active';
	conObj.DonorApi__Spouse__c=spouseObj.id;
	conObj.accountId=ac.id;
	conObj.apfy_products_received__c='Data'; //check Data Type and fill it
	insert conObj;
	
	OrderApi__Subscription_Plan__c subObj=new OrderApi__Subscription_Plan__c();
	subObj.Name='Test Data';
	insert subObj;
	
	OrderApi__Item__c oaObj=new OrderApi__Item__c();
	oaObj.Name='BASIC Membership for Surviving Spouse';
	insert oaObj;
	
	OrderApi__Source_Code__c objSourceCode=new OrderApi__Source_Code__c();
	objSourceCode.Name='Data Source';
	insert objSourceCode;
	
	OrderApi__Sales_Order__c objSales=new OrderApi__Sales_Order__c();
	objSales.Name='Sales';
	objSales.OrderApi__Source_Code__c=objSourceCode.id;
	Insert objSales;
	
        OrderApi__Sales_Order_Line__c objOrder=new OrderApi__Sales_Order_Line__c();
		objOrder.Name='Data test';
		objOrder.OrderApi__Sales_Order__c=objSales.id;
		insert objOrder;
		
        OrderApi__Subscription__c obj=new OrderApi__Subscription__c();
		obj.OrderApi__Item__c=oaObj.id;
		obj.OrderApi__Subscription_Plan__c=subObj.id;
		obj.OrderApi__Contact__c=conObj.id;
		obj.OrderApi__Status__c ='Active';
		obj.OrderApi__Sales_Order_Line__c=objOrder.id;
		insert obj;
        
		
		
		Map<String, Id> allProducts=new Map<String, Id>();
		
		allProducts.put('C031',obj.id);
		allProducts.put('C041',obj.id);
        test.startTest();
            getContactsMatrixOrders.getConForProduct(allProducts);
        test.stopTest();
    }         
        
}

Please mark it as the Best Answer.

Thank You

This was selected as the best answer
srkSFsrkSF
Thanks a ton Suraj.....I really appreciate your response :)