You need to sign in to do that
Don't have an account?

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;
}
}
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;
}
}
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