function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
SFDC_RichieSFDC_Richie 

Test Class for QuickAction.QuickActionDefaultsHandler

Hello folks,

I am trying to use an default email template for the case email publisher.
I found the QuickActionDefaultsHandler Interface which can also be used with Lightning and Lightning Email templates.

Here is my working code so far:
 
/// https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_interface_QuickAction_QuickActionDefaultsHandler.htm

public class IS24_CaseEmailDefault implements QuickAction.QuickActionDefaultsHandler {

    public void onInitDefaults( QuickAction.QuickActionDefaults[] actionDefaults ) {

        for (QuickAction.QuickActionDefaults actionDefault : actionDefaults) {

            System.debug(actionDefault);

            if ( actionDefault instanceof QuickAction.SendEmailQuickActionDefaults ) {

                if ( actionDefault.getTargetSObject().getSObjectType() == EmailMessage.sObjectType ) {

                    QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = (QuickAction.SendEmailQuickActionDefaults) actionDefault;

                    EmailMessage emailMessage = (EmailMessage) sendEmailDefaults.getTargetSObject();

                    // TODO update values on EmailMessage or call methods on sendEmailDefaults object

                    ID templateId = getTemplateId( 'Test_Template1 );

                    if ( String.isNotBlank( templateId ) ) {
                        sendEmailDefaults.setTemplateId( templateId );
                        sendEmailDefaults.setInsertTemplateBody( true ); // apply template above original email content
                        sendEmailDefaults.setIgnoreTemplateSubject( false ); // overwrite subject, use template subject
                    }
                }
            }
        }

    }

    private ID getTemplateId( String templateName ) {

        ID templateId = null;

        List<EmailTemplate> templates = new List<EmailTemplate>([SELECT id FROM EmailTemplate WHERE developerName = :templateName LIMIT 1
        ]);
        if ( templates.size() > 0 ) {
            templateId = templates[0].id;
        } else {
            System.debug( LoggingLevel.ERROR, 'Unable to locate email template using name "' + templateName + '"' );
        }
        return templateId;
    }

}

I am struggeling to get the test class to work. So far I have the following test class but I don't know how to configure it properly:
 
@isTest
private class IS24_CaseEmailDefaultTest{
        Static testMethod void onInitDefaults() {
        
        Case newCase = new Case();
        newCase.Subject = 'Test Case';
        newCase.Description = 'Test Case';    
        newCase.Type = 'CARE';
        insert newCase;
            
        QuickAction.SendEmailQuickActionDefaults sendEmailDefaults = 
		Test.newSendEmailQuickActionDefaults(newCase.Id, null);
    	Test.startTest();
        IS24_CaseEmailDefault cntl = new IS24_CaseEmailDefault();
        sendEmailDefaults.setTemplateId('Test_Template1');  
        //cntl.onInitDefaults(templateId);
    	Test.stopTest();
    	EmailMessage emailMessage = (EmailMessage) sendEmailDefaults.getTargetSObject();
    	System.assertNotEquals(null, emailMessage);
         
    }
}

Any help on how to get the right test class with the required coverage would be quite helpful. Thanks for your help!