#unit-testing #salesforce #apex #apex-code #salesforce-service-cloud
#модульное тестирование #salesforce #apex #apex-code #salesforce-сервис-облако
Вопрос:
Недавно я наткнулся на проблему с получением покрытия кода для кода Apex, который оценивает контрольные точки обращения по их целевым значениям даты. При попытке создать обращение в тестовом классе для него не создается контрольная точка обращения после вставки, хотя выполняются все критерии, определенные в процессе предоставления прав.
Кроме того, читая статьи, подобные этой, о правах, кажется, что я создал все. Процесс предоставления права активен, право с соответствующей учетной записью, связанной с обращением, создано и связано с обращением, рабочие часы действительны, процесс предоставления права связан с правом. Критерии ввода обращения соответствуют тому, что определено в процессе предоставления прав для контрольных точек, но все же в тестовом классе контрольные точки не создаются.
System.debug(‘контрольные точки обращения = ‘ cmss); оператор возвращает пустой список, и логика, которая зависит от целевой даты этапа обращения, не может быть охвачена. Чего-то не хватает в тестовых данных?
Пример тестового класса:
@IsTest частный класс GetCaseTest {
@TestSetup
static void createTestData(){
Profile p = [SELECT Id FROM Profile WHERE Name='Customer Service Lightning'];
UserRole role = [SELECT ID, Name FROM UserRole WHERE Name Like 'NO%' LIMIT 1];
System.debug('@role: ' role);
User u = new User(
Alias = 'standt',
Email='testmail@test.com',
EmailEncodingKey='UTF-8',
FirstName='Test',
LastName='Testing',
LanguageLocaleKey='en_US',
LocaleSidKey='en_US',
ProfileId = p.Id,
UserRoleId=role.Id,
TimeZoneSidKey='America/Los_Angeles',
UserName='testmail@test.com'
);
insert u;
Group g = new Group(
Name='NO CS',
Type = 'Queue'
);
insert g;
queuesobject q1 = new queuesobject(SObjectType = 'Case', queueid=g.id);
insert q1;
GroupMember member = new GroupMember();
member.UserOrGroupId = u.Id;
member.GroupId = g.Id;
insert member;
}
@isTest
static void getCaseFuture(){
User u = [SELECT Id, Email FROM User WHERE Email = 'testmail@test.com'].get(0);
System.runAs(u){
Id accRecType = Schema.SObjectType.Account.getRecordTypeInfosByName().get('B2B Account').getRecordTypeId();
Account acc = new account(name='Test Account', RecordTypeId= accRecType, OwnerId = u.Id);
insert acc;
Contact oContact = new contact(firstname='John',lastname='Doe',email='test@test.com',accountid=acc.id, OwnerId = u.Id);
insert oContact;
Entitlement entl = new entitlement(name='NO Entitlement',accountid=acc.id, StartDate=Date.valueof(System.now().addDays(-2)), EndDate=Date.valueof(System.now().addYears(2)));
insert entl;
List<SlaProcess> lstEntitlementProcess = [SELECT Id, Name FROM SlaProcess WHERE Name='NO Entitlement Process 1.3' and IsActive = true LIMIT 1];
System.debug('lstEntitlementProcess= ' lstEntitlementProcess);
entl.SlaProcessId = lstEntitlementProcess[0].id;
update entl;
BusinessHours bhours = [SELECT Id, Name FROM BusinessHours WHERE Name = 'NO Customer Service'].get(0);
Id recordTypeId = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Card Administration').getRecordTypeId();
Group g = [SELECT Id FROM Group WHERE Type = 'Queue' AND Name = 'NO CS'].get(0);
Case c2 = new Case(
Subject = 'To be distributed from queue',
Status = 'In Progress',
Case_Re_opened__c = false,
OwnerId = g.Id,
CurrencyIsoCode = 'EUR',
Country__c = 'NO',
Case_Category__c = 'Card Block',
RecordTypeId = recordTypeId,
AccountId = acc.Id,
ContactId = oContact.Id,
EntitlementId = entl.Id,
slaStartDate=system.now(),
BusinessHoursId = bhours.Id
);
insert c2;
List<CaseMilestone> cmss = [SELECT Id, CaseId FROM CaseMilestone WHERE CaseId =: c2.Id];
System.debug('case milestones = ' cmss);
System.debug('c2 = ' c2);
System.debug('c2.OwnerId=> ' c2.OwnerId);
}
Test.startTest();
GetCase.findCase();
// GetCase.findCase();
Test.stopTest();
}
}