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
Sabrina Oliveira 3Sabrina Oliveira 3 

What am I missing in this test class?

Class:

public with sharing class DocumentsService {
    public class DocumentException extends Exception{}
    
    public static void validateContractDocument(List<Document__c> m_lstObjNew,
        Map<Id, Document__c> m_mapObjOld){
        Map<Id, Document__c> contracts = new Map<Id, Document__c>();
        
        for(Document__c doc : m_lstObjNew){
            if(doc.Contract__c != null)
                contracts.put(doc.Contract__c, doc);
        }        
        List<Document__c> docs = [ select Contract__c from Document__c where Contract__c in: contracts.keyset() ];
        
        for(Document__c item : docs){
            Document__c doc = contracts.get(item.Contract__c);
            doc.addError(new DocumentException('Only 1 contract is allowed'));
        }
    }

}


Test class (0% of coverage):

@isTest
private class DocumentsServiceTest {
    
    @testSetup    
    static void makeData(){
        Account acc = AccountTestBuilder.getBuilder()
            .persist();

        Contract ctrt = ContractTestBuilder.getBuilder()
            .withAccountId(acc.Id)
            .persist();
        
        Document__c doc = DocumentTestBuilder.getBuilder()
            .withContractId(ctrt.Id)
            .persist();
       
    }
    
    @IsTest
    static void methodTest(){ 
        Contract ctrt = [SELECT Id FROM Contract LIMIT 1];
        
        Document__c doc = [SELECT id, Name FROM Document__c LIMIT 1];
        doc.Contract__c = ctrt.Id;
        update doc;
            
        Test.startTest(); 
        Document__c doc2 = DocumentTestBuilder.getBuilder()
            .withContractId(ctrt.Id)
            .persist();
        Test.stopTest();
           
    }
}
 
Best Answer chosen by Sabrina Oliveira 3
CharuDuttCharuDutt
Hii Sabrina
Try Below Test Class
You Were Not Calling The Main Calss In Test Class That's Why It's Not Covering
@isTest
public class DocumentsServiceTest {
    @isTest
    public static void unitTest(){
        Map<Id, Document__c> DocMap = new Map<Id, Document__c>();
        
        Contact__c c = new Contract__c();
        c.Name = 'test Contract';
        //Fill All Required Fields;
        insert c;
        Document__c Doc = new Document__c();
        Doc.Name = 'Test Document';
        //Fill All Required Fields;
        insert Doc;
        DocMap.Put(Doc.id,Doc);
        Test.startTest();
        DocumentsService.validateContractDocument(new List<Document__c>{Doc},DocMap); //Calling Class With Method And passing Parameter 
        Test.stopTest();
    }
}
Please Mark It As Best Answer If It Helps
Thank You!