Working off of the code provided here https://help.salesforce.com/s/articleView?id=sf.entitlements_milestones_trigger.htm&type=5
The test class does not cover required coverage specially the if condition in the below code. Any inputs and help is appreciated.
Apex Class
public class MilestoneUtils {
public static void completeMilestone(List<Id> caseIds,String milestoneName, DateTime complDate) {
List<CaseMilestone> cmsToUpdate = [select Id, completionDate
from CaseMilestone cm
where caseId in :caseIds and
cm.MilestoneType.Name=:milestoneName
and completionDate = null limit 1];
if (cmsToUpdate.isEmpty() == false){
for (CaseMilestone cm : cmsToUpdate){
cm.completionDate = complDate;
}
update cmsToUpdate;
}
}
}
Here is the test class method
@isTest static void updateMileStnComplDateTest(){
List<Account> acts = new List<Account>();
Account myAcc = new Account(Name='TestAct', phone='1001231234');
acts.add(myAcc);
Account busAcc = new Account(Name = 'TestForMS', phone='4567890999');
acts.add(busAcc);
insert acts;
Contact cont = new Contact(FirstName = 'Test', LastName = 'LastName',
phone='4567890999', accountid = busAcc.id);
insert(cont);
SlaProcess sla = [SELECT Id FROM SlaProcess WHERE isActive = true LIMIT 1];
Entitlement entl = new Entitlement(Name='TestEntitlement', AccountId=busAcc.Id,
slaProcessId = sla.Id);
insert entl;
List<Case> cases = new List<Case>{};
Case c = new Case(Subject = 'Test Case with Entitlement ',
EntitlementId = entl.Id, ContactId = cont.Id,
Status = 'Closed', SlaStartDate = date.today() - 5
);
cases.add(c);
insert cases;
List<Id> caseIds = new List<Id>();
for (Case cL : cases){
caseIds.add(cL.Id);
}
milestoneUtils.completeMilestone(caseIds, 'Resolution Time', System.now());