0

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');
    }
}

1 Answer 1

1

It's impossible for you to get a catchable exception here, so there's no reason to use try-catch in your code. Remove the try-catch block. As you gain more experience in development, you'll learn to spot when you need a try-catch block, and when you don't. One major, obvious sign that you might not need a try-catch block is that it seems somehow impossible to cover in a unit test.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .