mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-08 14:51:49 +00:00
Merged WEBAPP-API (5.2.1) to 5.2.N (5.2.1)
135505 jkaabimofrad: APPSREPO-137: Made quick-share email template configurable via properties file. The template path property value could be an XPATH, a NodeRef of the template or a class path of the template. - Added a helper class to provide email template related utility functions - Added share as a default registered client for sending email - the template assets (images) will be available in share. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@135566 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
228
source/test-java/org/alfresco/util/EmailHelperTest.java
Normal file
228
source/test-java/org/alfresco/util/EmailHelperTest.java
Normal file
@@ -0,0 +1,228 @@
|
||||
/*-
|
||||
* #%L
|
||||
* Alfresco Repository
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2017 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
package org.alfresco.util;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import freemarker.cache.TemplateLoader;
|
||||
import org.alfresco.repo.model.Repository;
|
||||
import org.alfresco.service.ServiceRegistry;
|
||||
import org.alfresco.service.cmr.model.FileFolderService;
|
||||
import org.alfresco.service.cmr.preference.PreferenceService;
|
||||
import org.alfresco.service.cmr.repository.ContentService;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.search.SearchService;
|
||||
import org.alfresco.service.cmr.security.PersonService;
|
||||
import org.alfresco.service.namespace.NamespaceService;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
import org.springframework.extensions.surf.util.I18NUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link EmailHelper} class.
|
||||
*
|
||||
* @author Jamal Kaabi-Mofrad
|
||||
*/
|
||||
public class EmailHelperTest
|
||||
{
|
||||
|
||||
// this is just a path, the template does not exist!
|
||||
private static final String FALLBACK_TEMPLATE_PATH = "alfresco/templates/email-templates/test-email-template.ftl";
|
||||
private static final String CLIENT_NAME = "test-client";
|
||||
|
||||
@Mock
|
||||
private ServiceRegistry serviceRegistryMock;
|
||||
@Mock
|
||||
private NodeService nodeServiceMock;
|
||||
@Mock
|
||||
private SearchService searchServiceMock;
|
||||
@Mock
|
||||
private NamespaceService namespaceServiceMock;
|
||||
@Mock
|
||||
private FileFolderService fileFolderServiceMock;
|
||||
@Mock
|
||||
private PersonService personServiceMock;
|
||||
@Mock
|
||||
private PreferenceService preferenceServiceMock;
|
||||
@Mock
|
||||
private Repository repositoryHelperMock;
|
||||
@Mock
|
||||
private TemplateLoader templateLoaderMock;
|
||||
|
||||
private EmailHelper emailHelper;
|
||||
|
||||
private NodeRef dummyTemplateNodeRef;
|
||||
|
||||
@Before
|
||||
public void setup() throws Exception
|
||||
{
|
||||
this.dummyTemplateNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, GUID.generate());
|
||||
// Mock the required services
|
||||
this.serviceRegistryMock = mock(ServiceRegistry.class);
|
||||
this.nodeServiceMock = mock(NodeService.class);
|
||||
this.searchServiceMock = mock(SearchService.class);
|
||||
this.namespaceServiceMock = mock(NamespaceService.class);
|
||||
this.fileFolderServiceMock = mock(FileFolderService.class);
|
||||
this.personServiceMock = mock(PersonService.class);
|
||||
this.preferenceServiceMock = mock(PreferenceService.class);
|
||||
this.repositoryHelperMock = mock(Repository.class);
|
||||
this.templateLoaderMock = mock(TemplateLoader.class);
|
||||
|
||||
when(serviceRegistryMock.getNodeService()).thenReturn(nodeServiceMock);
|
||||
when(serviceRegistryMock.getSearchService()).thenReturn(searchServiceMock);
|
||||
when(serviceRegistryMock.getNamespaceService()).thenReturn(namespaceServiceMock);
|
||||
when(serviceRegistryMock.getFileFolderService()).thenReturn(fileFolderServiceMock);
|
||||
when(serviceRegistryMock.getPersonService()).thenReturn(personServiceMock);
|
||||
when(serviceRegistryMock.getContentService()).thenReturn(mock(ContentService.class));
|
||||
when(repositoryHelperMock.getRootHome()).thenReturn(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, GUID.generate()));
|
||||
when(fileFolderServiceMock.getLocalizedSibling(dummyTemplateNodeRef)).thenReturn(dummyTemplateNodeRef);
|
||||
|
||||
this.emailHelper = new EmailHelper();
|
||||
emailHelper.setServiceRegistry(serviceRegistryMock);
|
||||
emailHelper.setPreferenceService(preferenceServiceMock);
|
||||
emailHelper.setRepositoryHelper(repositoryHelperMock);
|
||||
emailHelper.setCompanyHomeChildName("app:company_home");
|
||||
//test init
|
||||
emailHelper.init();
|
||||
// Note: set the template loader after the init method
|
||||
emailHelper.setTemplateLoader(templateLoaderMock);
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetEmailTemplate() throws Exception
|
||||
{
|
||||
String result = emailHelper.getEmailTemplate(CLIENT_NAME, null, FALLBACK_TEMPLATE_PATH);
|
||||
assertEquals("The given template path is null, so the fallback template should be returned.", result, FALLBACK_TEMPLATE_PATH);
|
||||
|
||||
// XPath
|
||||
{
|
||||
final String emailTemplateXPath = "app:company_home/app:dictionary/app:email_templates/example-email.ftl";
|
||||
|
||||
when(searchServiceMock.selectNodes(repositoryHelperMock.getRootHome(), emailTemplateXPath, null, namespaceServiceMock, false))
|
||||
.thenReturn(Collections.emptyList());
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, emailTemplateXPath, FALLBACK_TEMPLATE_PATH);
|
||||
assertEquals("Couldn't find email template with the given XPath, so the fallback template should be returned.", result,
|
||||
FALLBACK_TEMPLATE_PATH);
|
||||
|
||||
when(searchServiceMock.selectNodes(repositoryHelperMock.getRootHome(), emailTemplateXPath, null, namespaceServiceMock, false))
|
||||
.thenReturn(Collections.singletonList(dummyTemplateNodeRef));
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, emailTemplateXPath, FALLBACK_TEMPLATE_PATH);
|
||||
// XPath search returned a valid result
|
||||
assertEquals(result, dummyTemplateNodeRef.toString());
|
||||
|
||||
// Simulate a path that starts with '/'
|
||||
String xpath = "/" + emailTemplateXPath;
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, xpath, FALLBACK_TEMPLATE_PATH);
|
||||
// XPath search returned a valid result
|
||||
assertEquals(result, dummyTemplateNodeRef.toString());
|
||||
|
||||
when(searchServiceMock.selectNodes(repositoryHelperMock.getRootHome(), emailTemplateXPath, null, namespaceServiceMock, false))
|
||||
.thenReturn(Arrays.asList(dummyTemplateNodeRef, new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, GUID.generate()),
|
||||
new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, GUID.generate())));
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, emailTemplateXPath, FALLBACK_TEMPLATE_PATH);
|
||||
// XPath search returned 3 results. But after logging an error, we just return the first element
|
||||
assertEquals(result, dummyTemplateNodeRef.toString());
|
||||
}
|
||||
|
||||
//NodeRed
|
||||
{
|
||||
when(nodeServiceMock.exists(dummyTemplateNodeRef)).thenReturn(false);
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, dummyTemplateNodeRef.toString(), FALLBACK_TEMPLATE_PATH);
|
||||
assertEquals("Couldn't find email template with the given NodeRef, so the fallback template should be returned.", result,
|
||||
FALLBACK_TEMPLATE_PATH);
|
||||
|
||||
when(nodeServiceMock.exists(dummyTemplateNodeRef)).thenReturn(true);
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, dummyTemplateNodeRef.toString(), FALLBACK_TEMPLATE_PATH);
|
||||
// The NodeRef exists
|
||||
assertEquals(result, dummyTemplateNodeRef.toString());
|
||||
}
|
||||
|
||||
//class path
|
||||
{
|
||||
String classPathTemplate = "alfresco/templates/email-templates/new-template.html";
|
||||
when(templateLoaderMock.findTemplateSource(classPathTemplate)).thenReturn(null);
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, classPathTemplate, FALLBACK_TEMPLATE_PATH);
|
||||
assertEquals("Couldn't find email template with the given class path, so the fallback template should be returned.", result,
|
||||
FALLBACK_TEMPLATE_PATH);
|
||||
|
||||
when(templateLoaderMock.findTemplateSource(classPathTemplate)).thenReturn(new Object());
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, classPathTemplate, FALLBACK_TEMPLATE_PATH);
|
||||
// The class path is valid and a template is found
|
||||
assertEquals(result, classPathTemplate);
|
||||
|
||||
when(templateLoaderMock.findTemplateSource(classPathTemplate)).thenThrow(new IOException());
|
||||
result = emailHelper.getEmailTemplate(CLIENT_NAME, classPathTemplate, FALLBACK_TEMPLATE_PATH);
|
||||
assertEquals("Error occurred while finding the email template with the class path, so the fallback template should be returned.", result,
|
||||
FALLBACK_TEMPLATE_PATH);
|
||||
}
|
||||
|
||||
// test null/empty value
|
||||
NodeRef nodeRef = emailHelper.getLocalizedEmailTemplateNodeRef(null);
|
||||
assertNull(nodeRef);
|
||||
nodeRef = emailHelper.getLocalizedEmailTemplateNodeRef("");
|
||||
assertNull(nodeRef);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetUserLocaleOrDefault() throws Exception
|
||||
{
|
||||
String userId = "testUser";
|
||||
|
||||
Locale locale = emailHelper.getUserLocaleOrDefault(null);
|
||||
assertEquals(I18NUtil.getLocale(), locale);
|
||||
|
||||
when(personServiceMock.personExists(userId)).thenReturn(false);
|
||||
locale = emailHelper.getUserLocaleOrDefault(userId);
|
||||
assertEquals(I18NUtil.getLocale(), locale);
|
||||
|
||||
when(personServiceMock.personExists(userId)).thenReturn(true);
|
||||
when(preferenceServiceMock.getPreference(userId, "locale")).thenReturn(null);
|
||||
locale = emailHelper.getUserLocaleOrDefault(userId);
|
||||
assertEquals(I18NUtil.getLocale(), locale);
|
||||
|
||||
when(preferenceServiceMock.getPreference(userId, "locale")).thenReturn("fr-FR");
|
||||
locale = emailHelper.getUserLocaleOrDefault(userId);
|
||||
assertEquals(Locale.FRANCE, locale);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user