Как проверить триггер contentdocumentlink для развертывания Salesforce Prod - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь развернуть триггер для продвижения на Salesforce. Я надеялся, что кто-нибудь сможет помочь мне с примером тестов для этого триггера.

Вот мой триггер. Он выполняет свою функцию, которая заключается в обновлении поля bool при появлении нового contentNote (или чего-либо типа контента), которое затем имеет побочные эффекты через компоновщик процессов.

trigger NewNote on ContentDocumentLink (before insert) {
Set<Id> setParentId = new Set<Id>();
List<Client_Relationships__c> crlst = new List<Client_Relationships__c>();

for (ContentDocumentLink cdl : trigger.new ) {
    setParentId.add(cdl.LinkedEntityId);
    }
crlst = [select Id , newNote__c from Client_Relationships__c where Id IN :setParentId];
For(Client_Relationships__c e : crlst)
 {
    e.newNote__c = True;
 }
 update crlst;
} 

1 Ответ

0 голосов
/ 05 марта 2020

Триггер, который вы написали, может быть более эффективным, если пропустить SOQL-запрос, как показано ниже:

trigger NewNote on ContentDocumentLink (before insert) {
   List<Client_Relationships__c> crlst = new List<Client_Relationships__c>();

   for (ContentDocumentLink cdl : trigger.new ) {
      if(cdl.LinkedEntityId.getSObjectType().getDescribe().getName() == 'Client_Relationships__c'){
         crlst.add(
            new Client_Relationships__c(
               Id = cdl.LinkedEntityId,
               newNote__c = true
            )
         );
      }
   }
   update crlst;
} 

Лучше всего добавить код в класс обработчика или служебного класса и использовать только один триггер. за объект. Имя этого триггера можно изменить на «ContentDocumentLinkTrigger», если вы примете эту практику.

Класс тестирования для этого триггера приведен ниже. Я не смог протестировать компиляцию, потому что у меня нет того же пользовательского объекта.

@IsTest
private class ContentDocumentLinkTriggerTest {

    @TestSetup
    static void setupTest() {
        insert new ContentVersion(
                Title = 'Test_Document.txt',
                VersionData = Blob.valueOf('This is my file body.'),
                SharingPrivacy  = 'N',
                SharingOption   = 'A',
                Origin          = 'H',
                PathOnClient    = '/Test_Document.txt'
        );
        List<Client_Relationships__c> relationships = new List<Client_Relationships__c>();
        for(Integer i = 0; i < 300; i++){
            relationships.add(
                    new Client_Relationships__c(
                            //add required field names and values
                    )
            );
        }
        insert relationships;
    }

    static testMethod void testInsertTrigger() {
        //prepare data
        List<ContentVersion> contentVersions = new List<ContentVersion>([
                SELECT Id, ContentDocumentId FROM ContentVersion
        ]);
        System.assertNotEquals(0, contentVersions.size(), 'ContentVersion records should have been retrieved');
        List<Client_Relationships__c> relationships = getAllClientRelationships();
        System.assertNotEquals(0, relationships.size(), 'Client Relationship records should have been retrieved.');
        List<ContentDocumentLink> documentLinks = new List<ContentDocumentLink>();
        for(Integer i = 0; i < 252; i++){
            documentLinks.add(
                    new ContentDocumentLink(
                            ContentDocumentId = contentVersions[0].ContentDocumentId,
                            LinkedEntityId = relationships[i].Id,
                            ShareType = 'I'
                    )
            );
        }
        //test functionality
        Test.startTest();
            insert documentLinks;
        Test.stopTest();

        //assert expected results
        List<Client_Relationships__c> relationshipsAfterProcessing = getAllClientRelationships();
        for(Client_Relationships__c relationship : relationshipsAfterProcessing){
            System.assert(relationship.newNote__c, 'The newNote__c field value should be true.');
        }
    }

    private static List<Client_Relationships__c> getAllClientRelationships(){
        return new List<Client_Relationships__c>([
                SELECT Id, newNote__c FROM Client_Relationship__c
        ]);
    }
}

Для настройки тестовых данных полезно иметь служебный класс, который централизует создание правильно сформированных записей. Это чрезвычайно полезно, когда ваша кодовая база становится большой и правило проверки влияет на вставку новых данных во многие тестовые классы. При централизованном методе вставленные данные необходимо изменить только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...