diff --git a/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/actions/email/EmailTemplateTest.java b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/actions/email/EmailTemplateTest.java new file mode 100644 index 0000000000..d7cb695d36 --- /dev/null +++ b/packaging/tests/tas-restapi/src/test/java/org/alfresco/rest/actions/email/EmailTemplateTest.java @@ -0,0 +1,95 @@ +package org.alfresco.rest.actions.email; + +import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.nullValue; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import javax.json.JsonObject; + +import org.alfresco.rest.RestTest; +import org.alfresco.rest.core.JsonBodyGenerator; +import org.alfresco.rest.core.RestWrapper; +import org.alfresco.rest.model.RestNodeModel; +import org.alfresco.utility.model.FolderModel; +import org.alfresco.utility.model.UserModel; +import org.alfresco.utility.Utility; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class EmailTemplateTest extends RestTest { + + public static final String MAIL_ACTION = "mail"; + + private UserModel adminUser; + private UserModel testUser; + private FolderModel testFolder; + + @Autowired + protected RestWrapper restClient; + + @BeforeClass(alwaysRun = true) + public void dataPreparation() throws Exception { + adminUser = dataUser.getAdminUser(); + + testUser = dataUser.createRandomTestUser(); + testSite = dataSite.usingUser(testUser) + .createPublicRandomSite(); + testFolder = dataContent.usingUser(testUser) + .usingSite(testSite) + .createFolder(); + } + + @Test + public void adminCanSendEmailUsingTemplateWithModelAsString() throws Exception + { + String templateId = uploadEmailTemplate("simpleEmailTemplate.ftl"); + + // Create the model for use with email template + JsonObject args = JsonBodyGenerator.defineJSON() + .add("args", JsonBodyGenerator.defineJSON() + .add("name", "testname") + .build()) + .build(); + String emailModel = args.toString(); + + // Send an email using the template + restClient.authenticateUser(adminUser) + .withCoreAPI() + .usingActions() + .executeAction(MAIL_ACTION, testFolder, createMailWithTemplateParameters(adminUser, testUser, templateId, emailModel)); + + restClient.onResponse() + .assertThat().statusCode(HttpStatus.ACCEPTED.value()) + .assertThat().body("entry.id", notNullValue()); + } + + private String uploadEmailTemplate(String templateName) + { + restClient.authenticateUser(adminUser) + .configureRequestSpec() + .addMultiPart("filedata", Utility.getResourceTestDataFile(templateName)); + + RestNodeModel template = restClient.authenticateUser(adminUser).withCoreAPI().usingResource(testFolder).createNode(); + restClient.assertStatusCodeIs(HttpStatus.CREATED); + + return template.getId(); + } + + private static Map createMailWithTemplateParameters(UserModel sender, UserModel recipient, String templateId, Serializable model) + { + Map parameterValues = new HashMap<>(); + + parameterValues.put("from", sender.getEmailAddress()); + parameterValues.put("to", recipient.getEmailAddress()); + parameterValues.put("subject", "Test"); + parameterValues.put("template", "workspace://SpacesStore/" + templateId); + parameterValues.put("template_model", model); + + return parameterValues; + } +} diff --git a/packaging/tests/tas-restapi/src/test/resources/shared-resources/testdata/simpleEmailTemplate.ftl b/packaging/tests/tas-restapi/src/test/resources/shared-resources/testdata/simpleEmailTemplate.ftl new file mode 100644 index 0000000000..ea6e38cbcd --- /dev/null +++ b/packaging/tests/tas-restapi/src/test/resources/shared-resources/testdata/simpleEmailTemplate.ftl @@ -0,0 +1,6 @@ + + + +Hello ${args.name}! + + diff --git a/remote-api/src/main/java/org/alfresco/rest/api/impl/ActionsImpl.java b/remote-api/src/main/java/org/alfresco/rest/api/impl/ActionsImpl.java index 432a9ffa2c..47ef11f2e1 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/impl/ActionsImpl.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/impl/ActionsImpl.java @@ -363,13 +363,13 @@ public class ActionsImpl implements Actions Map.Entry::getValue)); } - private Map extractActionParams(org.alfresco.service.cmr.action.ActionDefinition actionDefinition, Map params) + private Map extractActionParams(org.alfresco.service.cmr.action.ActionDefinition actionDefinition, Map params) { Map parameterValues = new HashMap<>(); try { - for (Map.Entry entry : params.entrySet()) + for (Map.Entry entry : params.entrySet()) { String propertyName = entry.getKey(); Object propertyValue = entry.getValue(); diff --git a/remote-api/src/main/java/org/alfresco/rest/api/model/Action.java b/remote-api/src/main/java/org/alfresco/rest/api/model/Action.java index 99a5da3625..6f9aab093b 100644 --- a/remote-api/src/main/java/org/alfresco/rest/api/model/Action.java +++ b/remote-api/src/main/java/org/alfresco/rest/api/model/Action.java @@ -32,7 +32,7 @@ public class Action private String id; private String actionDefinitionId; private String targetId; - Map params; + private Map params; public String getId() { @@ -64,12 +64,12 @@ public class Action this.targetId = targetId; } - public Map getParams() + public Map getParams() { return params; } - public void setParams(Map params) + public void setParams(Map params) { this.params = params; } diff --git a/remote-api/src/test/java/org/alfresco/rest/api/tests/client/data/Action.java b/remote-api/src/test/java/org/alfresco/rest/api/tests/client/data/Action.java index d9bac3f5bf..0fc2b1693b 100644 --- a/remote-api/src/test/java/org/alfresco/rest/api/tests/client/data/Action.java +++ b/remote-api/src/test/java/org/alfresco/rest/api/tests/client/data/Action.java @@ -78,7 +78,7 @@ public class Action extends org.alfresco.rest.api.model.Action implements Serial String id = (String) jsonObject.get("id"); String actionDefinitionId = (String) jsonObject.get("actionDefinitionId"); String targetId = (String) jsonObject.get("targetId"); - Map params = (Map) jsonObject.get("params"); + Map params = (Map) jsonObject.get("params"); Action action = new Action(); action.setId(id);