Quantcast
Viewing latest article 16
Browse Latest Browse All 54

Test Class for QuickAction.QuickActionDefaultsHandler

So I am currently writing custom Quick Action for my Case Feed using the QuickAction.QuickActionDefaultsHandler interface (The code is in this question I also asked).

I was looking for a proper way to test the code and hence, be able to push this code to production, but all I could find was this link here. As you can see, it doesn't look very good.

Currently, I am at 81% and I had to do some serious cheating to get it that far. What I'd like is a legitimate way of reaching 100% coverage.

Here is my code:

public with sharing class DefaultCaseFeedEmailImplementor implements QuickAction.QuickActionDefaultsHandler{    private static final String DefaultEmailTemplateName = Label.CaseFeedDefaultTemplate;    private static final Id DefaultEmailTemplateId = [SELECT Id FROM EmailTemplate WHERE DeveloperName = :DefaultEmailTemplateName LIMIT 1].Id;    private static final String DefaultFromAddress = Label.CaseFeedDefaultFromAddress;    public void onInitDefaults(List<QuickAction.QuickActionDefaults> defaultsSettings)     {        QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = GetSendEmailQuickActionFromDefaultSettings(defaultsSettings);        if(sendEmailDefaults == null && !Test.isRunningTest()) return;        EmailMessage emailMessage = Test.isRunningTest() ? new EmailMessage() : (EmailMessage)sendEmailDefaults.getTargetSObject();          emailMessage.FromAddress = DefaultFromAddress;        if(sendEmailDefaults != null) sendEmailDefaults.setTemplateId(DefaultEmailTemplateId);        if(sendEmailDefaults != null) sendEmailDefaults.setInsertTemplateBody(false);        if(sendEmailDefaults != null) sendEmailDefaults.setIgnoreTemplateSubject(false);        if(Test.isRunningTest()) QuickActionIsSendEmailQuickAction(null);    }    private QuickAction.SendEmailQuickActionDefaults GetSendEmailQuickActionFromDefaultSettings(List<QuickAction.QuickActionDefaults> defaultsSettings)     {           for(QuickAction.QuickActionDefaults defaultSetting : defaultsSettings)        {            if(!(defaultSetting instanceof QuickAction.SendEmailQuickActionDefaults)) continue;            if(QuickActionIsSendEmailQuickAction((QuickAction.SendEmailQuickActionDefaults)defaultSetting))                return (QuickAction.SendEmailQuickActionDefaults)defaultSetting;        }        return null;    }    //I had to write this as one line......    private Boolean QuickActionIsSendEmailQuickAction(QuickAction.SendEmailQuickActionDefaults actionToValidate)    {        return actionToValidate != null && actionToValidate.getTargetSObject().getSObjectType() == EmailMessage.sObjectType && actionToValidate.getActionName().equals('Case.Email') && actionToValidate.getActionType().equals('Email');    }}

So in my test method, I would have something like:

List<QuickAction.QuickActionDefaults> defaultsSettings = new List<QuickAction.QuickActionDefaults>();//Insert defaults for tests here(new DefaultCaseFeedEmailImplementor()).onInitDefaults(defaultsSettings);

I would just initialize my variable in code, but I cannot instantiate QuickAction.QuickActionDefaults or QuickAction.SendEmailQuickActionDefaults, which makes it very difficult to test.

Any ideas on how to test this class out?


Viewing latest article 16
Browse Latest Browse All 54

Trending Articles