+ Start a Discussion
Chidanand Magadum 24Chidanand Magadum 24 

Test Coverage (Lines after if condition are not covered)

Hi friends,

The lines after If condition  if(numberDaysDue<=60) (NOTE: Condition is Meeting)  in my APEX code are not getting covered (These lines r shown in red color) . Any workaround Plz.


My Test Class
@isTest (seeAllData=true)  

public class RenewalTest{

public static String CRON_EXP = '0 0 0 15 3 ? 2022';

    RenewalOpportunity r= new RenewalOpportunity();
    
    static testmethod void RenewalTest() {
   // Test.startTest();
    
    String jobId = System.schedule('Chidanand',CRON_EXP,new RenewalOpportunity ());
                        
                        CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered,
         NextFireTime
         FROM CronTrigger WHERE id = :jobId];
         
         System.assertEquals(CRON_EXP,
         ct.CronExpression);
         
         System.assertEquals(0, ct.TimesTriggered);
         System.assertEquals('2022-03-15 00:00:00',
         String.valueOf(ct.NextFireTime));
                        
    
    Date d = Date.Today();
    Date dueDate = date.newInstance(2015, 3, 20);
   // CSM__c csm= new CSM__c(Name='Chidanand',Customer_Success_Manager__c='Chidanand',Email='Chidanand@knstek.com');  
   // insert csm;
    Campaign c = new Campaign(Name='Chidanand');
    insert c;
    
    Product2 prod = new Product2(Name = 'Laptop X200',
            Family = 'Hardware');
        insert prod;
        
        
    
    
    Account a = new Account(Name='KNS',Service_End_Date__c=dueDate,Customer_Success_Manager__c='Jeff Tucker',ARR__c=500);
    insert a;
    Opportunity o = new Opportunity(Name='abc',AccountId=a.Id,CampaignId=c.Id,
                    StageName='Legal',Amount=5000,CloseDate=d,NextStep='Open',AutoCreatedFlag__c=false);
                    
    for(Account acc:[select Id,Name,Service_End_Date__c,Customer_Success_Manager__c,ARR__c
    from Account acc
    where
     (Id NOT IN (select AccountID from opportunity
    where AutoCreatedFlag__c = true ))]){
    
    if(a.Service_End_Date__c!=NULL){
    
        Integer numberDaysDue= d.daysBetween(a.Service_End_Date__c);
        system.debug('Chidanand'+numberDaysDue);
        
        if(numberDaysDue<=60)  {
        
            Opportunity Op= new Opportunity();
            op.Name=a.Name;
            op.StageName='Legal';
            op.Amount=a.ARR__c;
            op.AccountId=a.ID;
            op.CloseDate=Date.today();
            op.Customer_Success_Manager__c=a.Customer_Success_Manager__c;
            op.NextStep='Won';
           // op.OwnerID='005d0000001Kt9D';
            op.AutoCreatedFlag__c = true;
            insert op;
            
            System.debug('Hi Chidanand');
            
           // Id pricebookId = Test.getStandardPricebookId();
           List<PriceBookEntry> entryList = new List<PriceBookEntry>();
           Pricebook2 stdpb = [SELECT Id FROM Pricebook2 WHERE IsStandard = true]; // Select Price Book
           PricebookEntry standardPrice = new PricebookEntry(
           Pricebook2Id = stdpb .Id, Product2Id = prod.Id,
           UnitPrice = 10, IsActive = true);
          // entryList.add(standardPrice );
           
           
           Integer counter = [select count()  FROM PriceBookEntry where Product2.Id=:prod.Id And
        PriceBook2.isStandard=true AND UnitPrice=10];
        
        entryList.add(standardPrice );
        if(counter==0){
        insert entryList;
        }
           
           
           
          // insert entryList;
           
           String z=prod.Id;
           
           
           List<PriceBookEntry> priceBookList = [select Id, Product2Id, Product2.Id, Product2.Name FROM PriceBookEntry
           where (Product2.Id=:z) And (PriceBook2.isStandard=true) LIMIT 1 ]; // Get the Price Book entry ID that we entered in the previous step
        OpportunityLineItem oli = new OpportunityLineItem(); // Create new Opportunity Product
        oli.OpportunityId = op.Id;                           
        oli.PricebookEntryId=priceBookList[0].Id;       // PricebookentryID of the existing pricebook entry for the specific product
        oli.UnitPrice =10;                       // Sales Price (or List Price)
        oli.Quantity=1;
        insert oli;
           
           
        
        }
    
    }
    
    
    }
    
    
    
    
    
    
    
    
    
    
    
    }
    
    }



APEX CODE

global class RenewalOpportunity implements Schedulable {
       global void execute(SchedulableContext SC) {
           
                RenewalOpp R= new RenewalOpp();
           
           
       }
    
    public class RenewalOpp{

RenewalOpp(){
Date d = Date.Today();

for(Account a:[select id,Name,Service_End_Date__c,Customer_Success_Manager__c,ARR__c
    from Account acc
    where
     (Id NOT IN (select AccountID from opportunity
    where AutoCreatedFlag__c = true ))])
{
    if(a.Service_End_Date__c!=NULL){
        
    // Difference between Service End date and Current date    
    Integer numberDaysDue= d.daysBetween(a.Service_End_Date__c);
    
    if(numberDaysDue<=60)  {  
        
    // Creating a new opportunity  
    Opportunity O= new Opportunity();
    o.Name=a.Name;
    o.StageName='Legal';
    o.Amount=a.ARR__c;
    o.AccountId=a.ID;
    o.CloseDate=a.Service_End_Date__c;
    o.Customer_Success_Manager__c=a.Customer_Success_Manager__c;
    o.NextStep='Won';
    o.OwnerID='005d0000001Kt9D';
    o.AutoCreatedFlag__c = true;
        insert o;
        
    
        
        List<PriceBookEntry> priceBookList = [select Id, Product2Id, Product2.Id, Product2.Name FROM PriceBookEntry where Product2.Id='01td0000003SDB8' And
        PriceBook2.isStandard=true LIMIT 1 ]; // Get the Price Book entry ID that we entered in the previous step
        OpportunityLineItem oli = new OpportunityLineItem(); // Create new Opportunity Product
        oli.OpportunityId = o.Id;                           
        oli.PricebookEntryId=priceBookList[0].Id;       // PricebookentryID of the existing pricebook entry for the specific product
        oli.UnitPrice =a.ARR__c;                       // Sales Price (or List Price)
        oli.Quantity=1;
        insert oli;
                          
              }
    }
}
 }
 
 }
    
    
    
    }
David ZhuDavid Zhu
the following code should be OK with minimum modification. I didn't verify the syntax. Hope this helps.
 
@isTest (seeAllData=true)  

public class RenewalTest{

public static String CRON_EXP = '0 0 0 15 3 ? 2022';

 
    RenewalOpportunity r= new RenewalOpportunity();
    
    static testmethod void RenewalTest() {
   
    Test.startTest();   // this is a must at this line


    Date d = Date.Today();
    Date dueDate = date.newInstance(2015, 3, 20);

    Account a = new Account(Name='KNS',Service_End_Date__c=dueDate,Customer_Success_Manager__c='Jeff Tucker',ARR__c=500);
    insert a;
    Opportunity o = new Opportunity(Name='abc',AccountId=a.Id,CampaignId=c.Id,
                    StageName='Legal',Amount=5000,CloseDate=d,NextStep='Open',AutoCreatedFlag__c=false);
    insert o;

    
    String jobId = System.schedule('Chidanand',CRON_EXP,new RenewalOpportunity ());
                        
                        CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered,
         NextFireTime
         FROM CronTrigger WHERE id = :jobId];
         
         System.assertEquals(CRON_EXP,
         ct.CronExpression);
         
         System.assertEquals(0, ct.TimesTriggered);
         System.assertEquals('2022-03-15 00:00:00',
         String.valueOf(ct.NextFireTime));
                        
         system.stoptest();  // this is a must at this line
     
        

         Opportunity op = [select id,stagename,amount,nextstep from opportunity where name = 'KNS'];
	 system.assertequals('Legal',op.stagename);
	 system.assertequals(a.ARR__c,op.amount);  //you can assert all fields inserted in the schedulable class, I only put two as example.


         OpportunityLineItem oli = [select id,unitprice,quantity from OpportunityLineItem  where id =:op.id];
         system.assertequals(10,oli.unitprice);
         system.assertequals(1,oli.quantity);  
//you can assert all fields inserted in the schedulable class, I only put two as example.


}

 
Chidanand Magadum 24Chidanand Magadum 24
@David Zhu,
   
                     Thanks a lot. I covered 100% code.  But one question really wanna ask u.

Why did u put the Test.startTest() and Test.stopTest at those two specific Places ? 

I really  wanna Know.

Thanks