I have a problem to write the test class which will have more than 66% of test coverage for this class:
How to catch exception for the List?
public without sharing class WoliTemplatesSelectionController {
@AuraEnabled(cacheable=true)
public static List<Work_Order_Line_Item_Template__c> getWoliTemplates(String woTemplateId){
try {
return [SELECT Id, Name, Display_Name__c, Parent_WOLI_Template__c,
Origin_Work_Order_Line_Item__r.WOLI__c, Device__r.Name, Device__r.SerialNumber,
Origin_Work_Order_Line_Item__r.LineItemNumber, Origin_Work_Order_Line_Item__r.Product_Name__c
FROM Work_Order_Line_Item_Template__c
WHERE Parent_Work_Order_Template__c = :woTemplateId
ORDER BY Name];
} catch (Exception e) {
throw new AuraHandledException(e.getMessage());
}
}
}
My Test Class:
@isTest
private class WoliTemplatesSelectionControllerTest {
@isTest
static void testGetWoliTemplates() {
// Arrange
Account account = DataFactory.accounts(
1,
'Test Account',
'Customer',
new Account(Calibration_Intervals__c = 'Quarterly', Customer_Price_Group__c = 'test pb')
)[0];
insert account;
Asset asset = DataFactory.assets(
1,
'Asset 1',
account.Id,
new Asset(Serviced_by__c = 'WDH', Preferred_Service_Location__c = 'Field service', SerialNumber = '123')
)[0];
insert asset;
Case case1 = DataFactory.cases(1, 'Case 1', 'Email', 'New', account.Id, null)[0];
insert case1;
Product2 product1 = DataFactory.products(
1,
'Product 1',
'00000001',
new Product2(Product_Category_Application__c = 'Calibration Fee - DIA', IsActive = true, Company_Code__c = 'DK31')
)[0];
Product2 product2 = DataFactory.products(
1,
'Product 2',
'0000002',
new Product2(Product_Category_Application__c = 'Calibration Fee - DIA', IsActive = true, Company_Code__c = 'DK31')
)[0];
Product2 product3 = DataFactory.products(
1,
'Product 3',
'0000003',
new Product2(Product_Category_Application__c = 'Calibration Fee - DIA', IsActive = true, Company_Code__c = 'DK31')
)[0];
insert new List<Product2> {
product1,
product2,
product3
};
PriceBook2 priceBook = new PriceBook2(
Name = 'DKK Price Book',
Description = 'This is price book',
CurrencyIsoCode = 'DKK',
IsActive = true,
Customer_Price_Group__c = 'test pb'
);
insert priceBook;
Id standardPriceBookId = Test.getStandardPricebookId();
PricebookEntry pbe1Standard = DataFactory.pricebookEntries(
10,
true,
product1.Id,
new Set <Id>{standardPriceBookId},
new PricebookEntry()
)[0];
PricebookEntry pbe2Standard = DataFactory.pricebookEntries(
20,
true,
product2.Id,
new Set <Id>{standardPriceBookId},
new PricebookEntry()
)[0];
PricebookEntry pbe3Standard = DataFactory.pricebookEntries(
30,
true,
product3.Id,
new Set <Id>{standardPriceBookId},
new PricebookEntry()
)[0];
PricebookEntry pbe1 = DataFactory.pricebookEntries(
10,
true,
product1.Id,
new Set <Id>{priceBook.Id},
new PricebookEntry()
)[0];
PricebookEntry pbe2 = DataFactory.pricebookEntries(
20,
true,
product2.Id,
new Set <Id>{priceBook.Id},
new PricebookEntry()
)[0];
PricebookEntry pbe3 = DataFactory.pricebookEntries(
30,
true,
product3.Id,
new Set <Id>{priceBook.Id},
new PricebookEntry()
)[0];
insert new List<PricebookEntry> {
//pbe1Standard,
//pbe2Standard,
//pbe3Standard,
pbe1,
pbe2,
pbe3
};
WorkOrder workOrder = DataFactory.workOrders(
1,
account.Id,
Schema.SObjectType.WorkOrder.getRecordTypeInfosByDeveloperName().get('ICSO').getRecordTypeId(),
'WO 1',
new WorkOrder(CaseId=case1.Id, Pricebook2Id = priceBook.Id)
)[0];
insert workOrder;
WorkOrderLineItem parentWoli = DataFactory.workOrderLineItems(
1,
workOrder.Id,
null,
null,
asset.Id,
new WorkOrderLineItem()
)[0];
insert parentWoli;
WorkOrderLineItem childWoli1 = DataFactory.workOrderLineItems(
1,
workOrder.Id,
parentWoli.Id,
pbe1.Id,
asset.Id,
new WorkOrderLineItem()
)[0];
WorkOrderLineItem childWoli2 = DataFactory.workOrderLineItems(
1,
workOrder.Id,
parentWoli.Id,
pbe2.Id,
asset.Id,
new WorkOrderLineItem()
)[0];
WorkOrderLineItem travelWoli = DataFactory.workOrderLineItems(
1,
workOrder.Id,
null,
pbe3.Id,
asset.Id,
new WorkOrderLineItem(Type__c = 'Travel')
)[0];
insert new List<WorkOrderLineItem> {
childWoli1,
childWoli2,
travelWoli
};
Work_Order_Template__c woTemplate = new Work_Order_Template__c(
Account__c = account.Id,
Origin_Work_Order__c = workOrder.Id,
Price_Book__c = priceBook.Id,
Status__c = 'New',
Type__c = workOrder.Type__c,
Work_Order_Record_Type__c = workOrder.RecordTypeId
);
insert woTemplate;
Work_Order_Line_Item_Template__c woliTemplate1 = new Work_Order_Line_Item_Template__c(
Account__c = parentWoli.Account__c,
Device__c = parentWoli.AssetId,
ListPrice__c = parentWoli.ListPrice,
Origin_Work_Order_Line_Item__c = parentWoli.Id,
Parent_Work_Order_Line_Item__c = parentWoli.ParentWorkOrderLineItemId,
Parent_Work_Order_Template__c = woTemplate.Id,
Status__c = 'New',
TotalPrice__c = parentWoli.TotalPrice,
UnitPrice__c = parentWoli.UnitPrice,
PricebookEntry__c = parentWoli.PricebookEntryId,
Product__c = parentWoli.PricebookEntry.Name
);
Work_Order_Line_Item_Template__c woliTemplate2 = new Work_Order_Line_Item_Template__c(
Account__c = childWoli1.Account__c,
Device__c = childWoli1.AssetId,
ListPrice__c = childWoli1.ListPrice,
Origin_Work_Order_Line_Item__c = childWoli1.Id,
Parent_Work_Order_Line_Item__c = childWoli1.ParentWorkOrderLineItemId,
Parent_Work_Order_Template__c = woTemplate.Id,
Status__c = 'New',
TotalPrice__c = childWoli1.TotalPrice,
UnitPrice__c = childWoli1.UnitPrice,
PricebookEntry__c = childWoli1.PricebookEntryId,
Product__c = childWoli1.PricebookEntry.Name
);
Work_Order_Line_Item_Template__c woliTemplate3 = new Work_Order_Line_Item_Template__c(
Account__c = childWoli2.Account__c,
Device__c = childWoli2.AssetId,
ListPrice__c = childWoli2.ListPrice,
Origin_Work_Order_Line_Item__c = childWoli2.Id,
Parent_Work_Order_Line_Item__c = childWoli2.ParentWorkOrderLineItemId,
Parent_Work_Order_Template__c = woTemplate.Id,
Status__c = 'New',
TotalPrice__c = childWoli2.TotalPrice,
UnitPrice__c = childWoli2.UnitPrice,
PricebookEntry__c = childWoli2.PricebookEntryId,
Product__c = childWoli2.PricebookEntry.Name
);
Work_Order_Line_Item_Template__c woliTemplate4 = new Work_Order_Line_Item_Template__c(
Account__c = travelWoli.Account__c,
Device__c = travelWoli.AssetId,
ListPrice__c = travelWoli.ListPrice,
Origin_Work_Order_Line_Item__c = travelWoli.Id,
Parent_Work_Order_Line_Item__c = travelWoli.ParentWorkOrderLineItemId,
Parent_Work_Order_Template__c = woTemplate.Id,
Status__c = 'New',
TotalPrice__c = travelWoli.TotalPrice,
UnitPrice__c = travelWoli.UnitPrice,
PricebookEntry__c = travelWoli.PricebookEntryId,
Product__c = travelWoli.PricebookEntry.Name
);
insert new List<Work_Order_Line_Item_Template__c> {
woliTemplate1,
woliTemplate2,
woliTemplate3,
woliTemplate4
};
// Act
List<Work_Order_Line_Item_Template__c> woliTemplates = WoliTemplatesSelectionController.getWoliTemplates(woTemplate.Id);
// Assert
System.assertEquals(4, woliTemplates.size());
System.assert(woliTemplates[0].Display_Name__c.contains(asset.Name) && woliTemplates[0].Origin_Work_Order_Line_Item__r.WOLI__c == 'Parent');
System.assert(woliTemplates[1].Display_Name__c.contains(product1.Name) && woliTemplates[1].Origin_Work_Order_Line_Item__r.WOLI__c == 'Child');
System.assert(woliTemplates[2].Display_Name__c.contains(product2.Name) && woliTemplates[2].Origin_Work_Order_Line_Item__r.WOLI__c == 'Child');
System.assert(woliTemplates[3].Display_Name__c.contains(product3.Name) && woliTemplates[3].Origin_Work_Order_Line_Item__r.WOLI__c == 'Travel');
}
}