From 62455f056acbeaf0b0e9efe7460affce5fba8ffc Mon Sep 17 00:00:00 2001 From: Marcin Klocek Date: Tue, 25 Aug 2026 16:19:47 +0200 Subject: [PATCH] Add sending domain update and company info endpoints Fills the gap against the OpenAPI spec: PATCH on a domain plus the nested company_info GET/POST/PATCH. Company info is its own resource on sendingApi().companyInfo(). The spec path is /api/domains/{id}/company_info and the account comes from the API token, so it takes no accountId. Its methods return the CompanyInfoResponse envelope rather than unwrapping it, matching Webhooks and the rest of this SDK. Adding the field to MailtrapEmailSendingApi changes its Lombok @RequiredArgsConstructor signature, so the factory call is updated with it. Also adds tracking_opt_out_enabled to SendingDomainsResponse. The API returns it and update() writes it, so callers could not read back what they just set. --- README.md | 1 + .../companyinfo/CompanyInfoExample.java | 51 +++++++++ .../sendingdomains/SendingDomainsExample.java | 13 +++ .../mailtrap/api/companyinfo/CompanyInfo.java | 35 ++++++ .../api/companyinfo/CompanyInfoImpl.java | 50 +++++++++ .../api/sendingdomains/SendingDomains.java | 11 ++ .../sendingdomains/SendingDomainsImpl.java | 11 ++ .../client/api/MailtrapEmailSendingApi.java | 2 + .../factory/MailtrapClientFactory.java | 4 +- .../companyinfo/CreateCompanyInfoRequest.java | 50 +++++++++ .../companyinfo/UpdateCompanyInfoRequest.java | 50 +++++++++ .../UpdateSendingDomainRequest.java | 40 +++++++ .../response/companyinfo/CompanyInfo.java | 34 ++++++ .../companyinfo/CompanyInfoResponse.java | 10 ++ .../SendingDomainsResponse.java | 3 + .../api/companyinfo/CompanyInfoImplTest.java | 101 ++++++++++++++++++ .../SendingDomainsImplTest.java | 26 +++++ .../api/company_info/companyInfoResponse.json | 14 +++ .../createCompanyInfoRequest.json | 11 ++ .../updateCompanyInfoRequest.json | 6 ++ .../sendingDomainResponse.json | 1 + .../sendingDomainsResponse.json | 1 + .../updateSendingDomainRequest.json | 9 ++ 23 files changed, 533 insertions(+), 1 deletion(-) create mode 100644 examples/java/io/mailtrap/examples/companyinfo/CompanyInfoExample.java create mode 100644 src/main/java/io/mailtrap/api/companyinfo/CompanyInfo.java create mode 100644 src/main/java/io/mailtrap/api/companyinfo/CompanyInfoImpl.java create mode 100644 src/main/java/io/mailtrap/model/request/companyinfo/CreateCompanyInfoRequest.java create mode 100644 src/main/java/io/mailtrap/model/request/companyinfo/UpdateCompanyInfoRequest.java create mode 100644 src/main/java/io/mailtrap/model/request/sendingdomains/UpdateSendingDomainRequest.java create mode 100644 src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfo.java create mode 100644 src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfoResponse.java create mode 100644 src/test/java/io/mailtrap/api/companyinfo/CompanyInfoImplTest.java create mode 100644 src/test/resources/api/company_info/companyInfoResponse.json create mode 100644 src/test/resources/api/company_info/createCompanyInfoRequest.json create mode 100644 src/test/resources/api/company_info/updateCompanyInfoRequest.json create mode 100644 src/test/resources/api/sending_domains/updateSendingDomainRequest.json diff --git a/README.md b/README.md index e351245..4c8682b 100644 --- a/README.md +++ b/README.md @@ -348,6 +348,7 @@ You can find the [Mailtrap Java API reference](https://mailtrap.github.io/mailtr - [Send using template](examples/java/io/mailtrap/examples/sending/TemplateExample.java) - [Batch](examples/java/io/mailtrap/examples/sending/BatchExample.java) - [Sending Domains](examples/java/io/mailtrap/examples/sendingdomains/SendingDomainsExample.java) +- [Company Info](examples/java/io/mailtrap/examples/companyinfo/CompanyInfoExample.java) - [Suppressions](examples/java/io/mailtrap/examples/suppressions/SuppressionsExample.java) - [Stats](examples/java/io/mailtrap/examples/sending/StatsExample.java) - [Email Logs](examples/java/io/mailtrap/examples/emaillogs/EmailLogsExample.java) diff --git a/examples/java/io/mailtrap/examples/companyinfo/CompanyInfoExample.java b/examples/java/io/mailtrap/examples/companyinfo/CompanyInfoExample.java new file mode 100644 index 0000000..8238294 --- /dev/null +++ b/examples/java/io/mailtrap/examples/companyinfo/CompanyInfoExample.java @@ -0,0 +1,51 @@ +package io.mailtrap.examples.companyinfo; + +import io.mailtrap.config.MailtrapConfig; +import io.mailtrap.factory.MailtrapClientFactory; +import io.mailtrap.model.request.companyinfo.CreateCompanyInfoRequest; +import io.mailtrap.model.request.companyinfo.UpdateCompanyInfoRequest; + +public class CompanyInfoExample { + + private static final String TOKEN = System.getenv("MAILTRAP_API_KEY"); + private static final long DOMAIN_ID = Long.parseLong(System.getenv("MAILTRAP_DOMAIN_ID")); + + public static void main(String[] args) { + final var config = new MailtrapConfig.Builder() + .token(TOKEN) + .build(); + + final var client = MailtrapClientFactory.createMailtrapClient(config); + + final var createRequest = new CreateCompanyInfoRequest( + CreateCompanyInfoRequest.CompanyInfoData.builder() + .name("Mailtrap") + .address("123 Main St") + .city("San Francisco") + .country("US") + .zipCode("94105") + .websiteUrl("https://mailtrap.io") + .phone("+1-555-0100") + .privacyPolicyUrl("https://mailtrap.io/privacy") + .termsOfServiceUrl("https://mailtrap.io/terms") + .infoLevel("business") + .build() + ); + + final var created = client.sendingApi().companyInfo().createCompanyInfo(DOMAIN_ID, createRequest); + System.out.println(created.getData()); + + final var companyInfo = client.sendingApi().companyInfo().getCompanyInfo(DOMAIN_ID); + System.out.println(companyInfo.getData()); + + final var updateRequest = new UpdateCompanyInfoRequest( + UpdateCompanyInfoRequest.CompanyInfoData.builder() + .city("New York") + .zipCode("10001") + .build() + ); + + final var updated = client.sendingApi().companyInfo().updateCompanyInfo(DOMAIN_ID, updateRequest); + System.out.println(updated.getData()); + } +} diff --git a/examples/java/io/mailtrap/examples/sendingdomains/SendingDomainsExample.java b/examples/java/io/mailtrap/examples/sendingdomains/SendingDomainsExample.java index 8717c92..a996231 100644 --- a/examples/java/io/mailtrap/examples/sendingdomains/SendingDomainsExample.java +++ b/examples/java/io/mailtrap/examples/sendingdomains/SendingDomainsExample.java @@ -4,6 +4,7 @@ import io.mailtrap.factory.MailtrapClientFactory; import io.mailtrap.model.request.sendingdomains.CreateSendingDomainRequest; import io.mailtrap.model.request.sendingdomains.SendingDomainsSetupInstructionsRequest; +import io.mailtrap.model.request.sendingdomains.UpdateSendingDomainRequest; import static io.mailtrap.model.request.sendingdomains.CreateSendingDomainRequest.SendingDomainData; @@ -32,6 +33,18 @@ public static void main(String[] args) { final var allDomains = client.sendingApi().domains().getSendingDomains(ACCOUNT_ID); System.out.println(allDomains); + final var updateRequest = new UpdateSendingDomainRequest( + UpdateSendingDomainRequest.SendingDomainData.builder() + .openTrackingEnabled(true) + .clickTrackingEnabled(true) + .trackingOptOutEnabled(true) + .autoUnsubscribeLinkEnabled(false) + .build() + ); + + final var updatedDomain = client.sendingApi().domains().update(ACCOUNT_ID, createdDomain.getId(), updateRequest); + System.out.println(updatedDomain); + final var sendInstructionsRequest = new SendingDomainsSetupInstructionsRequest(DEVOPS_EMAIL); client.sendingApi().domains().sendSendingDomainsSetupInstructions(ACCOUNT_ID, createdDomain.getId(), sendInstructionsRequest); diff --git a/src/main/java/io/mailtrap/api/companyinfo/CompanyInfo.java b/src/main/java/io/mailtrap/api/companyinfo/CompanyInfo.java new file mode 100644 index 0000000..4b11dde --- /dev/null +++ b/src/main/java/io/mailtrap/api/companyinfo/CompanyInfo.java @@ -0,0 +1,35 @@ +package io.mailtrap.api.companyinfo; + +import io.mailtrap.model.request.companyinfo.CreateCompanyInfoRequest; +import io.mailtrap.model.request.companyinfo.UpdateCompanyInfoRequest; +import io.mailtrap.model.response.companyinfo.CompanyInfoResponse; + +public interface CompanyInfo { + + /** + * Get the company info associated with a sending domain + * + * @param sendingDomainId unique domain ID + * @return company info of the sending domain + */ + CompanyInfoResponse getCompanyInfo(long sendingDomainId); + + /** + * Create the company info for a sending domain. Company info is required for + * domain compliance verification. + * + * @param sendingDomainId unique domain ID + * @param request request data + * @return created company info + */ + CompanyInfoResponse createCompanyInfo(long sendingDomainId, CreateCompanyInfoRequest request); + + /** + * Update the company info for a sending domain + * + * @param sendingDomainId unique domain ID + * @param request request data, only the fields set are sent + * @return updated company info + */ + CompanyInfoResponse updateCompanyInfo(long sendingDomainId, UpdateCompanyInfoRequest request); +} diff --git a/src/main/java/io/mailtrap/api/companyinfo/CompanyInfoImpl.java b/src/main/java/io/mailtrap/api/companyinfo/CompanyInfoImpl.java new file mode 100644 index 0000000..a191d06 --- /dev/null +++ b/src/main/java/io/mailtrap/api/companyinfo/CompanyInfoImpl.java @@ -0,0 +1,50 @@ +package io.mailtrap.api.companyinfo; + +import io.mailtrap.Constants; +import io.mailtrap.api.apiresource.ApiResource; +import io.mailtrap.config.MailtrapConfig; +import io.mailtrap.http.RequestData; +import io.mailtrap.model.request.companyinfo.CreateCompanyInfoRequest; +import io.mailtrap.model.request.companyinfo.UpdateCompanyInfoRequest; +import io.mailtrap.model.response.companyinfo.CompanyInfoResponse; + +public class CompanyInfoImpl extends ApiResource implements CompanyInfo { + + public CompanyInfoImpl(final MailtrapConfig config) { + super(config); + this.apiHost = Constants.GENERAL_HOST; + } + + @Override + public CompanyInfoResponse getCompanyInfo(final long sendingDomainId) { + return httpClient.get( + companyInfoPath(sendingDomainId), + new RequestData(), + CompanyInfoResponse.class + ); + } + + @Override + public CompanyInfoResponse createCompanyInfo(final long sendingDomainId, final CreateCompanyInfoRequest request) { + return httpClient.post( + companyInfoPath(sendingDomainId), + request, + new RequestData(), + CompanyInfoResponse.class + ); + } + + @Override + public CompanyInfoResponse updateCompanyInfo(final long sendingDomainId, final UpdateCompanyInfoRequest request) { + return httpClient.patch( + companyInfoPath(sendingDomainId), + request, + new RequestData(), + CompanyInfoResponse.class + ); + } + + private String companyInfoPath(final long sendingDomainId) { + return String.format(apiHost + "/api/domains/%d/company_info", sendingDomainId); + } +} diff --git a/src/main/java/io/mailtrap/api/sendingdomains/SendingDomains.java b/src/main/java/io/mailtrap/api/sendingdomains/SendingDomains.java index b21a395..a072f07 100644 --- a/src/main/java/io/mailtrap/api/sendingdomains/SendingDomains.java +++ b/src/main/java/io/mailtrap/api/sendingdomains/SendingDomains.java @@ -2,6 +2,7 @@ import io.mailtrap.model.request.sendingdomains.CreateSendingDomainRequest; import io.mailtrap.model.request.sendingdomains.SendingDomainsSetupInstructionsRequest; +import io.mailtrap.model.request.sendingdomains.UpdateSendingDomainRequest; import io.mailtrap.model.response.sendingdomains.SendingDomainsResponse; import java.util.List; @@ -34,6 +35,16 @@ public interface SendingDomains { */ SendingDomainsResponse getSendingDomain(long accountId, long sendingDomainId); + /** + * Update configuration settings for a sending domain + * + * @param accountId unique account ID + * @param sendingDomainId unique domain ID + * @param request request data, only the fields set are sent + * @return updated domain attributes, DNS records, status + */ + SendingDomainsResponse update(long accountId, long sendingDomainId, UpdateSendingDomainRequest request); + /** * Send sending domain setup instructions * diff --git a/src/main/java/io/mailtrap/api/sendingdomains/SendingDomainsImpl.java b/src/main/java/io/mailtrap/api/sendingdomains/SendingDomainsImpl.java index 2874bd4..8917702 100644 --- a/src/main/java/io/mailtrap/api/sendingdomains/SendingDomainsImpl.java +++ b/src/main/java/io/mailtrap/api/sendingdomains/SendingDomainsImpl.java @@ -6,6 +6,7 @@ import io.mailtrap.http.RequestData; import io.mailtrap.model.request.sendingdomains.CreateSendingDomainRequest; import io.mailtrap.model.request.sendingdomains.SendingDomainsSetupInstructionsRequest; +import io.mailtrap.model.request.sendingdomains.UpdateSendingDomainRequest; import io.mailtrap.model.response.sendingdomains.SendingDomainsResponse; import java.util.List; @@ -45,6 +46,16 @@ public SendingDomainsResponse getSendingDomain(final long accountId, final long ); } + @Override + public SendingDomainsResponse update(final long accountId, final long sendingDomainId, final UpdateSendingDomainRequest request) { + return httpClient.patch( + String.format(apiHost + "/api/accounts/%d/sending_domains/%d", accountId, sendingDomainId), + request, + new RequestData(), + SendingDomainsResponse.class + ); + } + @Override public void sendSendingDomainsSetupInstructions(final long accountId, final long sendingDomainId, final SendingDomainsSetupInstructionsRequest request) { httpClient.post( diff --git a/src/main/java/io/mailtrap/client/api/MailtrapEmailSendingApi.java b/src/main/java/io/mailtrap/client/api/MailtrapEmailSendingApi.java index e125fab..69ee2a3 100644 --- a/src/main/java/io/mailtrap/client/api/MailtrapEmailSendingApi.java +++ b/src/main/java/io/mailtrap/client/api/MailtrapEmailSendingApi.java @@ -1,5 +1,6 @@ package io.mailtrap.client.api; +import io.mailtrap.api.companyinfo.CompanyInfo; import io.mailtrap.api.emaillogs.EmailLogs; import io.mailtrap.api.sendingdomains.SendingDomains; import io.mailtrap.api.sendingemails.SendingEmails; @@ -18,6 +19,7 @@ public class MailtrapEmailSendingApi { private final SendingEmails emails; private final SendingDomains domains; + private final CompanyInfo companyInfo; private final Suppressions suppressions; private final Stats stats; private final EmailLogs emailLogs; diff --git a/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java b/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java index 9c55869..92e008e 100644 --- a/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java +++ b/src/main/java/io/mailtrap/factory/MailtrapClientFactory.java @@ -24,6 +24,7 @@ import io.mailtrap.api.permissions.PermissionsImpl; import io.mailtrap.api.projects.ProjectsImpl; import io.mailtrap.api.emaillogs.EmailLogsImpl; +import io.mailtrap.api.companyinfo.CompanyInfoImpl; import io.mailtrap.api.sendingdomains.SendingDomainsImpl; import io.mailtrap.api.sendingemails.SendingEmailsImpl; import io.mailtrap.api.stats.StatsImpl; @@ -134,11 +135,12 @@ private static MailtrapGeneralApi createGeneralApi(final MailtrapConfig config) private static MailtrapEmailSendingApi createSendingApi(final MailtrapConfig config) { final var emails = new SendingEmailsImpl(config, VALIDATOR); final var domains = new SendingDomainsImpl(config); + final var companyInfo = new CompanyInfoImpl(config); final var suppressions = new SuppressionsImpl(config); final var stats = new StatsImpl(config); final var emailLogs = new EmailLogsImpl(config); - return new MailtrapEmailSendingApi(emails, domains, suppressions, stats, emailLogs); + return new MailtrapEmailSendingApi(emails, domains, companyInfo, suppressions, stats, emailLogs); } private static MailtrapEmailTestingApi createTestingApi(final MailtrapConfig config) { diff --git a/src/main/java/io/mailtrap/model/request/companyinfo/CreateCompanyInfoRequest.java b/src/main/java/io/mailtrap/model/request/companyinfo/CreateCompanyInfoRequest.java new file mode 100644 index 0000000..0f114fd --- /dev/null +++ b/src/main/java/io/mailtrap/model/request/companyinfo/CreateCompanyInfoRequest.java @@ -0,0 +1,50 @@ +package io.mailtrap.model.request.companyinfo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.mailtrap.model.AbstractModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class CreateCompanyInfoRequest extends AbstractModel { + + @JsonProperty("company_info") + private CompanyInfoData companyInfo; + + @Getter + @Builder + @AllArgsConstructor + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class CompanyInfoData { + + private String name; + + private String address; + + private String city; + + private String country; + + @JsonProperty("zip_code") + private String zipCode; + + @JsonProperty("website_url") + private String websiteUrl; + + private String phone; + + @JsonProperty("privacy_policy_url") + private String privacyPolicyUrl; + + @JsonProperty("terms_of_service_url") + private String termsOfServiceUrl; + + @JsonProperty("info_level") + private String infoLevel; + + } + +} diff --git a/src/main/java/io/mailtrap/model/request/companyinfo/UpdateCompanyInfoRequest.java b/src/main/java/io/mailtrap/model/request/companyinfo/UpdateCompanyInfoRequest.java new file mode 100644 index 0000000..856aff7 --- /dev/null +++ b/src/main/java/io/mailtrap/model/request/companyinfo/UpdateCompanyInfoRequest.java @@ -0,0 +1,50 @@ +package io.mailtrap.model.request.companyinfo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.mailtrap.model.AbstractModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class UpdateCompanyInfoRequest extends AbstractModel { + + @JsonProperty("company_info") + private CompanyInfoData companyInfo; + + @Getter + @Builder + @AllArgsConstructor + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class CompanyInfoData { + + private String name; + + private String address; + + private String city; + + private String country; + + private String phone; + + @JsonProperty("zip_code") + private String zipCode; + + @JsonProperty("privacy_policy_url") + private String privacyPolicyUrl; + + @JsonProperty("terms_of_service_url") + private String termsOfServiceUrl; + + @JsonProperty("website_url") + private String websiteUrl; + + @JsonProperty("info_level") + private String infoLevel; + + } + +} diff --git a/src/main/java/io/mailtrap/model/request/sendingdomains/UpdateSendingDomainRequest.java b/src/main/java/io/mailtrap/model/request/sendingdomains/UpdateSendingDomainRequest.java new file mode 100644 index 0000000..5118f1a --- /dev/null +++ b/src/main/java/io/mailtrap/model/request/sendingdomains/UpdateSendingDomainRequest.java @@ -0,0 +1,40 @@ +package io.mailtrap.model.request.sendingdomains; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.mailtrap.model.AbstractModel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class UpdateSendingDomainRequest extends AbstractModel { + + @JsonProperty("sending_domain") + private SendingDomainData sendingDomain; + + @Getter + @Builder + @AllArgsConstructor + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class SendingDomainData { + + @JsonProperty("open_tracking_enabled") + private Boolean openTrackingEnabled; + + @JsonProperty("click_tracking_enabled") + private Boolean clickTrackingEnabled; + + @JsonProperty("tracking_opt_out_enabled") + private Boolean trackingOptOutEnabled; + + @JsonProperty("auto_unsubscribe_link_enabled") + private Boolean autoUnsubscribeLinkEnabled; + + @JsonProperty("inbound_enabled") + private Boolean inboundEnabled; + + } + +} diff --git a/src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfo.java b/src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfo.java new file mode 100644 index 0000000..91a47ec --- /dev/null +++ b/src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfo.java @@ -0,0 +1,34 @@ +package io.mailtrap.model.response.companyinfo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +@Data +public class CompanyInfo { + + private String name; + + private String address; + + private String city; + + private String country; + + private String phone; + + @JsonProperty("zip_code") + private String zipCode; + + @JsonProperty("privacy_policy_url") + private String privacyPolicyUrl; + + @JsonProperty("terms_of_service_url") + private String termsOfServiceUrl; + + @JsonProperty("website_url") + private String websiteUrl; + + @JsonProperty("info_level") + private String infoLevel; + +} diff --git a/src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfoResponse.java b/src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfoResponse.java new file mode 100644 index 0000000..a5c7c96 --- /dev/null +++ b/src/main/java/io/mailtrap/model/response/companyinfo/CompanyInfoResponse.java @@ -0,0 +1,10 @@ +package io.mailtrap.model.response.companyinfo; + +import lombok.Data; + +@Data +public class CompanyInfoResponse { + + private CompanyInfo data; + +} diff --git a/src/main/java/io/mailtrap/model/response/sendingdomains/SendingDomainsResponse.java b/src/main/java/io/mailtrap/model/response/sendingdomains/SendingDomainsResponse.java index 2790696..bed3a4e 100644 --- a/src/main/java/io/mailtrap/model/response/sendingdomains/SendingDomainsResponse.java +++ b/src/main/java/io/mailtrap/model/response/sendingdomains/SendingDomainsResponse.java @@ -30,6 +30,9 @@ public class SendingDomainsResponse { @JsonProperty("click_tracking_enabled") private boolean clickTrackingEnabled; + @JsonProperty("tracking_opt_out_enabled") + private boolean trackingOptOutEnabled; + @JsonProperty("auto_unsubscribe_link_enabled") private boolean autoUnsubscribeLinkEnabled; diff --git a/src/test/java/io/mailtrap/api/companyinfo/CompanyInfoImplTest.java b/src/test/java/io/mailtrap/api/companyinfo/CompanyInfoImplTest.java new file mode 100644 index 0000000..69f2d32 --- /dev/null +++ b/src/test/java/io/mailtrap/api/companyinfo/CompanyInfoImplTest.java @@ -0,0 +1,101 @@ +package io.mailtrap.api.companyinfo; + +import io.mailtrap.Constants; +import io.mailtrap.config.MailtrapConfig; +import io.mailtrap.factory.MailtrapClientFactory; +import io.mailtrap.model.request.companyinfo.CreateCompanyInfoRequest; +import io.mailtrap.model.request.companyinfo.UpdateCompanyInfoRequest; +import io.mailtrap.model.response.companyinfo.CompanyInfoResponse; +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.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +class CompanyInfoImplTest extends BaseTest { + + private final long domainId = 12345L; + + private CompanyInfo companyInfo; + + @BeforeEach + public void init() { + final String companyInfoUrl = Constants.GENERAL_HOST + "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/api/domains/" + domainId + "/company_info"; + + final TestHttpClient httpClient = new TestHttpClient(List.of( + DataMock.build( + companyInfoUrl, + "GET", null, "api/company_info/companyInfoResponse.json" + ), + DataMock.build( + companyInfoUrl, + "POST", "api/company_info/createCompanyInfoRequest.json", "api/company_info/companyInfoResponse.json" + ), + DataMock.build( + companyInfoUrl, + "PATCH", "api/company_info/updateCompanyInfoRequest.json", "api/company_info/companyInfoResponse.json" + ) + )); + + final MailtrapConfig testConfig = new MailtrapConfig.Builder() + .httpClient(httpClient) + .token("dummy_token") + .build(); + + companyInfo = MailtrapClientFactory.createMailtrapClient(testConfig).sendingApi().companyInfo(); + } + + @Test + void test_getCompanyInfo() { + final CompanyInfoResponse response = companyInfo.getCompanyInfo(domainId); + + assertNotNull(response); + assertNotNull(response.getData()); + assertEquals("Mailtrap", response.getData().getName()); + assertEquals("San Francisco", response.getData().getCity()); + assertEquals("94105", response.getData().getZipCode()); + assertEquals("business", response.getData().getInfoLevel()); + } + + @Test + void test_createCompanyInfo() { + final CompanyInfoResponse response = companyInfo.createCompanyInfo( + domainId, + new CreateCompanyInfoRequest( + CreateCompanyInfoRequest.CompanyInfoData.builder() + .name("Mailtrap") + .address("123 Main St") + .city("San Francisco") + .country("US") + .zipCode("94105") + .websiteUrl("https://mailtrap.io") + .infoLevel("business") + .build() + ) + ); + + assertNotNull(response); + assertEquals("Mailtrap", response.getData().getName()); + } + + @Test + void test_updateCompanyInfo() { + final CompanyInfoResponse response = companyInfo.updateCompanyInfo( + domainId, + new UpdateCompanyInfoRequest( + UpdateCompanyInfoRequest.CompanyInfoData.builder() + .city("New York") + .zipCode("10001") + .build() + ) + ); + + assertNotNull(response); + assertEquals("Mailtrap", response.getData().getName()); + } +} diff --git a/src/test/java/io/mailtrap/api/sendingdomains/SendingDomainsImplTest.java b/src/test/java/io/mailtrap/api/sendingdomains/SendingDomainsImplTest.java index bea985a..de4004c 100644 --- a/src/test/java/io/mailtrap/api/sendingdomains/SendingDomainsImplTest.java +++ b/src/test/java/io/mailtrap/api/sendingdomains/SendingDomainsImplTest.java @@ -5,6 +5,7 @@ import io.mailtrap.factory.MailtrapClientFactory; import io.mailtrap.model.request.sendingdomains.CreateSendingDomainRequest; import io.mailtrap.model.request.sendingdomains.SendingDomainsSetupInstructionsRequest; +import io.mailtrap.model.request.sendingdomains.UpdateSendingDomainRequest; import io.mailtrap.model.response.sendingdomains.SendingDomainsResponse; import io.mailtrap.testutils.BaseTest; import io.mailtrap.testutils.DataMock; @@ -35,6 +36,10 @@ public void init() { Constants.GENERAL_HOST + "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/api/accounts/" + accountId + "/sending_domains/" + sendingDomainId, "GET", null, "api/sending_domains/sendingDomainResponse.json" ), + DataMock.build( + Constants.GENERAL_HOST + "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/api/accounts/" + accountId + "/sending_domains/" + sendingDomainId, + "PATCH", "api/sending_domains/updateSendingDomainRequest.json", "api/sending_domains/sendingDomainResponse.json" + ), DataMock.build( Constants.GENERAL_HOST + "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/api/accounts/" + accountId + "/sending_domains/" + sendingDomainId + "/send_setup_instructions", "POST", "api/sending_domains/sendSetupInstructionsRequest.json", null @@ -84,6 +89,27 @@ void test_getSendingDomain() { assertFalse(response.isInboundVerified()); } + @Test + void test_update() { + final SendingDomainsResponse response = domains.update( + accountId, + sendingDomainId, + new UpdateSendingDomainRequest( + UpdateSendingDomainRequest.SendingDomainData.builder() + .openTrackingEnabled(true) + .clickTrackingEnabled(true) + .trackingOptOutEnabled(true) + .autoUnsubscribeLinkEnabled(false) + .inboundEnabled(false) + .build() + ) + ); + + assertNotNull(response); + assertEquals("test.io", response.getDomainName()); + assertTrue(response.isTrackingOptOutEnabled()); + } + @Test void test_sendSendingDomainsSetupInstructions() { domains.sendSendingDomainsSetupInstructions(accountId, sendingDomainId, new SendingDomainsSetupInstructionsRequest("devops@test.io")); diff --git a/src/test/resources/api/company_info/companyInfoResponse.json b/src/test/resources/api/company_info/companyInfoResponse.json new file mode 100644 index 0000000..812d7c4 --- /dev/null +++ b/src/test/resources/api/company_info/companyInfoResponse.json @@ -0,0 +1,14 @@ +{ + "data": { + "name": "Mailtrap", + "address": "123 Main St", + "city": "San Francisco", + "country": "US", + "phone": "+1-555-0100", + "zip_code": "94105", + "privacy_policy_url": "https://mailtrap.io/privacy", + "terms_of_service_url": "https://mailtrap.io/terms", + "website_url": "https://mailtrap.io", + "info_level": "business" + } +} diff --git a/src/test/resources/api/company_info/createCompanyInfoRequest.json b/src/test/resources/api/company_info/createCompanyInfoRequest.json new file mode 100644 index 0000000..04f81c3 --- /dev/null +++ b/src/test/resources/api/company_info/createCompanyInfoRequest.json @@ -0,0 +1,11 @@ +{ + "company_info": { + "name": "Mailtrap", + "address": "123 Main St", + "city": "San Francisco", + "country": "US", + "zip_code": "94105", + "website_url": "https://mailtrap.io", + "info_level": "business" + } +} diff --git a/src/test/resources/api/company_info/updateCompanyInfoRequest.json b/src/test/resources/api/company_info/updateCompanyInfoRequest.json new file mode 100644 index 0000000..67ed096 --- /dev/null +++ b/src/test/resources/api/company_info/updateCompanyInfoRequest.json @@ -0,0 +1,6 @@ +{ + "company_info": { + "city": "New York", + "zip_code": "10001" + } +} diff --git a/src/test/resources/api/sending_domains/sendingDomainResponse.json b/src/test/resources/api/sending_domains/sendingDomainResponse.json index ec6c619..0825aff 100644 --- a/src/test/resources/api/sending_domains/sendingDomainResponse.json +++ b/src/test/resources/api/sending_domains/sendingDomainResponse.json @@ -56,6 +56,7 @@ ], "open_tracking_enabled": true, "click_tracking_enabled": true, + "tracking_opt_out_enabled": true, "auto_unsubscribe_link_enabled": true, "custom_domain_tracking_enabled": true, "health_alerts_enabled": true, diff --git a/src/test/resources/api/sending_domains/sendingDomainsResponse.json b/src/test/resources/api/sending_domains/sendingDomainsResponse.json index e68a4a8..42c1911 100644 --- a/src/test/resources/api/sending_domains/sendingDomainsResponse.json +++ b/src/test/resources/api/sending_domains/sendingDomainsResponse.json @@ -57,6 +57,7 @@ ], "open_tracking_enabled": true, "click_tracking_enabled": true, + "tracking_opt_out_enabled": true, "auto_unsubscribe_link_enabled": true, "custom_domain_tracking_enabled": true, "health_alerts_enabled": true, diff --git a/src/test/resources/api/sending_domains/updateSendingDomainRequest.json b/src/test/resources/api/sending_domains/updateSendingDomainRequest.json new file mode 100644 index 0000000..c16003b --- /dev/null +++ b/src/test/resources/api/sending_domains/updateSendingDomainRequest.json @@ -0,0 +1,9 @@ +{ + "sending_domain": { + "open_tracking_enabled": true, + "click_tracking_enabled": true, + "tracking_opt_out_enabled": true, + "auto_unsubscribe_link_enabled": false, + "inbound_enabled": false + } +}