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
Ashwini ZineAshwini Zine 

Unable to cover test class

I am Unable to cover the code. I have inserted all the possible data in test class still the code coverage is 35%. Can someone please help?

Apex class:

global class ProductCustomController
{
   
    public static String accountId{get; set;}
    public static List<Opportunity> lstopportunity{get;set;}
    public Map<String,Map<String,List<Opportunity>>> mapFamilyPRodValues{get;set;}
    public Map<String,List<Opportunity> >mapCategorizedPRoValues{get;set;}
    
    public ProductCustomController(ApexPages.StandardController controller){
        accountId= Controller.getRecord().id;
    }
    
    @RemoteAction
    global static Map<String,Map<String,Map<String,Set<Opportunity>>>> getItems(String accId) { 
        String accountId = accId;
        lstopportunity= [Select (Select Id,Quantity1__c,Monthly_GP__c,Name,Installed__c,Cost_Price_Per_Month__c,Unit_Price_Per_Month__c,Product2Id,
        Product2.Name,Product2.Product_Family__c,Product2.Product_Category1__c,Total_One_Off_GP__c from OpportunityLineItems where Status__c IN ('Processing', 'Active (orange)','Installing','Active (green)', 'Cancelling') ORDER BY Product2.Product_Family__c,Product2.Product_Category1__c),Id,Name,Minimum_term__c,StageName from Opportunity where AccountId =:accountId];
        Map<Set<String>,Map<String,Map<String,sObject>>> DataMap = new Map<Set<String>,Map<String,Map<String,sObject>>>();
        Set<String> setOfCategory = new Set<String>();
        Map<String,Map<String,Map<String,Set<Opportunity>>>> mapOfCategory = new Map<String,Map<String,Map<String,Set<Opportunity>>>>();
        
		for(Opportunity ListOfOpp : lstopportunity){
           for(OpportunityLineItem lineitem: ListOfOpp.OpportunityLineItems){ 
            if(mapOfCategory.containsKey(lineitem.Product2.Product_Category1__c)){
               
                Map<String,Map<String,Set<Opportunity>>> FamilyProductValues = mapOfCategory.get(lineitem.Product2.Product_Category1__c);
                if(FamilyProductValues.containsKey(lineitem.Product2.Product_Family__c)){
                    
                    Map<String,Set<Opportunity>> ProductOppvalue = FamilyProductValues.get(lineitem.Product2.Product_Family__c);
                    if(ProductOppvalue.containsKey(lineitem.Product2.Name)){
                        
                        Set<Opportunity> oppValue = ProductOppvalue.get(lineitem.Product2.Name);
                        oppValue.add(ListOfOpp);
                        ProductOppvalue.put(lineitem.Product2.Name,oppValue);
                    }
                    else{
                        Set<Opportunity> NewListOfOpp = new Set<Opportunity>();
                        NewListOfOpp.add(ListOfOpp);
                        ProductOppvalue.put(lineitem.Product2.Name,NewListOfOpp);
                    }
                    FamilyProductValues.put(lineitem.Product2.Product_Family__c,ProductOppvalue);
                }
                else{
                    Map<String,Set<Opportunity>> NewProductOppvalue = new Map<String,Set<Opportunity>>();
                    Set<Opportunity> NewListOfOpp = new Set<Opportunity>();
                    NewListOfOpp.add(ListOfOpp);
                    NewProductOppvalue.put(lineitem.Product2.Name,NewListOfOpp);
                    
                    FamilyProductValues.put(lineitem.Product2.Product_Family__c,NewProductOppvalue);
                }
            }               
            else{
                Map<String,Map<String,Set<Opportunity>>> NewFamilyProductValues = new Map<String,Map<String,Set<Opportunity>>>();
                Map<String,Set<Opportunity>> NewProductOppvalue = new Map<String,Set<Opportunity>>();
                Set<Opportunity> NewListOfOpp = new Set<Opportunity>();
                NewListOfOpp.add(ListOfOpp);
                NewProductOppvalue.put(lineitem.Product2.Name,NewListOfOpp);
                NewFamilyProductValues.put(lineitem.Product2.Product_Family__c,NewProductOppvalue);
                mapOfCategory.put(lineitem.Product2.Product_Category1__c,NewFamilyProductValues);
            }
           }
        }
        return mapOfCategory;
    }
}


Test Class : 

@isTest
public class ProductCustomControllerTest{
     public Map<String,Map<String,List<Opportunity>>> mapFamilyPRodValues{get;set;}
    public Map<String,List<Opportunity> >mapCategorizedPRoValues{get;set;}
    public static testMethod void testProducts1() {
        Test.Starttest();
        
        Account acc = new Account();
        acc.Name = 'test';
        acc.Phone = '78676565656';
        acc.Type = 'Customer';
        acc.Industry= 'Agriculture & Mining';
        acc.NumberofUKSites__c = '1';
        acc.Employees_DueDil__c = '10-19';
        acc.SIC_Code_DueDil__c = 'test';
        insert acc; 
        System.debug('Debug Log : acc Insertion Successful');
ApexPages.StandardController stdController = new ApexPages.StandardController(acc);
        ProductCustomController con = new ProductCustomController(stdController);        
      
        
        Opportunity opp = new Opportunity(Name='Test', 
                                              Account = acc, 
                                              StageName='Qualify',
                                              Company_reg_no__c ='test',
                                              Type = 'Connectivity',
                                              Minimum_term__c = 6546,
                                              CompellingEvent__c = 'test',
                                              NextStep  = 'test',
                                              CloseDate = System.today(),
                                              Delivery_Address_same_as_Installation_ad__c = true,
                                              Installation_address_same_as_Billing_Add__c = true,
                                              //Product2 = prod,
                                              //City__c='test', 
                                              
                                              AccountId=acc.Id, 
                                               
                                              Probability=100);
           
        insert opp; 
        
        Id pricebookId = Test.getStandardPricebookId();

            //Create your product
            Product2 prod = new Product2(
                Product_Category1__c='Mobile' ,Name = 'Laptop X200', Sale_Price_One_Off__c = 03.00,Sale_Price_Per_Month__c = 03.00,  Cost_Price_One_Off__c = 02.00, Cost_Price_Per_Month__c = 02.00
            );
            insert prod;
            
            //Create your pricebook entry
            PricebookEntry pbEntry = new PricebookEntry(
                 Pricebook2Id = pricebookId,
                 Product2Id = prod.Id,
                 UnitPrice = 100.00,
                 IsActive = true
            );
            insert pbEntry;
            
            //create your opportunity line item.  This assumes you already have an opportunity created, called opp
            OpportunityLineItem oli = new OpportunityLineItem(
                 OpportunityId = opp.Id,
                 Quantity = 5,
                 PricebookEntryId = pbEntry.Id,
                 TotalPrice = 3 * pbEntry.UnitPrice
            );
            insert oli;
			 OpportunityLineItem oli1 = new OpportunityLineItem(
                 OpportunityId = opp.Id,
                 Quantity = 5,
                 PricebookEntryId = pbEntry.Id,
                 TotalPrice = 3 * pbEntry.UnitPrice
            );
            insert oli1;

        String accid = acc.id;
        ProductCustomController.getItems(accid);
       test.stopTest();
    }
}