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

Code coverage for batch class
How can I improve code coverage for my below class?
Lines which are in red are not covered,
Please, help me
global class My_InsertActual_Batch implements Database.Batchable<sObject> {
Public String Query;
List<User_Budget__c> ublst = new List<User_Budget__c>();
List<User_Budget__c> ublst1 = new List<User_Budget__c>();
List<Commission__c> comlst = new List<Commission__c>();
List<Commission__c> comlst1 = new List<Commission__c>();
Set<Id> ubid = new Set<Id>();
Set<Id> comid = new Set<Id>();
global Database.queryLocator start(Database.BatchableContext bc) {
Query = 'SELECT Actual_Dirty__c,Actual__c,Channel__c,Month_Year__c,OwnerId FROM User_Budget__c WHERE Actual_Dirty__c = True LIMIT 20';
return Database.getQueryLocator(Query);
}
global void execute(Database.BatchableContext bc, LIST<SObject> lst) {
for(sObject s : lst) {
User_Budget__c ub = (User_Budget__c)s;
ubid.add(ub.OwnerId);
ublst.add(ub);
}
System.Debug('$$$$$$'+ubid);
comlst = [select id,Sales_Team_Member__c,
Total_My_SO_Sales_January__c, Total_My_SO_Sales_February__c,Total_My_SO_Sales_March__c,
Total_My_SO_Sales_April__c,Total_My_SO_Sales_May__c,Total_My_SO_Sales_June__c,
Total_My_SO_Sales_July__c,Total_My_SO_Sales_August__c,Total_My_SO_Sales_September__c,
Total_My_SO_Sales_October__c,Total_My_SO_Sales_November__c,Total_My_SO_Sales_December__c,
Total_Cash_Carry_Sales_January__c, Total_Cash_Carry_Sales_February__c,Total_Cash_Carry_Sales_March__c,
Total_Cash_Carry_Sales_April__c,Total_Cash_Carry_Sales_May__c,Total_Cash_Carry_Sales_June__c,
Total_Cash_Carry_Sales_July__c,Total_Cash_Carry_Sales_August__c,Total_Cash_Carry_Sales_September__c,
Total_Cash_Carry_Sales_October__c,Total_Cash_Carry_Sales_November__c,Total_Cash_Carry_Sales_December__c
from Commission__c where Sales_Team_Member__c in :ubid];
System.debug('@@@@@'+comlst);
for(Commission__c com : comlst) {
comid.add(com.id);
}
//ublst = [SELECT Actual_Dirty__c,Actual__c,Channel__c,Month_Year__c,OwnerId FROM User_Budget__c];
System.debug('******'+ublst);
for(User_Budget__c u: ublst) {
u.Actual__c = 0;
for(Commission__c com : comlst) {
//SO Sales January
if((u.OwnerId == com.Sales_Team_Member__c) &&
(u.Actual_Dirty__c == True)) {
//u.Actual__c = 0;
if(u.Channel__c == 'Special Order') {
If(u.Month_Year__c.month() == 1) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_January__c;
}
//SO Sales February
if(u.Month_Year__c.month() == 2) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_February__c;
}
//SO Sales March
if(u.Month_Year__c.month() == 3) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_March__c;
}
//SO Sales April
if(u.Month_Year__c.month() == 4) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_April__c;
}
//SO Sales May
if(u.Month_Year__c.month() == 5) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_May__c;
}
//SO Sales June
if(u.Month_Year__c.month() == 6) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_June__c;
}
//SO Sales July
if(u.Month_Year__c.month() == 7) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_July__c;
}
//SO Sales August
if(u.Month_Year__c.month() == 8) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_August__c;
}
//SO Sales September
if(u.Month_Year__c.month() == 9) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_September__c;
}
//SO Sales October
if(u.Month_Year__c.month() == 10) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_October__c;
System.debug(com.Total_My_SO_Sales_October__c+'######'+u.Actual__c+u.Month_Year__c.month());
System.debug(u.Actual_Dirty__c+'!!!!!');
}
//SO Sales November
if(u.Month_Year__c.month() == 11) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_November__c;
}
//SO Sales December
if(u.Month_Year__c.month() == 12) {
//u.Actual__c = 0;
u.Actual__c += com.Total_My_SO_Sales_December__c;
}
}
//CC Sales January
if(u.Channel__c == 'Cash & Carry') {
if(u.Month_Year__c.month() == 1) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_January__c;
}
//CC Sales February
if(u.Month_Year__c.month() == 2) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_February__c;
}
//CC Sales March
if(u.Month_Year__c.month() == 3) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_March__c;
}
//CC Sales April
if(u.Month_Year__c.month() == 4) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_April__c;
}
//CC Sales May
if(u.Month_Year__c.month() == 5) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_May__c;
}
//CC Sales June
if(u.Month_Year__c.month() == 6) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_June__c;
}
//CC Sales July
if(u.Month_Year__c.month() == 7) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_July__c;
}
//CC Sales August
if(u.Month_Year__c.month() == 8) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_August__c;
}
//CC Sales September
if(u.Month_Year__c.month() == 9) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_September__c;
}
//CC Sales October
if(u.Month_Year__c.month() == 10) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_October__c;
System.debug(com.Total_Cash_Carry_Sales_October__c+'######'+u.Actual__c+u.Month_Year__c.month());
System.debug(u.Actual_Dirty__c+'!!!!!');
}
//CC Sales November
if(u.Month_Year__c.month() == 11) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_November__c;
}
//CC Sales December
if(u.Month_Year__c.month() == 12) {
//u.Actual__c = 0;
u.Actual__c += com.Total_Cash_Carry_Sales_December__c;
}
}
}
}
u.Actual_Dirty__c = False;
ublst1.add(u);
}
update ublst1;
}
global void finish(Database.BatchableContext bc) {
AsyncApexJob a = [SELECT Id, Status, NumberOfErrors, JobItemsProcessed,
TotalJobItems, CreatedBy.Email
FROM AsyncApexJob WHERE Id =:BC.getJobId()];
If(a.Status == 'Completed') {
My_scheduledActual_Batch bs = new My_scheduledActual_Batch();
Datetime sysTime = System.now();
sysTime = sysTime.addminutes(1);
//String tStr = '0 05 * * * ? ';
String chron_exp = '' + sysTime.second() + ' ' + sysTime.minute() + ' ' +
sysTime.hour() + ' ' + sysTime.day() + ' ' + sysTime.month() + ' ? ' + sysTime.year();
System.schedule('Update Actual'+sysTime.getTime(),chron_exp, bs);
}
If(a.Status != 'Completed') {
// Send an email to the Apex job's submitter notifying of job completion.
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[] {a.CreatedBy.Email,’mail@mail.com'};
mail.setToAddresses(toAddresses);
mail.setSubject('Apex Sharing Recalculation ' + a.Status);
mail.setPlainTextBody
('The batch Apex job processed ' + a.TotalJobItems +
' batches with '+ a.NumberOfErrors + ' failures.');
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });
My_scheduledActual_Batch bs = new My_scheduledActual_Batch();
Datetime sysTime = System.now();
sysTime = sysTime.addminutes(6);
//String tStr = '0 05 * * * ? ';
String chron_exp = '' + sysTime.second() + ' ' + sysTime.minute() + ' ' +
sysTime.hour() + ' ' + sysTime.day() + ' ' + sysTime.month() + ' ? ' + sysTime.year();
System.schedule('Update Actual'+sysTime.getTime(),chron_exp, bs);
}
}
}
Below is my test calss:
@isTest
private class Test_My_InsertActual_Batch {
static testMethod void My_InsertActual_Batch(){
User u1 = [SELECT Id,Name FROM User WHERE
Email = 'mail@mail.com' limit 1];
List <User_Budget__c> ublst = new List<User_Budget__c>();
for(integer i = 0; i<200; i++) {
Date sysDate = Date.parse('1/31/2012');
sysDate = sysDate.adddays(i);
User_Budget__c ub = new User_Budget__c(
Channel__c = 'Cash & Carry',
Actual__c = 0,
Actual_Dirty__c = True,
Budget_Currency__c = 500,
Month_Year__c = sysDate,
OwnerId = u1.id);
ublst.add(ub);
}
insert ublst;
Test.startTest();
My_InsertActual_Batch insact = new My_InsertActual_Batch();
ID batchprocessid = Database.executeBatch(insact);
My_scheduledActual_Batch bs = new My_scheduledActual_Batch();
Datetime sysTime = System.now();
sysTime = sysTime.addminutes(1);
String chron_exp = '' + sysTime.second() + ' ' + sysTime.minute() + ' ' +
sysTime.hour() + ' ' + sysTime.day() + ' ' + sysTime.month() + ' ? ' + sysTime.year();
System.schedule('Update Actual'+sysTime.getTime(),chron_exp, bs);
Test.stopTest();
}
}
You need a User_Budget__c record for every month, it would seem
Therfore, rather than iterating over 200 days, how about one record for each month?
still I am getting same code coverage around 42%