Package com.adobe.acs.commons.email.process.impl

Source Code of com.adobe.acs.commons.email.process.impl.SendTemplatedEmailProcessTest

/*
* #%L
* ACS AEM Commons Bundle
* %%
* Copyright (C) 2014 Adobe
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
package com.adobe.acs.commons.email.process.impl;

import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;

import java.util.HashMap;
import java.util.Map;

import javax.jcr.Session;

import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

import com.adobe.acs.commons.email.EmailService;
import com.adobe.acs.commons.wcm.AuthorUIHelper;
import com.day.cq.commons.Externalizer;
import com.day.cq.dam.commons.util.DamUtil;
import com.day.cq.workflow.WorkflowSession;
import com.day.cq.workflow.exec.WorkItem;
import com.day.cq.workflow.exec.WorkflowData;
import com.day.cq.workflow.metadata.MetaDataMap;
import com.day.cq.workflow.metadata.SimpleMetaDataMap;

/**
* Should be called AbstractRenditionModifyingProcessTest, but that name implies
* an abstract class.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest(DamUtil.class)
public class SendTemplatedEmailProcessTest {

    @Mock
    private WorkflowSession workflowSession;

    @Mock
    private WorkItem workItem;

    @Mock
    private Session session;

    @Mock
    private ResourceResolver resourceResolver;

    @Mock
    protected EmailService emailService;

    @Mock
    protected AuthorUIHelper authorUIHelper;

    @Mock
    protected ResourceResolverFactory resourceResolverFactory;

    @Mock
    protected Externalizer externalizer;

    @Mock
    private TestHarness harness;

    @InjectMocks
    private TestSendTemplatedEmailProcess process;

    private static final String DAM_PAYLOAD_PATH = "/content/dam/myimage.jpg";
    private static final String WCM_PAYLOAD_PATH = "/content/mypage";
    private static final String EMAIL_TEMPLATE = "/apps/acs-commons/content/template.txt";
    private static final String GROUP_PATH = "/home/groups/samplegroup";
    private String[] GROUP_MEMBERS;

    @SuppressWarnings("unchecked")
    @Before
    public final void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        when(workflowSession.getSession()).thenReturn(session);
        when(resourceResolverFactory.getResourceResolver(any(Map.class))).thenReturn(resourceResolver);

        // Mock DamUtil class
        PowerMockito.mockStatic(DamUtil.class);

        GROUP_MEMBERS = new String[] { "user1@adobe.com", "user2@adobe.com" };

    }

    @Test
    public void test_with_payload_notJcrPath_is_noop() throws Exception {
        WorkflowData workflowData = mock(WorkflowData.class);
        when(workItem.getWorkflowData()).thenReturn(workflowData);
        when(workflowData.getPayloadType()).thenReturn("");
        MetaDataMap metaData = new SimpleMetaDataMap();

        process.execute(workItem, workflowSession, metaData);

        verifyZeroInteractions(harness);
    }

    @Test
    public void test_with_no_template_args_is_noop() throws Exception {
        WorkflowData workflowData = mock(WorkflowData.class);
        when(workItem.getWorkflowData()).thenReturn(workflowData);
        when(workflowData.getPayloadType()).thenReturn("JCR_PATH");
        MetaDataMap metaData = new SimpleMetaDataMap();
        metaData.put("PROCESS_ARGS", "");
        process.execute(workItem, workflowSession, metaData);

        verifyZeroInteractions(harness);
    }

    @Test
    public void test_with_correct_args_AssetPayload() throws Exception {

        String editAssetUrl = "http://localhost:4502/assetdetails.html" + DAM_PAYLOAD_PATH;
        String publishUrl = "http://localhost:4503" + DAM_PAYLOAD_PATH;

        Map<String, String> expectedEmailParams = new HashMap<String, String>();
        expectedEmailParams.put(SendTemplatedEmailConstants.JCR_PATH, DAM_PAYLOAD_PATH);
        expectedEmailParams.put(SendTemplatedEmailConstants.AUTHOR_LINK, editAssetUrl);
        expectedEmailParams.put(SendTemplatedEmailConstants.PUBLISH_LINK, publishUrl);

        WorkflowData workflowData = mock(WorkflowData.class);
        when(workItem.getWorkflowData()).thenReturn(workflowData);
        when(workflowData.getPayloadType()).thenReturn("JCR_PATH");
        MetaDataMap metaData = new SimpleMetaDataMap();
        metaData.put("PROCESS_ARGS", "sendTo:" + GROUP_PATH + ",emailTemplate:" + EMAIL_TEMPLATE);

        // expected build args
        String[] expectedBuildArgs = new String[] { "sendTo:" + GROUP_PATH, "emailTemplate:" + EMAIL_TEMPLATE };
        Object payload = mock(Object.class);
        when(workflowData.getPayload()).thenReturn(payload);
        when(payload.toString()).thenReturn(DAM_PAYLOAD_PATH);

        // mock payload resource
        Resource payloadRes = mock(Resource.class);
        when(resourceResolver.getResource(DAM_PAYLOAD_PATH)).thenReturn(payloadRes);
        when(payloadRes.getPath()).thenReturn(DAM_PAYLOAD_PATH);
        when(payloadRes.getResourceResolver()).thenReturn(resourceResolver);

        // mock DamUtil
        when(DamUtil.isAsset(payloadRes)).thenReturn(true);

        // mock authorUI and externalizer
        when(authorUIHelper.generateEditAssetLink(DAM_PAYLOAD_PATH, true, resourceResolver)).thenReturn(editAssetUrl);
        when(externalizer.publishLink(resourceResolver, DAM_PAYLOAD_PATH)).thenReturn(publishUrl);

        when(harness.getEmailAddrs(workItem, payloadRes, expectedBuildArgs)).thenReturn(GROUP_MEMBERS);

        process.execute(workItem, workflowSession, metaData);

        verify(harness, times(1)).getEmailAddrs(workItem, payloadRes, expectedBuildArgs);
        verify(harness, times(1)).getAdditionalParams(workItem, workflowSession, payloadRes);
        verify(emailService, times(1)).sendEmail(EMAIL_TEMPLATE, expectedEmailParams, GROUP_MEMBERS);

    }

    @Test
    public void test_with_correct_args_PagePayload() throws Exception {

        String editPageUrl = "http://localhost:4502/editor.html" + WCM_PAYLOAD_PATH;
        String publishUrl = "http://localhost:4503" + WCM_PAYLOAD_PATH;

        Map<String, String> expectedEmailParams = new HashMap<String, String>();
        expectedEmailParams.put(SendTemplatedEmailConstants.JCR_PATH, WCM_PAYLOAD_PATH);
        expectedEmailParams.put(SendTemplatedEmailConstants.AUTHOR_LINK, editPageUrl + ".html");
        expectedEmailParams.put(SendTemplatedEmailConstants.PUBLISH_LINK, publishUrl + ".html");

        WorkflowData workflowData = mock(WorkflowData.class);
        when(workItem.getWorkflowData()).thenReturn(workflowData);
        when(workflowData.getPayloadType()).thenReturn("JCR_PATH");
        MetaDataMap metaData = new SimpleMetaDataMap();
        metaData.put("PROCESS_ARGS", "sendTo:" + GROUP_PATH + ",emailTemplate:" + EMAIL_TEMPLATE);

        // expected build args
        String[] expectedBuildArgs = new String[] { "sendTo:" + GROUP_PATH, "emailTemplate:" + EMAIL_TEMPLATE };
        Object payload = mock(Object.class);
        when(workflowData.getPayload()).thenReturn(payload);
        when(payload.toString()).thenReturn(WCM_PAYLOAD_PATH);

        // mock payload resource
        Resource payloadRes = mock(Resource.class);
        when(resourceResolver.getResource(WCM_PAYLOAD_PATH)).thenReturn(payloadRes);
        when(payloadRes.getPath()).thenReturn(WCM_PAYLOAD_PATH);
        when(payloadRes.getResourceResolver()).thenReturn(resourceResolver);

        // mock DamUtil
        when(DamUtil.isAsset(payloadRes)).thenReturn(false);

        // mock authorUI and externalizer
        when(authorUIHelper.generateEditPageLink(WCM_PAYLOAD_PATH, true, resourceResolver)).thenReturn(
                editPageUrl + ".html");
        when(externalizer.publishLink(resourceResolver, WCM_PAYLOAD_PATH + ".html")).thenReturn(publishUrl + ".html");

        when(harness.getEmailAddrs(workItem, payloadRes, expectedBuildArgs)).thenReturn(GROUP_MEMBERS);

        process.execute(workItem, workflowSession, metaData);

        verify(harness, times(1)).getEmailAddrs(workItem, payloadRes, expectedBuildArgs);
        verify(harness, times(1)).getAdditionalParams(workItem, workflowSession, payloadRes);
        verify(emailService, times(1)).sendEmail(EMAIL_TEMPLATE, expectedEmailParams, GROUP_MEMBERS);

    }

}
TOP

Related Classes of com.adobe.acs.commons.email.process.impl.SendTemplatedEmailProcessTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.