Как проверить триггер с процессом утверждения? - PullRequest
1 голос
/ 07 марта 2012

У меня есть триггер, который инициирует процесс утверждения при соблюдении определенных критериев:

trigger AddendumAfterIHMS on Addendum__c (after update) {

  for (integer i = 0; i<Trigger.new.size(); i++){

    if(Trigger.new[i].RecordTypeId != '012V0000000CkQA'){

        if(Trigger.new[i].From_IHMS__c != null && Trigger.old[i].From_IHMS__c == null){

            ID addendumId = Trigger.new[i].Id;

            // Start next approval process
            Approval.ProcessSubmitRequest request = new Approval.ProcessSubmitRequest();
            request.setObjectId(addendumId);
            Approval.ProcessResult requestResult = Approval.process(request);

        }
    }
  }
}

Он работает отлично, но теперь мне нужно создать для него тестовый класс.Я создал класс, который обеспечивает покрытие кода до 75%, что является минимумом, но я требователен и хочу иметь 100% покрытие моего кода.Тестовый класс, который у меня есть, застревает на линии request.setObjectId(addendumId); и не проходит мимо него.Я получаю сообщение об ошибке:

System.DmlException: Update failed. First exception on row 0 with id a0CV0000000B8cgMAC; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, AddendumAfterIHMS: execution of AfterUpdate

Вот тестовый класс, который я написал до сих пор, большая часть класса фактически тестирует некоторые другие триггеры, но важная строка, которая выдает ошибку, является самой последнейline update addendumTierFeature;

@isTest
private class AddendumTest {

static testMethod void myUnitTest() {

    // Query Testing Account, will need ID changed before testing to place into production
    Account existingAccount = [SELECT Id FROM Account LIMIT 1];
    Model__c existingModel = [SELECT Id FROM Model__c WHERE Active__c = TRUE LIMIT 1];
    Pricebook2 existingPricebook = [SELECT Id,Name FROM Pricebook2 WHERE IsActive = TRUE LIMIT 1];
    List<Contact> existingContacts = [SELECT Id,Name FROM Contact LIMIT 2];

    Contact existingContactPrimary = existingContacts[0];
    Contact existingContactSecondary = existingContacts[1];

    Opportunity newOpportunity = new Opportunity(

        Name = 'New Opportunity',
        Account = existingAccount,
        CloseDate = Date.today(),
        Order_Proposed__c = Date.today(),
        StageName = 'Branch Visit - Not Responding',
        Opportunity_Follow_Up__c = 'Every 120 Days',
        LeadSource = 'Farm Lists',
        Source_Detail__c = 'FSBO',
        Model_Name__c = existingModel.Id,
        Processing_Fee__c = 100.50,
        Site_State__c = 'OR',
        base_Build_Zone__c = 'OR',
        Pricebook_from_Lead__c = existingPricebook.Name

    );

    insert newOpportunity;
    //system.assert(newOpportunity.Id != null);

    ID newOppId = newOpportunity.Id;

    OpportunityContactRole contactPrimary = new OpportunityContactRole(
        Role = 'Primary',
        IsPrimary = true,
        OpportunityId = newOppId,
        ContactId = existingContactPrimary.Id
    );

    OpportunityContactRole contactSecondary = new OpportunityContactRole(
        Role = 'Primary',
        IsPrimary = false,
        OpportunityId = newOppId,
        ContactId = existingContactPrimary.Id
    );

    insert contactPrimary;
    insert contactSecondary;

    newOpportunity.Name = 'Different - Updating';
    newOpportunity.Order_Accepted__c = Datetime.now();

    update newOpportunity;

    Addendum__c addendumCustomOption = new Addendum__c(
        RecordTypeId = '012V0000000CkQA', //Pre Priced Custom Option
        Opportunity__c = newOppId,
        Item_Pre_Priced_Description__c = 'a1eV00000004DNu',
        Reason__c = 'This is a reason',
        Item__c = 'This is an Item',
        Quantity__c = 1
    );

    Addendum__c addendumTierFeature = new Addendum__c(
        RecordTypeId = '012V0000000Cjks', //Tier Feature
        Opportunity__c = newOppId,
        Category__c = 'Countertops',
        Reason__c = 'This is a reason',
        Item__c = 'This is an Item',
        Quantity__c = 1
    );

    insert addendumCustomOption;
    insert addendumTierFeature;

    addendumCustomOption.Quantity__c = 2;
    addendumTierFeature.Quantity__c = 2;

    update addendumCustomOption;
    update addendumTierFeature;
    update newOpportunity;

    addendumTierFeature.To_IHMS__c = system.now();

    update addendumTierFeature;

    addendumTierFeature.From_IHMS__c = system.now();


    update addendumTierFeature;

  }
}

Любая помощь по этому вопросу будет принята с благодарностью.Я считаю, что проблема в том, как я тестирую начало процесса утверждения.Для этого есть специальная функция тестирования?

1 Ответ

2 голосов
/ 07 марта 2012

Немного покопавшись, я обнаружил, что ошибка на самом деле связана с моим процессом утверждения.Я продолжал копаться в журналах ошибок, пока не дошел до ошибки: caused by: System.DmlException: Process failed. First exception on row 0; first error: MANAGER_NOT_DEFINED, Manager undefined.: [].Эта фраза указывает на то, что никто не определен для следующего шага в моем процессе утверждения.

Когда я создавал возможность, я не устанавливал владельца, и каким-то образом это создавало возможность, у которой был владелец без менеджера.Приложение также было создано без владельца / менеджера.Поэтому, когда я попытался запустить следующий процесс утверждения, не было менеджера, который бы мог отправить утверждение, и была выдана ошибка.

...