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
miiWorksmiiWorks 

Help with Test Method Code Coverage >75%

Hello

 

We are having an issue with getting our code coverage to an acceptable level. Can anyone suggest what to add to the test class to get our code coverage up to 75% (100%)?

 

Public Class

 

public with sharing class LoanApplicationOnUpdateHandler{
    public String LoanAppId;
    public Decimal ValuationAmt=0;
    public void OnAfterInsert(List<MyApp__Property__c> newRecords){
        updateLoanApplication(newRecords); 
    }    
    public void OnAfterUpdate(List<MyApp__Property__c> updatedRecords){
        updateLoanApplication(updatedRecords); 
    }
    // updates the loan application with various amounts from all properties assigned to it via the junction
    private void updateLoanApplication(List<MyApp__Property__c> newRecords) {   
      List<MyApp__Property__c> PropsWithJoins = [select Id, Name,
          (select Id, MyApp__Loan_Application__c from MyApp__Link_Between_Loan_Application_Property__r)
          FROM MyApp__Property__c 
          WHERE Id IN :Trigger.newMap.keySet()];              
      List<MyApp__Loan_Application__c> LoansToUpdate = new List<MyApp__Loan_Application__c>{};
      for(MyApp__Property__c b: PropsWithJoins){
         // LISTS ALL LINK RECORDS FOR PROPERTY
         for(MyApp__Link_Between_Loan_Application_Property__c c: b.MyApp__Link_Between_Loan_Application_Property__r){
            ValuationAmt=0;
            // FIND ALL LOAN APPS FROM LINKED PROPERTIES
            List<MyApp__Loan_Application__c> PropLinkwithLoans  = [select Id, Name,
              (select Id, Name,MyApp__Loan_Application__c,MyApp__Property__c
              FROM MyApp__Link_Between_Loan_Application_Property__r)
              FROM MyApp__Loan_Application__c
              WHERE Id =:c.MyApp__Loan_Application__c];               
              for(MyApp__Loan_Application__c d: PropLinkwithLoans ){  
                 for(MyApp__Link_Between_Loan_Application_Property__c h: d.MyApp__Link_Between_Loan_Application_Property__r){                
                  // FIND ALL PROPERTIES FOR THAT LOAN APP TO SUM UP INFO                 
                  List<MyApp__Property__c> PropwithLinkLoans1  = [select Id, Name,MyApp__Valuation_Estimated_Value_Dollars__c,
                  (select Id, Name from MyApp__Link_Between_Loan_Application_Property__r)
                  FROM MyApp__Property__c
                  WHERE Id =:h.MyApp__Property__c];                  
                  for(MyApp__Property__c aa: PropwithLinkLoans1){  
                      ValuationAmt=ValuationAmt + aa.MyApp__Valuation_Estimated_Value_Dollars__c;
                  }
                  // RETURN LOAN AND UPDATE
                  List<MyApp__Loan_Application__c> LoanToUpdate= [SELECT i.Id, i.Name,i.MyApp__Total_Security_Amount_Dollars__c
                      FROM MyApp__Loan_Application__c i
                      WHERE i.Id = :c.MyApp__Loan_Application__c LIMIT 1]; 
                  for (MyApp__Loan_Application__c LoanToUpdate1: LoanToUpdate)
                      LoanToUpdate1.MyApp__Total_Security_Amount_Dollars__c = ValuationAmt;
                  UPDATE LoanToUpdate;  
              }
            }
         }
      }
    }
}

 

test class error report,  red errors in the test check

 

8    public with sharing class LoanApplicationOnUpdateHandler{
9    public String LoanAppId;
10    public Decimal ValuationAmt=0;
11    public void OnAfterInsert(List<MyApp__Property__c> newRecords){
12    updateLoanApplication(newRecords);
13    }
14    public void OnAfterUpdate(List<MyApp__Property__c> updatedRecords){
15    updateLoanApplication(updatedRecords);
16    }
17    // updates the loan application with various amounts from all properties assigned to it via the junction
18    private void updateLoanApplication(List<MyApp__Property__c> newRecords) {
19    List<MyApp__Property__c> PropsWithJoins = [select Id, Name,
20    (select Id, MyApp__Loan_Application__c from MyApp__Link_Between_Loan_Application_Property__r)
21    FROM MyApp__Property__c
22    WHERE Id IN :Trigger.newMap.keySet()];
23    List<MyApp__Loan_Application__c> LoansToUpdate = new List<MyApp__Loan_Application__c>{};
24    for(MyApp__Property__c b: PropsWithJoins){
25    // LISTS ALL LINK RECORDS FOR PROPERTY
26    for(MyApp__Link_Between_Loan_Application_Property__c c: b.MyApp__Link_Between_Loan_Application_Property__r){
27    ValuationAmt=0;
28    // FIND ALL LOAN APPS FROM LINKED PROPERTIES
29    List<MyApp__Loan_Application__c> PropLinkwithLoans = [select Id, Name,
30    (select Id, Name,MyApp__Loan_Application__c,MyApp__Property__c
31    FROM MyApp__Link_Between_Loan_Application_Property__r)
32    FROM MyApp__Loan_Application__c
33    WHERE Id =:c.MyApp__Loan_Application__c];
34    for(MyApp__Loan_Application__c d: PropLinkwithLoans ){
35    for(MyApp__Link_Between_Loan_Application_Property__c h: d.MyApp__Link_Between_Loan_Application_Property__r){
36    // FIND ALL PROPERTIES FOR THAT LOAN APP TO SUM UP INFO
37    List<MyApp__Property__c> PropwithLinkLoans1 = [select Id, Name,MyApp__Valuation_Estimated_Value_Dollars__c,
38    (select Id, Name from MyApp__Link_Between_Loan_Application_Property__r)
39    FROM MyApp__Property__c
40    WHERE Id =:h.MyApp__Property__c];
41    for(MyApp__Property__c aa: PropwithLinkLoans1){
42    ValuationAmt=ValuationAmt + aa.MyApp__Valuation_Estimated_Value_Dollars__c;
43    }
44    // RETURN LOAN AND UPDATE
45    List<MyApp__Loan_Application__c> LoanToUpdate= [SELECT i.Id, i.Name,i.MyApp__Total_Security_Amount_Dollars__c
46    FROM MyApp__Loan_Application__c i
47    WHERE i.Id = :c.MyApp__Loan_Application__c LIMIT 1];
48    for (MyApp__Loan_Application__c LoanToUpdate1: LoanToUpdate)
49    LoanToUpdate1.MyApp__Total_Security_Amount_Dollars__c = ValuationAmt;
50    UPDATE LoanToUpdate;
51    }
52    }
53    }
54    }
55    }
56    }

 

Test class to be posted as limit exceeded on this post

 

miiWorksmiiWorks

test class

 

@isTest
private class Test_LoanApplicationOnUpdateHandler {

  private static MyApp__Loan_Application__c Loan1;
  private static MyApp__Loan_Application__c Loan2;
  private static MyApp__Property__c Prop1;
  private static MyApp__Property__c Prop2;  
  private static MyApp__Property__c Prop3;
  private static MyApp__Property__c Prop4;  
  
  

  // set up the data for each test method
  static {    
    // SETUP LOAN LIST
    Loan1= NEW MyApp__Loan_Application__c (
        MyApp__Loan_Status__c='New'
        ,MyApp__Loan_Type__c='Purchase Application'
        ,MyApp__Loan_NCCP__c='Coded'
        ,MyApp__Loan_Purpose__c='Investment'
    );
    INSERT Loan1;
    
    Loan2 = NEW MyApp__Loan_Application__c (
        MyApp__Loan_Status__c='New'
        ,MyApp__Loan_Type__c='Purchase Application'
        ,MyApp__Loan_NCCP__c='Non - Coded'
        ,MyApp__Loan_Purpose__c='Investment'
    );    
    INSERT Loan2 ;
    
    INSERT NEW List<MyApp__Loan_Application__c>{Loan1,Loan1};

    
    // SETUP PROPERTIES LIST
    Prop1 = NEW MyApp__Property__c (
        Name='123 Smith Street'
        ,MyApp__Type__c='House'
        ,MyApp__Contract_Estimated_Value_Dollars__c=20000.00
        ,MyApp__State__c='NSW'
        ,MyApp__Country__c='Australia'
        ,MyApp__Status__c='Current'
        ,MyApp__Purpose__c='Investment'
        ,MyApp__Suburb__c='Woololomoo'
        ,MyApp__Post_Code__c='2000'
        ,MyApp__Access_Contact_Name__c='John Doe'
        ,MyApp__Access_Contact_Phone__c='02 999555555'        
    );
    INSERT Prop1;
    Prop2 = NEW MyApp__Property__c (
        Name='456 Smith Street'
        ,MyApp__Type__c='House'
        ,MyApp__Contract_Estimated_Value_Dollars__c=12000.00
        ,MyApp__State__c='NSW'
        ,MyApp__Country__c='Australia'
        ,MyApp__Status__c='Current'
        ,MyApp__Purpose__c='Investment'
        ,MyApp__Suburb__c='Woololomoo'
        ,MyApp__Post_Code__c='2000'
        ,MyApp__Access_Contact_Name__c='John Doe'
        ,MyApp__Access_Contact_Phone__c='02 999555555'        
    );
    INSERT Prop2;  
    
 
    INSERT NEW List<MyApp__Property__c>{Prop1,Prop2,Prop3};    
  
  
  }

  static testMethod void testNewRecords() {
    String LoanAppId;
    Decimal ValuationAmt=0;
    
    Prop4 = NEW MyApp__Property__c (
        Name='101112 Smith Street'
        ,MyApp__Type__c='House'
        ,MyApp__Contract_Estimated_Value_Dollars__c=16000.00
        ,MyApp__State__c='NSW'
        ,MyApp__Country__c='Australia'
        ,MyApp__Status__c='Current'
        ,MyApp__Purpose__c='Investment'
        ,MyApp__Suburb__c='Woololomoo'
        ,MyApp__Post_Code__c='2000'
        ,MyApp__Access_Contact_Name__c='John Doe'
        ,MyApp__Access_Contact_Phone__c='02 999555555'        
    );
    INSERT Prop4;  
    
    Prop3 = NEW MyApp__Property__c (
        Name='789 Smith Street'
        ,MyApp__Type__c='House'
        ,MyApp__Contract_Estimated_Value_Dollars__c=14000.00
        ,MyApp__State__c='NSW'
        ,MyApp__Country__c='Australia'
        ,MyApp__Status__c='Current'
        ,MyApp__Purpose__c='Investment'
        ,MyApp__Suburb__c='Woololomoo'
        ,MyApp__Post_Code__c='2000'
        ,MyApp__Access_Contact_Name__c='John Doe'
        ,MyApp__Access_Contact_Phone__c='02 999555555'        
    );
    INSERT Prop3;       
    //INSERT NEW List<MyApp__Property__c>{Prop4};    
     
    MyApp__Link_Between_Loan_Application_Property__c LBLAP1 = new MyApp__Link_Between_Loan_Application_Property__c();
    LBLAP1.MyApp__Active__c = TRUE;
    LBLAP1.MyApp__Loan_Application__c=Loan2.Id;
    LBLAP1.MyApp__Property__c=Prop3.Id;

    MyApp__Link_Between_Loan_Application_Property__c LBLAP2 = new MyApp__Link_Between_Loan_Application_Property__c();
    LBLAP2.MyApp__Active__c = TRUE;
    LBLAP2.MyApp__Loan_Application__c=Loan2.id;
    LBLAP2.MyApp__Property__c=Prop4.id;  
    
    INSERT NEW List<MyApp__Link_Between_Loan_Application_Property__c >{LBLAP1,LBLAP2}; 
    
    System.assertEquals(1,[SELECT count() FROM MyApp__Link_Between_Loan_Application_Property__c WHERE MyApp__Property__c = :Prop4.Id]);  
    System.assertEquals(1,[SELECT count() FROM MyApp__Link_Between_Loan_Application_Property__c WHERE MyApp__Property__c = :Prop3.Id]);
  
      
    List<MyApp__Property__c> PropsWithJoins = [select Id, Name,
          (select Id, MyApp__Loan_Application__c from MyApp__Link_Between_Loan_Application_Property__r)
          FROM MyApp__Property__c 
          WHERE Id =:Prop4.id]; 
                   
      System.assertEquals( 1, PropsWithJoins.size() );
          
      List<MyApp__Loan_Application__c> LoansToUpdate = new List<MyApp__Loan_Application__c>{};
      for(MyApp__Property__c b: PropsWithJoins){
         // LISTS ALL LINK RECORDS FOR PROPERTY
         for(MyApp__Link_Between_Loan_Application_Property__c c: b.MyApp__Link_Between_Loan_Application_Property__r){
            // FIND ALL LOAN APPS FROM LINKED PROPERTIES
            
            System.assert(ValuationAmt<=0); 
            ValuationAmt=0;
            System.assertEquals(0,ValuationAmt); 
              
            List<MyApp__Loan_Application__c> PropLinkwithLoans  = [select Id, Name,
              (select Id, Name,MyApp__Loan_Application__c,MyApp__Property__c
              FROM MyApp__Link_Between_Loan_Application_Property__r)
              FROM MyApp__Loan_Application__c
              WHERE Id =:c.MyApp__Loan_Application__c]; 
             
              System.assertEquals( 1, PropLinkwithLoans.size() );
              
               
              
              for(MyApp__Loan_Application__c d: PropLinkwithLoans ){  
                 for(MyApp__Link_Between_Loan_Application_Property__c h: d.MyApp__Link_Between_Loan_Application_Property__r){                
                  
                  // FIND ALL PROPERTIES FOR THAT LOAN APP TO SUM UP INFO                 
                  List<MyApp__Property__c> PropwithLinkLoans1  = [select Id, Name,MyApp__Valuation_Estimated_Value_Dollars__c,
                  (select Id, Name from MyApp__Link_Between_Loan_Application_Property__r)
                  FROM MyApp__Property__c
                  WHERE Id =:h.MyApp__Property__c]; 
                  
                  System.assertEquals( 1, PropwithLinkLoans1.size() );
                  
                  for(MyApp__Property__c aa: PropwithLinkLoans1){  
                      System.assertEquals(ValuationAmt,ValuationAmt);
                      ValuationAmt=ValuationAmt + aa.MyApp__Valuation_Estimated_Value_Dollars__c;
                      System.assertEquals(ValuationAmt,ValuationAmt);
                  }
                  
                  
                  
                  // RETURN LOAN AND UPDATE
                  List<MyApp__Loan_Application__c> LoanToUpdate= [SELECT i.Id, i.Name,i.MyApp__Total_Security_Amount_Dollars__c
                      FROM MyApp__Loan_Application__c i
                      WHERE i.Id = :c.MyApp__Loan_Application__c LIMIT 1]; 
                  for (MyApp__Loan_Application__c LoanToUpdate1: LoanToUpdate){
                      LoanToUpdate1.MyApp__Total_Security_Amount_Dollars__c = ValuationAmt;
                  }
                  
                  LoanToUpdate.get(0).MyApp__Total_Security_Amount_Dollars__c = ValuationAmt;     
                  update LoanToUpdate;  
                  System.assertEquals(ValuationAmt,[SELECT i.Id, i.Name,i.MyApp__Total_Security_Amount_Dollars__c
                      FROM MyApp__Loan_Application__c i WHERE i.Id = :c.MyApp__Loan_Application__c LIMIT 1].MyApp__Total_Security_Amount_Dollars__c );
              }
            }
         }
      }
      
      System.assertEquals(30000, ValuationAmt);
      System.assertEquals(30000,[SELECT Id, Name,MyApp__Total_Security_Amount_Dollars__c
                      FROM MyApp__Loan_Application__c 
                      WHERE Id = :Loan2.Id LIMIT 1].MyApp__Total_Security_Amount_Dollars__c);        
    
    
  }
  
  static testMethod void testUpdatedRecords() {
    String LoanAppId;
    Decimal ValuationAmt=0;
    
    
    Prop4 = NEW MyApp__Property__c (
        Name='101112 Smith Street'
        ,MyApp__Type__c='House'
        ,MyApp__Contract_Estimated_Value_Dollars__c=16000.00
        ,MyApp__State__c='NSW'
        ,MyApp__Country__c='Australia'
        ,MyApp__Status__c='Current'
        ,MyApp__Purpose__c='Investment'
        ,MyApp__Suburb__c='Woololomoo'
        ,MyApp__Post_Code__c='2000'
        ,MyApp__Access_Contact_Name__c='John Doe'
        ,MyApp__Access_Contact_Phone__c='02 999555555'        
    );
    INSERT Prop4;  
    
    Prop3 = NEW MyApp__Property__c (
        Name='789 Smith Street'
        ,MyApp__Type__c='House'
        ,MyApp__Contract_Estimated_Value_Dollars__c=14000.00
        ,MyApp__State__c='NSW'
        ,MyApp__Country__c='Australia'
        ,MyApp__Status__c='Current'
        ,MyApp__Purpose__c='Investment'
        ,MyApp__Suburb__c='Woololomoo'
        ,MyApp__Post_Code__c='2000'
        ,MyApp__Access_Contact_Name__c='John Doe'
        ,MyApp__Access_Contact_Phone__c='02 999555555'        
    );
    INSERT Prop3;       

    //INSERT NEW List<MyApp__Property__c>{Prop4};    
     
    MyApp__Link_Between_Loan_Application_Property__c LBLAP1 = new MyApp__Link_Between_Loan_Application_Property__c();
    LBLAP1.MyApp__Active__c = TRUE;
    LBLAP1.MyApp__Loan_Application__c=Loan2.Id;
    LBLAP1.MyApp__Property__c=Prop3.Id;

    MyApp__Link_Between_Loan_Application_Property__c LBLAP2 = new MyApp__Link_Between_Loan_Application_Property__c();
    LBLAP2.MyApp__Active__c = TRUE;
    LBLAP2.MyApp__Loan_Application__c=Loan2.Id;
    LBLAP2.MyApp__Property__c=Prop4.Id;  
    
    // test the records where created
    INSERT NEW List<MyApp__Link_Between_Loan_Application_Property__c >{LBLAP1,LBLAP2}; 
    
    System.assertEquals(1,[SELECT count() FROM MyApp__Link_Between_Loan_Application_Property__c WHERE MyApp__Property__c = :Prop4.Id]);  
    System.assertEquals(1,[SELECT count() FROM MyApp__Link_Between_Loan_Application_Property__c WHERE MyApp__Property__c = :Prop3.Id]);
         
    
    
      List<MyApp__Property__c> PropsWithJoins = [select Id, Name,
          (select Id, MyApp__Loan_Application__c from MyApp__Link_Between_Loan_Application_Property__r)
          FROM MyApp__Property__c 
          WHERE Id =:Prop4.id];          
      
      System.assertEquals( 1, PropsWithJoins.size() );
          
      List<MyApp__Loan_Application__c> LoansToUpdate = new List<MyApp__Loan_Application__c>{};
      for(MyApp__Property__c b: PropsWithJoins){
         // LISTS ALL LINK RECORDS FOR PROPERTY
         for(MyApp__Link_Between_Loan_Application_Property__c c: b.MyApp__Link_Between_Loan_Application_Property__r){
            // FIND ALL LOAN APPS FROM LINKED PROPERTIES
            List<MyApp__Loan_Application__c> PropLinkwithLoans  = [select Id, Name,
              (select Id, Name,MyApp__Loan_Application__c,MyApp__Property__c
              FROM MyApp__Link_Between_Loan_Application_Property__r)
              FROM MyApp__Loan_Application__c
              WHERE Id =:c.MyApp__Loan_Application__c]; 
              
              System.assertEquals( 1, PropLinkwithLoans.size() );
               
              ValuationAmt=0;
              System.assertEquals(0,ValuationAmt);             
              
              for(MyApp__Loan_Application__c d: PropLinkwithLoans ){  
                 for(MyApp__Link_Between_Loan_Application_Property__c h: d.MyApp__Link_Between_Loan_Application_Property__r){                
                  
                  
                  // FIND ALL PROPERTIES FOR THAT LOAN APP TO SUM UP INFO                 
                  List<MyApp__Property__c> PropwithLinkLoans1  = [select Id, Name,MyApp__Valuation_Estimated_Value_Dollars__c,
                  (select Id, Name from MyApp__Link_Between_Loan_Application_Property__r)
                  FROM MyApp__Property__c
                  WHERE Id =:h.MyApp__Property__c]; 
                  
                  System.assertEquals( 1, PropwithLinkLoans1.size() );
                  
                  for(MyApp__Property__c aa: PropwithLinkLoans1){  
                      System.assertEquals(ValuationAmt,ValuationAmt);
                      ValuationAmt=ValuationAmt + aa.MyApp__Valuation_Estimated_Value_Dollars__c;
                      System.assertEquals(ValuationAmt,ValuationAmt);
                  }
                  
                  
                  // RETURN LOAN AND UPDATE
                  List<MyApp__Loan_Application__c> LoanToUpdate= [SELECT i.Id, i.Name,i.MyApp__Total_Security_Amount_Dollars__c
                      FROM MyApp__Loan_Application__c i
                      WHERE i.Id = :c.MyApp__Loan_Application__c LIMIT 1]; 
                  for (MyApp__Loan_Application__c LoanToUpdate1: LoanToUpdate){
                      LoanToUpdate1.MyApp__Total_Security_Amount_Dollars__c = ValuationAmt;
                  }
                  LoanToUpdate.get(0).MyApp__Total_Security_Amount_Dollars__c = ValuationAmt;     
                  UPDATE LoanToUpdate;  
                  System.assertEquals(ValuationAmt,[SELECT i.Id, i.Name,i.MyApp__Total_Security_Amount_Dollars__c
                  FROM MyApp__Loan_Application__c i WHERE i.Id = :c.MyApp__Loan_Application__c LIMIT 1].MyApp__Total_Security_Amount_Dollars__c );
                      
              }
            }
         }
      }
      //System.assertEquals(30000, ValuationAmt);
      //System.assertEquals(30000,[SELECT Id, Name,MyApp__Total_Security_Amount_Dollars__c
      //               FROM MyApp__Loan_Application__c 
      //               WHERE Id = :Loan2.Id LIMIT 1].MyApp__Total_Security_Amount_Dollars__c);  
                            
    
       
  }
  
}

 

kranjankranjan

Hi miiWorks,

 

I think your code and test class are behaving as you have written and the coverage shown is according to them as well. Basically your code is expecting and catering to following 2 scenarios:

 

1) INSERT operation on MyApp__Property__c

2) UPDATE operation on MyApp__Property__c

 

And you have a dependent object called MyApp__Loan_Application__c.

 

Now here in scenario 1, you will never have records of MyApp__Loan_Application__c as either parent is just created or even if childs are created before parent, the parent id is still not linked to the childs (check your test case).

 

And in scenario 2, though you code is expecting this as a use case, however your test case is never updating the parent object (i.e. MyApp__Property__c) once childs are linked.

 

So you need to check if your implementation is correct or needs correction. And if the implementation is accurate as per requirement, then update your test case to cater to scenario 2.

 

Hope that helps.