diff --git a/examples/java/io/mailtrap/examples/emailtemplates/EmailTemplates.java b/examples/java/io/mailtrap/examples/emailtemplates/EmailTemplates.java new file mode 100644 index 0000000..a63e4f9 --- /dev/null +++ b/examples/java/io/mailtrap/examples/emailtemplates/EmailTemplates.java @@ -0,0 +1,73 @@ +package io.mailtrap.examples.emailtemplates; + +import io.mailtrap.config.MailtrapConfig; +import io.mailtrap.factory.MailtrapClientFactory; +import io.mailtrap.model.request.emailtemplates.CreateEmailTemplateRequest; +import io.mailtrap.model.request.emailtemplates.EmailTemplate; +import io.mailtrap.model.request.emailtemplates.UpdateEmailTemplateRequest; +import io.mailtrap.model.response.emailtemplates.EmailTemplateResponse; + +import java.util.List; + +public class EmailTemplates { + + private static final String TOKEN = ""; + private static final long ACCOUNT_ID = 1L; + private static final String EMAIL_TEMPLATE_NAME = "My Email Template"; + private static final String EMAIL_TEMPLATE_CATEGORY = "Promotion"; + private static final String EMAIL_TEMPLATE_SUBJECT = "Promotion Template subject"; + private static final String EMAIL_TEMPLATE_BODY_TEXT = "Promotion Text body"; + private static final String EMAIL_TEMPLATE_BODY_HTML = "
Promotion body
"; + private static final String UPDATED_EMAIL_TEMPLATE_NAME = "My Updated Email Template"; + + public static void main(String[] args) { + final var config = new MailtrapConfig.Builder() + .token(TOKEN) + .build(); + + new EmailTemplate(EMAIL_TEMPLATE_NAME, EMAIL_TEMPLATE_CATEGORY, EMAIL_TEMPLATE_SUBJECT, EMAIL_TEMPLATE_BODY_TEXT, EMAIL_TEMPLATE_BODY_HTML); + + final var client = MailtrapClientFactory.createMailtrapClient(config); + + final var createRequest = new CreateEmailTemplateRequest( + new EmailTemplate( + EMAIL_TEMPLATE_NAME, + EMAIL_TEMPLATE_CATEGORY, + EMAIL_TEMPLATE_SUBJECT, + EMAIL_TEMPLATE_BODY_TEXT, + EMAIL_TEMPLATE_BODY_HTML + )); + + final var createdEmailTemplate = client.emailTemplatesApi().emailTemplates() + .createEmailTemplate(ACCOUNT_ID, createRequest); + + System.out.println(createdEmailTemplate); + + final var allTemplates = client.emailTemplatesApi().emailTemplates() + .getAllTemplates(ACCOUNT_ID); + + System.out.println(allTemplates); + + final var emailTemplate = client.emailTemplatesApi().emailTemplates() + .getEmailTemplate(ACCOUNT_ID, createdEmailTemplate.getId()); + + System.out.println(emailTemplate); + + final var updateRequest = new UpdateEmailTemplateRequest( + new EmailTemplate( + UPDATED_EMAIL_TEMPLATE_NAME, + EMAIL_TEMPLATE_CATEGORY, + EMAIL_TEMPLATE_SUBJECT, + EMAIL_TEMPLATE_BODY_TEXT, + EMAIL_TEMPLATE_BODY_HTML + )); + + final var updatedEmailTemplate = client.emailTemplatesApi().emailTemplates() + .updateEmailTemplate(ACCOUNT_ID, createdEmailTemplate.getId(), updateRequest); + + System.out.println(updatedEmailTemplate); + + client.emailTemplatesApi().emailTemplates() + .deleteEmailTemplate(ACCOUNT_ID, updatedEmailTemplate.getId()); + } +} diff --git a/src/main/java/io/mailtrap/api/emailtemplates/EmailTemplates.java b/src/main/java/io/mailtrap/api/emailtemplates/EmailTemplates.java new file mode 100644 index 0000000..74d6925 --- /dev/null +++ b/src/main/java/io/mailtrap/api/emailtemplates/EmailTemplates.java @@ -0,0 +1,55 @@ +package io.mailtrap.api.emailtemplates; + +import io.mailtrap.model.request.emailtemplates.CreateEmailTemplateRequest; +import io.mailtrap.model.request.emailtemplates.UpdateEmailTemplateRequest; +import io.mailtrap.model.response.emailtemplates.EmailTemplateResponse; + +import java.util.List; + +public interface EmailTemplates { + + /** + * Get all email templates existing in your account + * + * @param accountId unique account ID + * @return list of existing email templates + */ + List getAllTemplates(long accountId); + + /** + * Create a new email template + * + * @param accountId unique account ID + * @param request email template create payload + * @return created email template + */ + EmailTemplateResponse createEmailTemplate(long accountId, CreateEmailTemplateRequest request); + + /** + * Get an email template by ID + * + * @param accountId unique account ID + * @param emailTemplateId unique email template ID + * @return email template attributes + */ + EmailTemplateResponse getEmailTemplate(long accountId, long emailTemplateId); + + /** + * Update an email template + * + * @param accountId unique account ID + * @param emailTemplateId unique email template ID + * @param request email template update payload + * @return updated email template + */ + EmailTemplateResponse updateEmailTemplate(long accountId, long emailTemplateId, UpdateEmailTemplateRequest request); + + /** + * Delete an email template + * + * @param accountId unique account ID + * @param emailTemplateId unique email template ID + */ + void deleteEmailTemplate(long accountId, long emailTemplateId); + +} diff --git a/src/main/java/io/mailtrap/api/emailtemplates/EmailTemplatesImpl.java b/src/main/java/io/mailtrap/api/emailtemplates/EmailTemplatesImpl.java new file mode 100644 index 0000000..31e653e --- /dev/null +++ b/src/main/java/io/mailtrap/api/emailtemplates/EmailTemplatesImpl.java @@ -0,0 +1,76 @@ +package io.mailtrap.api.emailtemplates; + +import io.mailtrap.Constants; +import io.mailtrap.CustomValidator; +import io.mailtrap.api.apiresource.ApiResourceWithValidation; +import io.mailtrap.config.MailtrapConfig; +import io.mailtrap.http.RequestData; +import io.mailtrap.model.request.emailtemplates.CreateEmailTemplateRequest; +import io.mailtrap.model.request.emailtemplates.UpdateEmailTemplateRequest; +import io.mailtrap.model.response.emailtemplates.EmailTemplateResponse; + +import java.util.List; + +public class EmailTemplatesImpl extends ApiResourceWithValidation implements EmailTemplates { + + public EmailTemplatesImpl(MailtrapConfig config, CustomValidator customValidator) { + super(config, customValidator); + this.apiHost = Constants.GENERAL_HOST; + } + + @Override + public List getAllTemplates(long accountId) { + return + httpClient.getList( + String.format(apiHost + "/api/accounts/%d/email_templates", accountId), + new RequestData(), + EmailTemplateResponse.class + ); + } + + @Override + public EmailTemplateResponse createEmailTemplate(long accountId, CreateEmailTemplateRequest request) { + validateRequestBodyAndThrowException(request); + + return + httpClient.post( + String.format(apiHost + "/api/accounts/%d/email_templates", accountId), + request, + new RequestData(), + EmailTemplateResponse.class + ); + } + + @Override + public EmailTemplateResponse getEmailTemplate(long accountId, long emailTemplateId) { + return + httpClient.get( + String.format(apiHost + "/api/accounts/%d/email_templates/%d", accountId, emailTemplateId), + new RequestData(), + EmailTemplateResponse.class + ); + } + + @Override + public EmailTemplateResponse updateEmailTemplate(long accountId, long emailTemplateId, UpdateEmailTemplateRequest request) { + validateRequestBodyAndThrowException(request); + + return + httpClient.patch( + String.format(apiHost + "/api/accounts/%d/email_templates/%d", accountId, emailTemplateId), + request, + new RequestData(), + EmailTemplateResponse.class + ); + } + + @Override + public void deleteEmailTemplate(long accountId, long emailTemplateId) { + httpClient + .delete( + String.format(apiHost + "/api/accounts/%d/email_templates/%d", accountId, emailTemplateId), + new RequestData(), + Void.class + ); + } +} diff --git a/src/main/java/io/mailtrap/client/MailtrapClient.java b/src/main/java/io/mailtrap/client/MailtrapClient.java index 1d30ce4..1a0b8fb 100644 --- a/src/main/java/io/mailtrap/client/MailtrapClient.java +++ b/src/main/java/io/mailtrap/client/MailtrapClient.java @@ -48,6 +48,12 @@ public class MailtrapClient { @Getter private final MailtrapContactsApi contactsApi; + /** + * API for Mailtrap.io Email Templates management functionality + */ + @Getter + private final MailtrapEmailTemplatesApi emailTemplatesApi; + /** * Utility class which holds sending context (which API to use: Email Sending API, Bulk Sending API or * Email Testing API, inbox id for Email Testing API) to make it possible to perform send directly from MailtrapClient diff --git a/src/main/java/io/mailtrap/client/api/MailtrapEmailTemplatesApi.java b/src/main/java/io/mailtrap/client/api/MailtrapEmailTemplatesApi.java new file mode 100644 index 0000000..7b72731 --- /dev/null +++ b/src/main/java/io/mailtrap/client/api/MailtrapEmailTemplatesApi.java @@ -0,0 +1,13 @@ +package io.mailtrap.client.api; + +import io.mailtrap.api.emailtemplates.EmailTemplates; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.experimental.Accessors; + +@Getter +@Accessors(fluent = true) +@RequiredArgsConstructor +public class MailtrapEmailTemplatesApi { + private final EmailTemplates emailTemplates; +} diff --git a/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java b/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java index a13a082..2951423 100644 --- a/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java +++ b/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java @@ -10,6 +10,7 @@ import io.mailtrap.api.contactimports.ContactImportsImpl; import io.mailtrap.api.contactlists.ContactListsImpl; import io.mailtrap.api.contacts.ContactsImpl; +import io.mailtrap.api.emailtemplates.EmailTemplatesImpl; import io.mailtrap.api.inboxes.InboxesImpl; import io.mailtrap.api.messages.MessagesImpl; import io.mailtrap.api.permissions.PermissionsImpl; @@ -47,10 +48,11 @@ public static MailtrapClient createMailtrapClient(MailtrapConfig config) { final var bulkSendingApi = createBulkSendingApi(config, customValidator); final var generalApi = createGeneralApi(config); final var contactsApi = createContactsApi(config, customValidator); + final var emailTemplatesApi = createEmailTemplatesApi(config, customValidator); final var sendingContextHolder = configureSendingContext(config); - return new MailtrapClient(sendingApi, testingApi, bulkSendingApi, generalApi, contactsApi, sendingContextHolder); + return new MailtrapClient(sendingApi, testingApi, bulkSendingApi, generalApi, contactsApi, emailTemplatesApi, sendingContextHolder); } private static MailtrapContactsApi createContactsApi(MailtrapConfig config, CustomValidator customValidator) { @@ -95,6 +97,12 @@ private static MailtrapBulkSendingApi createBulkSendingApi(MailtrapConfig config return new MailtrapBulkSendingApi(emails); } + private static MailtrapEmailTemplatesApi createEmailTemplatesApi(MailtrapConfig config, CustomValidator customValidator) { + final var emailTemplates = new EmailTemplatesImpl(config, customValidator); + + return new MailtrapEmailTemplatesApi(emailTemplates); + } + private static SendingContextHolder configureSendingContext(MailtrapConfig config) { return SendingContextHolder.builder() diff --git a/src/main/java/io/mailtrap/model/request/emailtemplates/CreateEmailTemplateRequest.java b/src/main/java/io/mailtrap/model/request/emailtemplates/CreateEmailTemplateRequest.java new file mode 100644 index 0000000..96f2325 --- /dev/null +++ b/src/main/java/io/mailtrap/model/request/emailtemplates/CreateEmailTemplateRequest.java @@ -0,0 +1,19 @@ +package io.mailtrap.model.request.emailtemplates; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.mailtrap.model.AbstractModel; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CreateEmailTemplateRequest extends AbstractModel { + + @Valid + @NotNull + @JsonProperty("email_template") + private EmailTemplate emailTemplate; + +} diff --git a/src/main/java/io/mailtrap/model/request/emailtemplates/EmailTemplate.java b/src/main/java/io/mailtrap/model/request/emailtemplates/EmailTemplate.java new file mode 100644 index 0000000..9592fa1 --- /dev/null +++ b/src/main/java/io/mailtrap/model/request/emailtemplates/EmailTemplate.java @@ -0,0 +1,33 @@ +package io.mailtrap.model.request.emailtemplates; + +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class EmailTemplate { + + @NotNull + @Size(min = 1, max = 255) + private String name; + + @NotNull + @Size(min = 1, max = 255) + private String category; + + @NotNull + @Size(min = 1, max = 255) + private String subject; + + @Size(max = 10_000_000) + @JsonProperty("body_text") + private String bodyText; + + @Size(max = 10_000_000) + @JsonProperty("body_html") + private String bodyHtml; + +} diff --git a/src/main/java/io/mailtrap/model/request/emailtemplates/UpdateEmailTemplateRequest.java b/src/main/java/io/mailtrap/model/request/emailtemplates/UpdateEmailTemplateRequest.java new file mode 100644 index 0000000..8778c07 --- /dev/null +++ b/src/main/java/io/mailtrap/model/request/emailtemplates/UpdateEmailTemplateRequest.java @@ -0,0 +1,21 @@ +package io.mailtrap.model.request.emailtemplates; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.mailtrap.model.AbstractModel; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) +public class UpdateEmailTemplateRequest extends AbstractModel { + + @Valid + @NotNull + @JsonProperty("email_template") + private EmailTemplate emailTemplate; + +} diff --git a/src/main/java/io/mailtrap/model/request/inboxes/CreateInboxRequest.java b/src/main/java/io/mailtrap/model/request/inboxes/CreateInboxRequest.java index 9f605b1..726e167 100644 --- a/src/main/java/io/mailtrap/model/request/inboxes/CreateInboxRequest.java +++ b/src/main/java/io/mailtrap/model/request/inboxes/CreateInboxRequest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.mailtrap.model.AbstractModel; +import jakarta.validation.Valid; import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Getter; @@ -10,6 +11,7 @@ @AllArgsConstructor public class CreateInboxRequest extends AbstractModel { + @Valid @JsonProperty("inbox") private InboxCreateData inboxCreateData; diff --git a/src/main/java/io/mailtrap/model/request/inboxes/UpdateInboxRequest.java b/src/main/java/io/mailtrap/model/request/inboxes/UpdateInboxRequest.java index a48d1d5..e7a966f 100644 --- a/src/main/java/io/mailtrap/model/request/inboxes/UpdateInboxRequest.java +++ b/src/main/java/io/mailtrap/model/request/inboxes/UpdateInboxRequest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.mailtrap.model.AbstractModel; +import jakarta.validation.Valid; import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Getter; @@ -10,6 +11,7 @@ @AllArgsConstructor public class UpdateInboxRequest extends AbstractModel { + @Valid @JsonProperty("inbox") private InboxUpdateData inboxUpdateData; diff --git a/src/main/java/io/mailtrap/model/response/emailtemplates/EmailTemplateResponse.java b/src/main/java/io/mailtrap/model/response/emailtemplates/EmailTemplateResponse.java new file mode 100644 index 0000000..295cc1f --- /dev/null +++ b/src/main/java/io/mailtrap/model/response/emailtemplates/EmailTemplateResponse.java @@ -0,0 +1,33 @@ +package io.mailtrap.model.response.emailtemplates; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.OffsetDateTime; + +@Data +public class EmailTemplateResponse { + + private long id; + + private String uuid; + + private String name; + + private String category; + + private String subject; + + @JsonProperty("body_text") + private String bodyText; + + @JsonProperty("body_html") + private String bodyHtml; + + @JsonProperty("created_at") + private OffsetDateTime createdAt; + + @JsonProperty("updated_at") + private OffsetDateTime updatedAt; + +} diff --git a/src/test/java/io/mailtrap/api/emailtemplates/EmailTemplatesImplTest.java b/src/test/java/io/mailtrap/api/emailtemplates/EmailTemplatesImplTest.java new file mode 100644 index 0000000..a43944b --- /dev/null +++ b/src/test/java/io/mailtrap/api/emailtemplates/EmailTemplatesImplTest.java @@ -0,0 +1,148 @@ +package io.mailtrap.api.emailtemplates; + +import io.mailtrap.Constants; +import io.mailtrap.config.MailtrapConfig; +import io.mailtrap.exception.InvalidRequestBodyException; +import io.mailtrap.factory.MailtrapClientFactory; +import io.mailtrap.model.request.emailtemplates.CreateEmailTemplateRequest; +import io.mailtrap.model.request.emailtemplates.EmailTemplate; +import io.mailtrap.model.request.emailtemplates.UpdateEmailTemplateRequest; +import io.mailtrap.model.response.emailtemplates.EmailTemplateResponse; +import io.mailtrap.testutils.BaseTest; +import io.mailtrap.testutils.DataMock; +import io.mailtrap.testutils.TestHttpClient; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +class EmailTemplatesImplTest extends BaseTest { + + private EmailTemplates api; + + @BeforeEach + public void init() { + TestHttpClient httpClient = new TestHttpClient(List.of( + DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/email_templates", + "GET", null, "api/emailtemplates/getAllEmailTemplatesResponse.json"), + + DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/email_templates", + "POST", "api/emailtemplates/createEmailTemplateRequest.json", "api/emailtemplates/createEmailTemplateResponse.json"), + + DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/email_templates/" + emailTemplateId, + "GET", null, "api/emailtemplates/getEmailTemplateResponse.json"), + + DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/email_templates/" + emailTemplateId, + "PATCH", "api/emailtemplates/updateEmailTemplateRequest.json", "api/emailtemplates/updateEmailTemplateResponse.json"), + + DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/email_templates/" + emailTemplateId, + "DELETE", null, null) + )); + + MailtrapConfig testConfig = new MailtrapConfig.Builder() + .httpClient(httpClient) + .token("dummy_token") + .build(); + + api = MailtrapClientFactory.createMailtrapClient(testConfig).emailTemplatesApi().emailTemplates(); + } + + @Test + void test_getAllTemplates() { + List allTemplates = api.getAllTemplates(accountId); + + assertEquals(2, allTemplates.size()); + assertEquals(emailTemplateId, allTemplates.get(0).getId()); + assertEquals("Promotion", allTemplates.get(0).getCategory()); + } + + @Test + void test_createEmailTemplate() { + CreateEmailTemplateRequest request = new CreateEmailTemplateRequest( + new EmailTemplate( + "My Email Template", + "Promotion", + "Promotion Template subject", + "Promotion Text body", + "
Promotion body
")); + + EmailTemplateResponse created = api.createEmailTemplate(accountId, request); + + assertNotNull(created); + assertEquals(emailTemplateId, created.getId()); + assertEquals("My Email Template", created.getName()); + } + + @Test + void test_createEmailTemplate_shouldFailOnValidationFieldSize() { + CreateEmailTemplateRequest request = new CreateEmailTemplateRequest( + new EmailTemplate( + "1s9QhvF587zZkPQjGkyhtUrFcUDlrN04yAoItmoxiRonVkfjKxhX0GyuMhGh8OxDz2F6mJUExVXWKgX9NdreWSKcDjOEzGpxqUj3E9UOgnyvL75UAV9SSwaolnUniMLQ5gKPfVitS5D8xB3HJ4AE6YbSM72EmXt2qBOBni8dL5atGEKw9FGCa1OO7xyipGeq5sz9dlMMQlQl2n90LF94xntrCnXIEBTiaSXZ055rR73RbLnBAITsyTHxI9Sfy9nPgtpIhmAQwZETfd1t6ZN", + "Promotion", + "Promotion Template subject", + "Promotion Text body", + "
Promotion body
")); + + InvalidRequestBodyException exception = assertThrows(InvalidRequestBodyException.class, () -> api.createEmailTemplate(accountId, request)); + + assertTrue(exception.getMessage().contains("Violations: emailTemplate.name=size must be between 1 and 255")); + } + + @Test + void test_createEmailTemplate_shouldFailOnValidationWIthNullableBody() { + CreateEmailTemplateRequest request = new CreateEmailTemplateRequest(null); + + InvalidRequestBodyException exception = assertThrows(InvalidRequestBodyException.class, () -> api.createEmailTemplate(accountId, request)); + + assertTrue(exception.getMessage().contains("Violations: emailTemplate=must not be null")); + } + + @Test + void test_getEmailTemplate() { + EmailTemplateResponse emailTemplate = api.getEmailTemplate(accountId, emailTemplateId); + + assertNotNull(emailTemplate); + assertEquals(emailTemplateId, emailTemplate.getId()); + assertEquals("Promotion Template", emailTemplate.getName()); + } + + @Test + void test_updateEmailTemplate() { + UpdateEmailTemplateRequest request = new UpdateEmailTemplateRequest( + new EmailTemplate( + "My Updated Email Template", + "Promotion", + "Promotion Template subject", + "Promotion Text body", + "
Promotion body
")); + + EmailTemplateResponse updated = api.updateEmailTemplate(accountId, emailTemplateId, request); + + assertNotNull(updated); + assertEquals(emailTemplateId, updated.getId()); + assertEquals("My Updated Email Template", updated.getName()); + } + + @Test + void test_updateEmailTemplate_shouldFailOnValidationFieldSize() { + UpdateEmailTemplateRequest request = new UpdateEmailTemplateRequest( + new EmailTemplate( + "My Updated Email Template", + "Promotion", + "1s9QhvF587zZkPQjGkyhtUrFcUDlrN04yAoItmoxiRonVkfjKxhX0GyuMhGh8OxDz2F6mJUExVXWKgX9NdreWSKcDjOEzGpxqUj3E9UOgnyvL75UAV9SSwaolnUniMLQ5gKPfVitS5D8xB3HJ4AE6YbSM72EmXt2qBOBni8dL5atGEKw9FGCa1OO7xyipGeq5sz9dlMMQlQl2n90LF94xntrCnXIEBTiaSXZ055rR73RbLnBAITsyTHxI9Sfy9nPgtpIhmAQwZETfd1t6ZN", + "Promotion Text body", + "
Promotion body
")); + + InvalidRequestBodyException exception = assertThrows(InvalidRequestBodyException.class, () -> api.updateEmailTemplate(accountId, emailTemplateId, request)); + + assertTrue(exception.getMessage().contains("Violations: emailTemplate.subject=size must be between 1 and 255")); + } + + @Test + void test_deleteEmailTemplate() { + assertDoesNotThrow(() -> api.deleteEmailTemplate(accountId, emailTemplateId)); + } + +} diff --git a/src/test/java/io/mailtrap/testutils/BaseTest.java b/src/test/java/io/mailtrap/testutils/BaseTest.java index 5870868..c0c2610 100644 --- a/src/test/java/io/mailtrap/testutils/BaseTest.java +++ b/src/test/java/io/mailtrap/testutils/BaseTest.java @@ -23,4 +23,5 @@ public class BaseTest { protected final long deleteFieldId = 1111L; protected final String suppressionId = "2fe148b8-b019-431f-ab3f-107663fdf868"; protected final String suppressionIdEncoded = URLEncoder.encode(suppressionId, Charset.defaultCharset()); + protected final long emailTemplateId = 2222L; } diff --git a/src/test/resources/api/emailtemplates/createEmailTemplateRequest.json b/src/test/resources/api/emailtemplates/createEmailTemplateRequest.json new file mode 100644 index 0000000..8062d3a --- /dev/null +++ b/src/test/resources/api/emailtemplates/createEmailTemplateRequest.json @@ -0,0 +1,9 @@ +{ + "email_template": { + "name": "My Email Template", + "category": "Promotion", + "subject": "Promotion Template subject", + "body_text": "Promotion Text body", + "body_html": "
Promotion body
" + } +} diff --git a/src/test/resources/api/emailtemplates/createEmailTemplateResponse.json b/src/test/resources/api/emailtemplates/createEmailTemplateResponse.json new file mode 100644 index 0000000..7a55c65 --- /dev/null +++ b/src/test/resources/api/emailtemplates/createEmailTemplateResponse.json @@ -0,0 +1,11 @@ +{ + "id": 2222, + "name": "My Email Template", + "uuid": "2f422f64-6f04-4c7a-883b-746f770eebdb", + "subject": "Promotion Template subject", + "category": "Promotion", + "body_text": "Promotion Text body", + "body_html": "
Promotion body
", + "created_at": "2025-09-05T01:00:00Z", + "updated_at": "2025-09-05T01:00:00Z" +} diff --git a/src/test/resources/api/emailtemplates/getAllEmailTemplatesResponse.json b/src/test/resources/api/emailtemplates/getAllEmailTemplatesResponse.json new file mode 100644 index 0000000..d4ac242 --- /dev/null +++ b/src/test/resources/api/emailtemplates/getAllEmailTemplatesResponse.json @@ -0,0 +1,24 @@ +[ + { + "id": 2222, + "name": "Promotion Template", + "uuid": "2f422f64-6f04-4c7a-883b-746f770eebdb", + "category": "Promotion", + "subject": "Promotion Template subject", + "body_text": "Promotion Text body", + "body_html": "
Promotion body
", + "created_at": "2025-09-05T01:00:00Z", + "updated_at": "2025-09-05T01:00:00Z" + }, + { + "id": 2223, + "name": "Newsletter Template", + "uuid": "6e572e32-daf5-4175-9c09-cc5a1a05b2a9", + "category": "Newsletter", + "subject": "Newsletter Template subject", + "body_text": "Newsletter Text body", + "body_html": "
Newsletter body
", + "created_at": "2025-09-05T01:01:00Z", + "updated_at": "2025-09-05T01:01:00Z" + } +] diff --git a/src/test/resources/api/emailtemplates/getEmailTemplateResponse.json b/src/test/resources/api/emailtemplates/getEmailTemplateResponse.json new file mode 100644 index 0000000..f8a7786 --- /dev/null +++ b/src/test/resources/api/emailtemplates/getEmailTemplateResponse.json @@ -0,0 +1,11 @@ +{ + "id": 2222, + "name": "Promotion Template", + "uuid": "2f422f64-6f04-4c7a-883b-746f770eebdb", + "category": "Promotion", + "subject": "Promotion Template subject", + "body_text": "Promotion Text body", + "body_html": "
Promotion body
", + "created_at": "2025-09-05T01:00:00Z", + "updated_at": "2025-09-05T01:00:00Z" +} diff --git a/src/test/resources/api/emailtemplates/updateEmailTemplateRequest.json b/src/test/resources/api/emailtemplates/updateEmailTemplateRequest.json new file mode 100644 index 0000000..c1c3ddc --- /dev/null +++ b/src/test/resources/api/emailtemplates/updateEmailTemplateRequest.json @@ -0,0 +1,9 @@ +{ + "email_template": { + "name": "My Updated Email Template", + "category": "Promotion", + "subject": "Promotion Template subject", + "body_text": "Promotion Text body", + "body_html": "
Promotion body
" + } +} diff --git a/src/test/resources/api/emailtemplates/updateEmailTemplateResponse.json b/src/test/resources/api/emailtemplates/updateEmailTemplateResponse.json new file mode 100644 index 0000000..7e4cd76 --- /dev/null +++ b/src/test/resources/api/emailtemplates/updateEmailTemplateResponse.json @@ -0,0 +1,11 @@ +{ + "id": 2222, + "name": "My Updated Email Template", + "uuid": "2f422f64-6f04-4c7a-883b-746f770eebdb", + "subject": "Promotion Template subject", + "category": "Promotion", + "body_text": "Promotion Text body", + "body_html": "
Promotion body
", + "created_at": "2025-09-05T01:00:00Z", + "updated_at": "2025-09-05T01:00:00Z" +}