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
Tejas Wadke 5Tejas Wadke 5 

Help me for writing test class for given apex class?

Hi Folks,
I am trying to write test class but unable to cover code coverage beyond 48%.I am getting error while accessing inner class in my test method.Please help me to cover my code coverage atleast upto 75%.

Apex Class:
*********************************************************************
global class InboundLitmosEmailService implements Messaging.InboundEmailHandler
{
 private Map<String,Litmos_Completed_History__c> litmosComHistoryToUpsert = new Map<String,Litmos_Completed_History__c>();
    
    private Map<String,Contact> emailIdContactMap = new Map<String,Contact>();
    private Map<Id,Contact> idContactMap = new Map<Id,Contact>();
    private Map<String,User> emailIdUserMap = new Map<String,User>();
    private Map<String,Litmos_Completed_History__c> UserIDtoLimitosCompletedHistory = new Map<String,Litmos_Completed_History__c>();
  String errorMessage{get;set;}
    Boolean hasError{get;set;}  
 @TestVisible private class TargetweekDetails
    {
        public string Name;
        public integer TargetWeekNo;
        public Datetime TargetDate;
    }
  global InboundLitmosEmailService()
    {
        hasError = false;
    }
 global Messaging.InboundEmailResult handleInboundEmail(Messaging.inboundEmail email, Messaging.InboundEnvelope env)
    {
      final Integer DATE_COMPLETED = 1;
        final Integer EMAIL_ID = 0;
        final Integer MODULE_STATUS = 28;
       Messaging.InboundEmailResult result = new Messaging.InboundEmailResult();
        if(email.binaryAttachments != null && email.binaryAttachments.size() == 1 && (email.binaryAttachments[0].fileName.endsWith('.csv') || email.binaryAttachments[0].fileName.endsWith('.txt')))
        {                       
            for(Integer x = 0; x < email.binaryAttachments.size(); x++)
            {
                Set<String> emailIds = new Set<String>();
             String attachmentString = email.binaryAttachments[x].body.toString().replace('|',',');
                attachmentString = attachmentString.replace('"', '');
                List<String> csvRows = attachmentString.split('\n',0);
 Integer r = 0;
                for(String row : csvRows)
                {
                 errorMessage = '';
 if(r > 0)
                    {
              if(row.length() > 30)
                        {
                           List<String> rowFields = row.split(',');
                            if(rowFields[EMAIL_ID] != null)
                                emailIds.add(String.valueOf(rowFields[EMAIL_ID]));
                        }
                    }
                    r++;
                }
                System.debug('???? Email Ids'+ emailIds);
                for(Contact c : [Select Id, Program_Start_Date__c, Email From Contact Where Email IN :emailIds])
                {
                    System.debug('??? inside for loop');
                    idContactMap.put(c.Id,c);
                    emailIdContactMap.put(c.Email,c);
                }
                System.debug('????'+ idContactMap.size());
                for(User u : [Select Id, ContactId From User Where ContactId IN :idContactMap.keyset()])
                {
                    emailIdUserMap.put(idContactMap.get(u.ContactId).Email, u);
                }
               System.debug('????'+ emailIdUserMap.size());
                 for(Litmos_Completed_History__c l : [Select Id, Name, Completed__c  From Litmos_Completed_History__c Where Contact__c IN :idContactMap.keyset()])
                {
                    UserIDtoLimitosCompletedHistory.put(l.Name, l);
                }
                System.debug('????'+ UserIDtoLimitosCompletedHistory.size());
              r=0;
                map<Decimal,Decimal> GoalsMap = new map<Decimal,Decimal>();
                list<Required_Lesson__c> GoalsList = [select id, name, Lessons_Required__c, Week_Number__c from Required_Lesson__c];
                for (Required_Lesson__c theGoal : GoalsList)
                    GoalsMap.put(theGoal.Week_Number__c,theGoal.Lessons_Required__c);
              Map<String,Double> lchNameToCompletedModuleCountMap = new Map<String,Double>();
  for(String row : csvRows)
                {                
                    errorMessage = '';
                    if(r > 0)
                    {
                        if(row.length() > 30)
                        {
            List<String> rowFields = row.split(',');
                            System.debug('????'+r);
                            String emailid = rowFields[EMAIL_ID];
                            System.debug('???? Email Id '+rowFields[EMAIL_ID]);
if(rowFields[EMAIL_ID] != null && emailIdContactMap!=null && emailIdUserMap !=null && emailIdContactMap.get(rowFields[EMAIL_ID]) != null && emailIdContactMap.get(emailid).Program_Start_Date__c != null)                            
                            {
                                System.debug('????? Inside if');
                                String UserID = emailIdUserMap.get(emailid).Id;
                           Date LastAttemptDate = formatDate(rowFields[DATE_COMPLETED], 'finishdate');
                                
                                TargetweekDetails Targetweek = getTargetweekDetails(emailIdContactMap.get(emailid).Program_Start_Date__c, LastAttemptDate);
                                System.debug('????'+Targetweek.TargetWeekNo);
                                Litmos_Completed_History__c singleLitmos = new Litmos_Completed_History__c();

                                if(lchNameToCompletedModuleCountMap.get(UserID+'-'+Targetweek.TargetWeekNo) == null)
                                {
                                    lchNameToCompletedModuleCountMap.put(UserID+'-'+Targetweek.TargetWeekNo,0);
                                }
                                if(lchNameToCompletedModuleCountMap.get(singleLitmos.Name) == null)
                                {
                                    lchNameToCompletedModuleCountMap.put(singleLitmos.Name,0);
                                }
 if(UserIDtoLimitosCompletedHistory.containsKey(UserID+'-'+Targetweek.TargetWeekNo))
                                {
                                    System.debug('????? Existing');
                                    if(litmosComHistoryToUpsert.containsKey(UserID+'-'+Targetweek.TargetWeekNo))
                                        singleLitmos = litmosComHistoryToUpsert.get(UserID+'-'+Targetweek.TargetWeekNo);
                                    else
                                        singleLitmos = UserIDtoLimitosCompletedHistory.get(UserID+'-'+Targetweek.TargetWeekNo);
                                     lchNameToCompletedModuleCountMap.put(UserID+'-'+Targetweek.TargetWeekNo,lchNameToCompletedModuleCountMap.get(UserID+'-'+Targetweek.TargetWeekNo) + 1);                                        
                                   
                                    singleLitmos.Required_At_Time__c = GoalsMap.get(Targetweek.TargetWeekNo);
                                    singleLitmos.Week_Number__c = Targetweek.TargetWeekNo; 
                                    singleLitmos.Week_Start__c =  Targetweek.TargetDate;
                                    singleLitmos.Week_End__c = Targetweek.TargetDate.addDays(7);
                                 singleLitmos.Completed__c = lchNameToCompletedModuleCountMap.get(UserID+'-'+Targetweek.TargetWeekNo);
                                    litmosComHistoryToUpsert.put(UserID+'-'+Targetweek.TargetWeekNo, singleLitmos);
                                }
                                else
                                {
                                    System.debug('????? New');
                                    singleLitmos.Contact__c = emailIdContactMap.get(emailid).Id;
                                    singleLitmos.UserId__c = UserID;
                                    singleLitmos.Name = UserID+'-'+Targetweek.TargetWeekNo;
                                    singleLitmos.Required_At_Time__c = GoalsMap.get(Targetweek.TargetWeekNo);
                                    singleLitmos.Week_Number__c = Targetweek.TargetWeekNo; 
                                    singleLitmos.Week_Start__c =  Targetweek.TargetDate;
                                    singleLitmos.Week_End__c = Targetweek.TargetDate.addDays(6);
                             lchNameToCompletedModuleCountMap.put(singleLitmos.Name,lchNameToCompletedModuleCountMap.get(UserID+'-'+Targetweek.TargetWeekNo) + 1);                                                                            
                                    singleLitmos.Completed__c = lchNameToCompletedModuleCountMap.get(singleLitmos.Name);
                                    singleLitmos.Month__c = String.valueOf(Targetweek.TargetDate.month());
                                    singleLitmos.Year__c = String.valueOf(Targetweek.TargetDate.year());
                                    
                                    UserIDtoLimitosCompletedHistory.put(singleLitmos.Name,singleLitmos);
                                    litmosComHistoryToUpsert.put(UserID+'-'+Targetweek.TargetWeekNo, singleLitmos);
                                }
                             }
                       }
                    }
                    r++;
                }
     if (Test.isRunningTest()){           
            
                    Savepoint sp = Database.setSavepoint();
                    try
                        {
                            System.debug('=> printing the upsert values');
                            for(String key : litmosComHistoryToUpsert.keySet())
                            {
                                System.debug('=>key:'+key+','+'value:'+litmosComHistoryToUpsert.get(key));
                            }
                            upsert litmosComHistoryToUpsert.values();
  }
                    catch(Exception e)
                        {
                            Database.rollback(sp);
                            System.debug('////////////////// Inbound Email Exception: ' + e);                       
                            hasError = true;
                        }
                    }
            }
        }       
        result.success = !hasError;
        return result;
    }
@TestVisible private TargetweekDetails getTargetweekDetails(Date ProgramStartDate, Date LastAttempt)
    {        
        TargetweekDetails singleweek = new TargetweekDetails();
        Date referenceDate = Date.newInstance(2015, 1, 2);
        Integer diff = referenceDate.daysbetween(LastAttempt);
        Integer mod = Math.mod(diff,7);
        Date weekStartDate = LastAttempt.addDays(-mod);
        singleweek.TargetDate = weekStartDate;
        singleweek.name = 'CurrentWeek';
        singleweek.TargetWeekNo = ProgramStartDate.daysbetween(weekStartDate.addDays(8))/7;
         return singleweek;
    }
}

 
R Z KhanR Z Khan

Hi Tejas,

can you paste your test classes as well. I dont see a readon you would get an error for private classes as u mark them as @testVisible. Can you use '< >' button when writing code please for readability.
 

Thanks