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
Øyvind Borgersen 10Øyvind Borgersen 10 

Test class contentdocument

Hi,

I have a trigger for contentdocument which I'm unable to get a 100% cover on. Can someone help me complete this class to a 100%? Right now, it's around 69%. The part marked in bold is not covered in the test class.

This is the class:

trigger contentDocumentTrigger on contentdocument(before delete) {

    List <Id> contentDocId      = new List <Id> ();
    List <Case> caseList        = new List <Case> ();
    List <String> caseRecType   = new List <String> ();
    Set <Id>  contDocLinkedSet  = new Set <Id> ();

    //Add static records to list
    caseRecType.add('Videogram');
    
    
    //Check if trigger isdelete
    if (trigger.IsDelete) {
        for (ContentDocument con: Trigger.old) {
            System.debug('Trigger old has started' + Trigger.old);
            contentDocId.add(con.Id);
            System.debug('This is id for contentdocument' + con.Id);
        }
        // Find LinkedEntityId in from contentdocumentlink
        for (ContentDocumentLink cdl: [SELECT ContentDocumentId,
                                              LinkedEntityId
                                         FROM ContentDocumentLink
                                        WHERE ContentDocumentId IN: contentDocId]) {
                                              contDocLinkedSet.add(cdl.LinkedEntityId);
                                              System.debug('Set contdoclinkedset' + contDocLinkedSet);

            // Find case from ID saved in query above(contDocLinkedSet)
            for (List < Case > cas: [SELECT Id,
                                    (SELECT Id FROM ContentDocumentLinks LIMIT 1)
                                       FROM case
                                      WHERE Id IN:contDocLinkedSet
                                        AND case.RecordType.DeveloperName IN:caseRecType 
                                      ]) {

                                    system.debug('Cas list' + cas);

                // Update case with false in File_exist__c
                for (Case cs: cas) {
                    if (cs != null) {
                        cs.File_exist__c = false;
                        caseList.add(cs);
                    }
                    // Create map to prevent duplicates in delete
                    map<id, case> casmap = new map<id, case>();

                    // Add all values from caselist to map
                    casmap.putall(caseList);
                    system.debug('casmap ' + casmap);

                    // Check if casmap has values
                    if(casmap.size()>0){

                    // Update casmap values and remove checkmark for fileexist field        
                    UPDATE casmap.values();

                    }
                }
            }
        }
    }
}

Test class:
@isTest
private class contentDocumentLinkTriggerTest {
    static testMethod void newcontentDocument() {
        Case testCase = new Case();
        testCase.Subject = 'Test Case';
        insert testCase;

        ContentVersion contentVersion = new ContentVersion(
            Title = 'Penguins',
            PathOnClient = 'Penguins.jpg',
            VersionData = Blob.valueOf('Test Content'),
            IsMajorVersion = true
        );
        insert contentVersion;
        List < ContentDocument > documents = [SELECT Id, Title, LatestPublishedVersionId FROM ContentDocument];

        //create ContentDocumentLink  record 
        ContentDocumentLink cdl = New ContentDocumentLink();
        cdl.LinkedEntityId = testCase.id;
        cdl.ContentDocumentId = documents[0].Id;
        cdl.shareType = 'V';
        insert cdl;

        If(testCase != null) {
            testcase.File_exist__c = false;
            update testcase;
            
            delete documents;
        }
    }    
}
Best Answer chosen by Øyvind Borgersen 10
Deepali KulshresthaDeepali Kulshrestha
Hi ,

Try the following test class, it may be helpful for you:
You did not add RecordType in Case creation that's why your code not covered.
@IsTest
private class contentDocumentLinkTriggerTest {
    @IsTest
    static testMethod void newcontentDocument() {
        Id RecordTypeIdCase = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Videogram').getRecordTypeId();
        Case testCase = new Case();
        testCase.Subject = 'Test Case';
        testCase.recordtypeid=RecordTypeIdCase;
        testCase.Origin='Phone';
        testCase.Status='Open';
        insert testCase;

        ContentVersion contentVersion = new ContentVersion(
            Title = 'Penguins',
            PathOnClient = 'Penguins.jpg',
            VersionData = Blob.valueOf('Test Content'),
            IsMajorVersion = true
        );
        insert contentVersion;
        
        List < ContentDocument > documents = [SELECT Id, Title, LatestPublishedVersionId FROM ContentDocument];
        
        ContentDocumentLink cdl = New ContentDocumentLink();
        cdl.LinkedEntityId = testCase.id;
        cdl.ContentDocumentId = documents[0].Id;
        cdl.shareType = 'V';
        insert cdl;

        if(testCase != null) {
            testcase.File_exist__c = false;
            update testcase;
            
            delete documents;
        }
    }    
}

I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.

Thanks and Regards,
Deepali Kulshrestha

All Answers

Deepali KulshresthaDeepali Kulshrestha
Hi ,

Try the following test class, it may be helpful for you:
You did not add RecordType in Case creation that's why your code not covered.
@IsTest
private class contentDocumentLinkTriggerTest {
    @IsTest
    static testMethod void newcontentDocument() {
        Id RecordTypeIdCase = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Videogram').getRecordTypeId();
        Case testCase = new Case();
        testCase.Subject = 'Test Case';
        testCase.recordtypeid=RecordTypeIdCase;
        testCase.Origin='Phone';
        testCase.Status='Open';
        insert testCase;

        ContentVersion contentVersion = new ContentVersion(
            Title = 'Penguins',
            PathOnClient = 'Penguins.jpg',
            VersionData = Blob.valueOf('Test Content'),
            IsMajorVersion = true
        );
        insert contentVersion;
        
        List < ContentDocument > documents = [SELECT Id, Title, LatestPublishedVersionId FROM ContentDocument];
        
        ContentDocumentLink cdl = New ContentDocumentLink();
        cdl.LinkedEntityId = testCase.id;
        cdl.ContentDocumentId = documents[0].Id;
        cdl.shareType = 'V';
        insert cdl;

        if(testCase != null) {
            testcase.File_exist__c = false;
            update testcase;
            
            delete documents;
        }
    }    
}

I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.

Thanks and Regards,
Deepali Kulshrestha
This was selected as the best answer
Andrew GAndrew G
I will just quietly point out that the trigger has SELECT statements within FOR loops.

And that the test code doesn't have asserts.

Regards
Andrew