自動化処理のテスト
Challenge4-6はこれまでに作成したコードのテストケースの作成。
今回のはコールアウトするわけでもないのでMockなども不要です。
要件
- トリガーのテスト:MaintenanceRequest(実質呼び出しているMaintenanceRequestHelper)
- ポジティブなユースケース(正常系)
- 300のメンテナンスリクエスト
- vehicle,equipmentの関連、期日などが正しく作成されている
- ネガティブなユースケース(異常系)
- レコードが作成されない
ソースコード
正直見せるほどのものでもないので見ないほうがいい
コード
@isTest
public class MaintenanceRequestTest {
static Vehicle__c vehicle;
static Product2 equipment;
static Product2 replacementParts;
static void setup(){
Database.SaveResult vResult=Database.insert(new Vehicle__c());
Product2[] equipments=new Product2[]{new Product2(Name='test equip',Maintenance_Cycle__c=30),
new Product2(Name='replacement',Maintenance_Cycle__c=10,Replacement_Part__c=true)};
Database.SaveResult[] eResult=Database.insert(equipments);
vehicle=new Vehicle__c(Id=vResult.getId());
equipment=new Product2(Id=eResult[0].getId());
replacementParts=new Product2(Id=eResult[1].getId());
}
static Integer size=300;
@isTest static void positiveTestCase_MaintenanceRequest(){
setup();
List<Case> listCase=createCaseList(size,'Repair');
Id[] caseid=new Id[size];
Integer index=0;
for(Database.SaveResult sr:Database.insert(listCase)){
caseid[index++]=sr.getId();
}
Work_Part__c expected=insertWorkParts(listCase.get(0).Id);
for(Case c:listCase){
c.Status='Closed';
}
Test.startTest();
Database.SaveResult[] result=Database.update(listCase);
Test.stopTest();
Work_Part__c actual=[SELECT Equipment__c,Maintenance_Request__c
FROM Work_Part__c
WHERE Id=:expected.Id];
System.assertNotEquals(expected, actual);
}
@isTest static void negativeTestCase_MaintenanceRequest(){
setup();
//incorrect type
Case c=createCaseList(1,'Electrical').get(0);
Database.SaveResult sr=Database.insert(c);
Work_Part__c expected=insertWorkParts(sr.getId());
c.Id=sr.getId();
c.Status='Closed';
Test.startTest();
Database.SaveResult result=Database.update(c);
Test.stopTest();
Work_Part__c actual=[SELECT Equipment__c,Maintenance_Request__c
FROM Work_Part__c
WHERE Id=:expected.Id];
System.assertEquals(expected, actual);
}
static List<Case> createCaseList(Integer count,String type){
List<Case> result=new List<Case>();
for(Integer i=0;i<count;i++){
Case c=new Case();
c.Type=type;
c.Status='New';
c.Vehicle__c=vehicle.Id;
c.Subject='Test Repair'+i;
c.Equipment__c=equipment.Id;
result.add(c);
}
return result;
}
static Work_Part__c insertWorkParts(Id caseId){
Work_Part__c workpart=new Work_Part__c(Equipment__c=replacementParts.Id,
Maintenance_Request__c=caseId);
workpart.Id=Database.insert(workpart).getId();
return workpart;
}
}