You need to sign in to do that
Don't have an account?
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
test class
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.