Предположим, в Account
объекте, он имеет 3 пользовательских поля, есть invoice_delivery_method
, invoice_delivery_email
и invoice_delivery_print
.Для invoice_delivery_method
типом является список выбора, и возможными значениями являются Email
, Email and Print
, Print
и Other
.Остальные два настраиваемых поля имеют флажок и по умолчанию не отмечены, что составляет false
.
Теперь, когда пользователь обновляет поле invoice_delivery_method
до Email
(либо на странице учетной записи Salesforce, либо на SOQL)invoice_delivery_email
установлен на true
, а invoice_delivery_print
установлен на false
.
Я создал класс триггера следующим образом:
trigger InvoiceDeliveryMethodTrigger on Account (before update) {
InvoiceDeliveryMethodTriggerHandler.handleBeforeUpdate(Trigger.new);
}
Внутри класса обработчика я сделал следующее:
public class InvoiceDeliveryMethodTriggerHandler {
public static void handleBeforeUpdate(Account[] accounts){
RecordType recordType = [select Id from RecordType where sobjecttype = 'Account' and Name =: MSSP_Settings__c.getOrgDefaults().Account_Record_Type__c];
for (Account account : accounts) {
if(account.RecordTypeId == recordType.Id) {
System.debug('Information for Account: ' + account);
System.debug('Information for Invoice Delivery Method: ' + account.Invoice_Delivery_Method__c);
account.Invoice_Delivery_Email__c = false;
account.Invoice_Delivery_Print__c = false;
String delivery_method = account.Invoice_Delivery_Method__c;
System.debug('String is not blank ' + String.isNotBlank(delivery_method));
if (String.isNotBlank(delivery_method)){
if (delivery_method.equals('Email')){
account.Invoice_Delivery_Email__c = true;
account.Invoice_Delivery_Print__c = false;
}
else if (delivery_method.equals('Email and Mail')){
account.Invoice_Delivery_Email__c = true;
account.Invoice_Delivery_Print__c = true;
}
else if (delivery_method.equals('Mail')){
account.Invoice_Delivery_Email__c = false;
account.Invoice_Delivery_Print__c = true;
}
}
}
}
}
}
У меня также есть один класс триггера на Account
после обновления, но я не изменил никакого значения для этого 3 настраиваемого поля.
Если я тестирую через приложение, кажется, что два настраиваемых поля обновляются на основе значения invoice_delivery_method
.Но у меня возникли проблемы с моим модульным тестированием.
Вот класс написанного мной модульного теста
@isTest
private class InvoiceDeliveryMethodTest {
@isTest(SeeAllData=true)
static void testAccountEmailSelected(){
Account testAccount = new Account();
// populating some of the mandatory field for Account
testAccount.Invoice_Delivery_Method__c = 'Other';
insert testAccount;
Account acct = [Select Id, Invoice_Delivery_Method__c, Invoice_Delivery_Email__c, Invoice_Delivery_Print__c from Account
where Id =: testAccount.Id];
acct.Invoice_Delivery_Method__c = 'Email';
update acct;
acct = [Select Id, Invoice_Delivery_Method__c, Invoice_Delivery_Email__c, Invoice_Delivery_Print__c from Account
where Id =: testAccount.Id];
System.assertEquals('Email', acct.Invoice_Delivery_Method__c);
System.assert(acct.Invoice_Delivery_Email__c);
System.assert(!acct.Invoice_Delivery_Print__c);
delete testAccount;
}
}
Когда я запускаю тестовый пример, он терпит неудачу на System.assert(acct.Invoice_Delivery_Email__c);
Это поля все еще false
.Почему это случилось?