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
Vasu@blrVasu@blr 

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

 

 

Ritesh AswaneyRitesh Aswaney

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?

 

for(integer i = 1; i<=12; i++) {
            Date sysDate = Date.newInstance(2012, i, 1); //1 rec each for Jan, Feb, ... Dec

            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;
Vasu@blrVasu@blr

still I am getting same code coverage around 42%