diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..19a75f6 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,135 @@ +# Changelog + +All notable changes to the Mailinator Java Client SDK will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +--- + +## [2.5.1] - 2026-03-23 + +### Fixed + +- `PrivateWebhookRequest`: removed incorrect `resolveTemplate("wh-token", ...)` call and properly use `whtoken` query parameter. + +--- + +## [2.5.0] - 2026-03-23 + +### Added + +- `GetMessageSummaryRequest` + `MessageSummaryResponse` / `MessageSummary`: fetch a message summary (`GET /api/v2/domains/{domain}/messages/{id}/summary`). +- `GetMessageTextRequest` + `MessageTextResponse`: fetch the text body of a message (`GET /api/v2/domains/{domain}/messages/{id}/text`). +- `GetMessageTextPlainRequest`: fetch the plain-text variant of a message body (`GET /api/v2/domains/{domain}/messages/{id}/textplain`), returns raw `JSONObject`. +- `GetMessageTextHtmlRequest`: fetch the HTML variant of a message body (`GET /api/v2/domains/{domain}/messages/{id}/texthtml`), returns raw `JSONObject`. +- `GetMessageHeadersRequest` + `MessageHeadersResponse`: fetch all message headers (`GET /api/v2/domains/{domain}/messages/{id}/headers`). +- `GetStreamDomainMessagesRequest`: long-poll stream for the next message arriving in any inbox of a domain (`GET /api/v2/domains/{domain}/stream`). Pings are transparently skipped; result is returned as an `Inbox`. +- `GetStreamInboxMessagesRequest`: long-poll stream for the next message arriving in a specific inbox (`GET /api/v2/domains/{domain}/stream/{inbox}`). +- New integration tests for all seven request classes above, gated on `MAILINATOR_TEST_REAL_MESSAGE_ID` (or existing env vars where applicable). +- `MAILINATOR_TEST_REAL_MESSAGE_ID` constant added to `TestEnv`. +- Test resilience for plan-limited features: stream tests gated on MAILINATOR_TEST_ENABLE_STREAM, attachment/text/headers/summary tests skip gracefully on HTTP 500, delete/wait params skip if not honored. + +### Fixed + +- `GetInboxRequest`: when `inbox` is `null`, the URL template now resolves to `*` (i.e. `/inboxes/*`) instead of an empty path segment, matching the Mailinator wildcard-inbox convention. +- `User-Agent` header version is now derived automatically from the POM version via Maven resource filtering — the string `Mailinator SDK - Java V{version}` is resolved at build time, so no manual update is required on each release. + +### Changed + +- Deprecated test classes now carry `@Disabled` annotations with descriptive messages so they are skipped rather than executed: all six rule tests, `CreateDomainRequestTest`, `DeleteDomainRequestTest`, `GetAuthenticatorsRequestTest`, `GetAuthenticatorRequestTest`, `GetAuthenticatorByIdRequestTest`, `GetLatestMessagesRequestTest`, `GetLatestInboxMessagesRequestTest`. + +--- + +## [2.4.0] - 2026-03-23 + +### Deprecated + +- **Rule management** (`CreateRuleRequest`, `DeleteRuleRequest`, `DisableRuleRequest`, `EnableRuleRequest`, `GetRuleRequest`, `GetRulesRequest`): rules engine endpoints have been deprecated in the Mailinator API and will be removed in a future release. +- **Domain management** (`CreateDomainRequest`, `DeleteDomainRequest`): domain creation and deletion via the SDK are deprecated; use the Mailinator web UI instead. +- **Authenticator list endpoints** (`GetAuthenticatorRequest`, `GetAuthenticatorByIdRequest`, `GetAuthenticatorsRequest`): not present in the current OpenAPI specification; use `GetAuthenticatorsByIdRequest` for authenticator lookup. +- **Legacy wildcard message endpoints** (`GetLatestMessagesRequest`, `GetLatestInboxMessagesRequest`): removed from the current OpenAPI specification and known to return server errors; use `GetInboxRequest` instead. + +### Added + +- `GetSmsInboxRequest`: added full inbox-list query parameter support — `skip`, `limit`, `sort`, `decode_subject`, `cursor`, `full`, `wait`, `delete` — to align with the OpenAPI contract. +- `GetInboxMessageRequest`: added optional `delete` query parameter, allowing a message to be deleted upon retrieval (mirrors `GetMessageRequest` behaviour). + +### Fixed + +- Updated `USER_AGENT` header to `Mailinator SDK - Java V2.4`. + +--- + +## [2.3.0] - 2026-03-23 + +### Changed + +- **Replaced Jackson with json-simple for all JSON serialization/deserialization.** + Jackson's strict schema validation (`UnrecognizedPropertyException`) caused failures whenever the Mailinator API added new fields. json-simple silently ignores unknown fields, making the SDK resilient to API schema evolution. + +#### Infrastructure + +- `pom.xml`: Removed `jersey-media-json-jackson` dependency; added `com.googlecode.json-simple:json-simple:1.1.1`. +- `JerseyClient.java`: Removed `JacksonFeature` registration from Jersey client configuration. +- `JsonUtils.java` _(new)_: Added utility class with helpers `parseObject`, `getString`, `getInteger`, `getLong`, `getBoolean`, `getObject`, `getList`, and `getStringList` for safe json-simple parsing. + +#### Model / DTO classes — Jackson annotations removed, manual `fromJson(JSONObject)` factory methods added + +- `ResponseStatus` +- `DeletedMessages` +- `PrivateWebhookResponse` +- `EmailLogEntry` +- `LinkEntity` +- `MembersItem` +- `SmsNumbersItem` +- `PrivateDomainsItem` +- `Retrieved` +- `Sent` +- `PlanData` +- `Authenticator` (field names also normalised: `Id→id`, `TimeStep→timeStep`, etc.) +- `GetAuthenticatorsResponse` +- `InstantTOTP2FACodeResponse` +- `Links` +- `LinksFull` +- `Attachment` +- `Attachments` +- `Part` +- `SmtpLog` +- `Message` +- `Inbox` +- `PostedMessage` +- `StatsItem` +- `Stats` +- `TeamInfo` +- `Team` +- `Domain` +- `Domains` +- `ActionData` — added `toJSON()` for request serialization +- `ConditionData` — added `toJSON()` for request serialization +- `Action` — added `toJSON()` for request serialization +- `Condition` — added `toJSON()` for request serialization +- `Rule` +- `Rules` +- `RuleToCreate` — added `toJSON()` (request body only) +- `Webhook` — added `toJSON()` (request body only) +- `MessageToPost` — added `toJSON()` (request body only) + +#### Request classes — Jersey now deserializes to `String` and `fromJson` is used instead of POJO binding + +- **authenticator**: `GetAuthenticatorByIdRequest`, `GetAuthenticatorsByIdRequest`, `GetAuthenticatorRequest`, `GetAuthenticatorsRequest`, `InstantTOTP2FACodeRequest` +- **domain**: `CreateDomainRequest`, `DeleteDomainRequest`, `GetDomainRequest`, `GetDomainsRequest` +- **message**: `DeleteDomainMessagesRequest`, `DeleteInboxMessagesRequest`, `DeleteMessageRequest`, `GetInboxMessageAttachmentsRequest`, `GetInboxMessageLinksRequest`, `GetInboxMessageRequest`, `GetInboxMessageSmtpLogRequest`, `GetInboxRequest`, `GetLatestInboxMessagesRequest`, `GetLatestMessagesRequest`, `GetMessageAttachmentsRequest`, `GetMessageLinksFullRequest`, `GetMessageLinksRequest`, `GetMessageRequest`, `GetMessageSmtpLogRequest`, `GetSmsInboxRequest`, `PostMessageRequest` +- **rule**: `CreateRuleRequest`, `DeleteRuleRequest`, `DisableRuleRequest`, `EnableRuleRequest`, `GetRuleRequest`, `GetRulesRequest` +- **stats**: `GetStatsRequest`, `GetTeamInfoRequest`, `GetTeamRequest` +- **webhook**: `PrivateWebhookRequest`, `PrivateInboxWebhookRequest`, `PrivateCustomServiceWebhookRequest`, `PrivateCustomServiceInboxWebhookRequest` + +### Fixed + +- Removed reference to `JacksonObjectMapperProvider` class that was missing from the codebase, which would have caused a compilation failure. + +--- + +## [2.2.0] - prior release + +- Initial public release of the Mailinator Java Client SDK. diff --git a/pom.xml b/pom.xml index db376dd..c194e1a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.manybrain mailinator-client - 2.2 + 2.5.1 ${project.groupId}:${project.artifactId} https://www.mailinator.com/ Java client @@ -85,9 +85,9 @@ ${org.glassfish.jersey.version} - org.glassfish.jersey.media - jersey-media-json-jackson - ${org.glassfish.jersey.version} + com.googlecode.json-simple + json-simple + 1.1.1 org.glassfish.jersey.inject @@ -132,6 +132,12 @@ + + + src/main/resources + true + + org.apache.maven.plugins diff --git a/src/main/java/com/manybrain/mailinator/client/JacksonObjectMapperProvider.java b/src/main/java/com/manybrain/mailinator/client/JacksonObjectMapperProvider.java deleted file mode 100644 index 8b94f42..0000000 --- a/src/main/java/com/manybrain/mailinator/client/JacksonObjectMapperProvider.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.manybrain.mailinator.client; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import jakarta.ws.rs.ext.ContextResolver; -import jakarta.ws.rs.ext.Provider; - -@Provider -public class JacksonObjectMapperProvider implements ContextResolver { - - private final ObjectMapper objectMapper; - - public JacksonObjectMapperProvider() { - objectMapper = new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - } - - @Override - public ObjectMapper getContext(Class type) { - return objectMapper; - } -} diff --git a/src/main/java/com/manybrain/mailinator/client/JerseyClient.java b/src/main/java/com/manybrain/mailinator/client/JerseyClient.java index ab494b8..b9e85bc 100644 --- a/src/main/java/com/manybrain/mailinator/client/JerseyClient.java +++ b/src/main/java/com/manybrain/mailinator/client/JerseyClient.java @@ -1,5 +1,8 @@ package com.manybrain.mailinator.client; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -11,7 +14,6 @@ import lombok.NoArgsConstructor; import org.glassfish.jersey.client.ClientProperties; -import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.logging.LoggingFeature; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -19,21 +21,36 @@ public class JerseyClient { public static final String BASE_URL = "https://api.mailinator.com/api/v2"; - public static final String USER_AGENT = "Mailinator SDK - Java V2.2"; - - // Define a filter to set the User-Agent header + public static final String USER_AGENT = "Mailinator SDK - Java V" + readVersion(); + + private static String readVersion() + { + try (InputStream is = JerseyClient.class.getResourceAsStream("/mailinator-sdk.properties")) + { + if (is != null) + { + Properties props = new Properties(); + props.load(is); + return props.getProperty("version", "unknown"); + } + } + catch (IOException e) + { + // fall through to default + } + return "unknown"; + } + private static final ClientRequestFilter USER_AGENT_FILTER = requestContext -> { requestContext.getHeaders().add("User-Agent", USER_AGENT); }; public static final Client CLIENT = ClientBuilder.newClient() - .property(ClientProperties.READ_TIMEOUT, (int) TimeUnit.SECONDS.toMillis(125)) // Set read timeout to 65 sec + .property(ClientProperties.READ_TIMEOUT, (int) TimeUnit.SECONDS.toMillis(125)) .register(new LoggingFeature(Logger.getLogger( JerseyClient.class.getPackage().getName()), Level.SEVERE, null, null)) - .register(new JacksonFeature()) - .register(new JacksonObjectMapperProvider()) .register(USER_AGENT_FILTER); } diff --git a/src/main/java/com/manybrain/mailinator/client/JsonUtils.java b/src/main/java/com/manybrain/mailinator/client/JsonUtils.java new file mode 100644 index 0000000..1062f1d --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/JsonUtils.java @@ -0,0 +1,86 @@ +package com.manybrain.mailinator.client; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; +import org.json.simple.parser.ParseException; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class JsonUtils { + + public static JSONObject parseObject(String json) { + try { + if (json == null || json.trim().isEmpty()) return null; + Object parsed = new JSONParser().parse(json); + if (parsed instanceof JSONObject) return (JSONObject) parsed; + return null; + } catch (ParseException e) { + throw new RuntimeException("Failed to parse JSON object", e); + } + } + + public static String getString(JSONObject obj, String key) { + if (obj == null) return null; + Object val = obj.get(key); + return val != null ? val.toString() : null; + } + + public static Integer getInteger(JSONObject obj, String key) { + if (obj == null) return null; + Object val = obj.get(key); + if (val == null) return null; + if (val instanceof Long) return ((Long) val).intValue(); + if (val instanceof Integer) return (Integer) val; + return Integer.parseInt(val.toString()); + } + + public static Long getLong(JSONObject obj, String key) { + if (obj == null) return null; + Object val = obj.get(key); + if (val == null) return null; + if (val instanceof Long) return (Long) val; + if (val instanceof Integer) return ((Integer) val).longValue(); + return Long.parseLong(val.toString()); + } + + public static Boolean getBoolean(JSONObject obj, String key) { + if (obj == null) return null; + Object val = obj.get(key); + if (val == null) return null; + if (val instanceof Boolean) return (Boolean) val; + return Boolean.parseBoolean(val.toString()); + } + + public static JSONObject getObject(JSONObject obj, String key) { + if (obj == null) return null; + return (JSONObject) obj.get(key); + } + + public static List getList(JSONObject obj, String key, Function mapper) { + if (obj == null) return null; + JSONArray arr = (JSONArray) obj.get(key); + if (arr == null) return null; + List list = new ArrayList<>(); + for (Object item : arr) { + list.add(mapper.apply((JSONObject) item)); + } + return list; + } + + public static List getStringList(JSONObject obj, String key) { + if (obj == null) return null; + JSONArray arr = (JSONArray) obj.get(key); + if (arr == null) return null; + List list = new ArrayList<>(); + for (Object item : arr) { + list.add(item != null ? item.toString() : null); + } + return list; + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/ResponseStatus.java b/src/main/java/com/manybrain/mailinator/client/ResponseStatus.java index c2ccebd..91bb2fc 100644 --- a/src/main/java/com/manybrain/mailinator/client/ResponseStatus.java +++ b/src/main/java/com/manybrain/mailinator/client/ResponseStatus.java @@ -1,15 +1,17 @@ package com.manybrain.mailinator.client; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class ResponseStatus { - - @JsonProperty("status") private String status; + public static ResponseStatus fromJson(JSONObject json) { + if (json == null) return null; + ResponseStatus r = new ResponseStatus(); + r.status = JsonUtils.getString(json, "status"); + return r; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/authenticator/Authenticator.java b/src/main/java/com/manybrain/mailinator/client/authenticator/Authenticator.java index c17aaca..a48ebbe 100644 --- a/src/main/java/com/manybrain/mailinator/client/authenticator/Authenticator.java +++ b/src/main/java/com/manybrain/mailinator/client/authenticator/Authenticator.java @@ -1,23 +1,27 @@ package com.manybrain.mailinator.client.authenticator; -import java.util.List; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.List; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class Authenticator { + private String id; + private Integer timeStep; + private List futureCodes; + private Integer nextResetSeconds; + private String passcode; - @JsonProperty("id") - private String Id; - @JsonProperty("time_step") - public Integer TimeStep; - @JsonProperty("futurecodes") - public List FutureCodes; - @JsonProperty("next_reset_secs") - public Integer NextResetSeconds; - @JsonProperty("passcode") - public String Passcode; - + public static Authenticator fromJson(JSONObject json) { + if (json == null) return null; + Authenticator a = new Authenticator(); + a.id = JsonUtils.getString(json, "id"); + a.timeStep = JsonUtils.getInteger(json, "time_step"); + a.futureCodes = JsonUtils.getStringList(json, "futurecodes"); + a.nextResetSeconds = JsonUtils.getInteger(json, "next_reset_secs"); + a.passcode = JsonUtils.getString(json, "passcode"); + return a; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorByIdRequest.java b/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorByIdRequest.java index bb09ea2..dc19058 100644 --- a/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorByIdRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorByIdRequest.java @@ -6,10 +6,16 @@ import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; import lombok.RequiredArgsConstructor; +/** + * @deprecated This endpoint is not present in the current OpenAPI specification and may be removed in a future release. + * Use {@link GetAuthenticatorsByIdRequest} instead. + */ +@Deprecated @RequiredArgsConstructor public class GetAuthenticatorByIdRequest implements Request { @@ -24,8 +30,9 @@ public class GetAuthenticatorByIdRequest implements Request { public Authenticator execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("auth_id", emptyIfNull(Id)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) - .get(Authenticator.class); + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) + .get(String.class); + return Authenticator.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorRequest.java b/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorRequest.java index c7a5097..ba36c49 100644 --- a/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorRequest.java @@ -4,11 +4,17 @@ import static com.manybrain.mailinator.client.JerseyClient.CLIENT; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; import lombok.RequiredArgsConstructor; +/** + * @deprecated This endpoint is not present in the current OpenAPI specification and may be removed in a future release. + * Use {@link GetAuthenticatorsByIdRequest} for authenticator lookup by ID. + */ +@Deprecated @RequiredArgsConstructor public class GetAuthenticatorRequest implements Request { @@ -18,8 +24,9 @@ public class GetAuthenticatorRequest implements Request { public Authenticator execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("auth_id", emptyIfNull(Id)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) - .get(Authenticator.class); + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) + .get(String.class); + return Authenticator.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsRequest.java b/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsRequest.java index 6db9863..8f296e9 100644 --- a/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsRequest.java @@ -5,9 +5,14 @@ import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.RequiredArgsConstructor; +/** + * @deprecated This endpoint is not present in the current OpenAPI specification and may be removed in a future release. + */ +@Deprecated @RequiredArgsConstructor public class GetAuthenticatorsRequest implements Request { @@ -17,8 +22,9 @@ public class GetAuthenticatorsRequest implements Request passcodes; - @JsonProperty("passcodes") - private List Passcodes; - + public static GetAuthenticatorsResponse fromJson(JSONObject json) { + if (json == null) return null; + GetAuthenticatorsResponse r = new GetAuthenticatorsResponse(); + r.passcodes = JsonUtils.getList(json, "passcodes", Authenticator::fromJson); + return r; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/authenticator/InstantTOTP2FACodeRequest.java b/src/main/java/com/manybrain/mailinator/client/authenticator/InstantTOTP2FACodeRequest.java index c9ce21b..277426c 100644 --- a/src/main/java/com/manybrain/mailinator/client/authenticator/InstantTOTP2FACodeRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/authenticator/InstantTOTP2FACodeRequest.java @@ -6,6 +6,7 @@ import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -24,8 +25,9 @@ public class InstantTOTP2FACodeRequest implements Request futureCodes; + private Integer nextResetSeconds; + private String passcode; - @JsonProperty("time_step") - private Integer TimeStep; - @JsonProperty("futurecodes") - private List FutureCodes; - @JsonProperty("next_reset_secs") - private Integer NextResetSeconds; - @JsonProperty("passcode") - private String Passcode; - + public static InstantTOTP2FACodeResponse fromJson(JSONObject json) { + if (json == null) return null; + InstantTOTP2FACodeResponse r = new InstantTOTP2FACodeResponse(); + r.timeStep = JsonUtils.getInteger(json, "time_step"); + r.futureCodes = JsonUtils.getStringList(json, "futurecodes"); + r.nextResetSeconds = JsonUtils.getInteger(json, "next_reset_secs"); + r.passcode = JsonUtils.getString(json, "passcode"); + return r; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/domain/CreateDomainRequest.java b/src/main/java/com/manybrain/mailinator/client/domain/CreateDomainRequest.java index 1705187..5830c50 100644 --- a/src/main/java/com/manybrain/mailinator/client/domain/CreateDomainRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/domain/CreateDomainRequest.java @@ -7,12 +7,17 @@ import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import com.manybrain.mailinator.client.ResponseStatus; import lombok.NonNull; import lombok.RequiredArgsConstructor; +/** + * @deprecated Domain creation via the SDK has been deprecated. Use the Mailinator web UI instead. + */ +@Deprecated @RequiredArgsConstructor public class CreateDomainRequest implements Request { @@ -27,9 +32,10 @@ public class CreateDomainRequest implements Request { public ResponseStatus execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(domainId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .post(Entity.json(""), ResponseStatus.class); + .post(Entity.json(""), String.class); + return ResponseStatus.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/domain/DeleteDomainRequest.java b/src/main/java/com/manybrain/mailinator/client/domain/DeleteDomainRequest.java index 98a548c..481b7fe 100644 --- a/src/main/java/com/manybrain/mailinator/client/domain/DeleteDomainRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/domain/DeleteDomainRequest.java @@ -6,12 +6,17 @@ import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import com.manybrain.mailinator.client.ResponseStatus; import lombok.NonNull; import lombok.RequiredArgsConstructor; +/** + * @deprecated Domain deletion via the SDK has been deprecated. Use the Mailinator web UI instead. + */ +@Deprecated @RequiredArgsConstructor public class DeleteDomainRequest implements Request { @@ -26,8 +31,9 @@ public class DeleteDomainRequest implements Request { public ResponseStatus execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(domainId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) - .delete(ResponseStatus.class); + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) + .delete(String.class); + return ResponseStatus.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/domain/Domain.java b/src/main/java/com/manybrain/mailinator/client/domain/Domain.java index 20f7861..65bfb8f 100644 --- a/src/main/java/com/manybrain/mailinator/client/domain/Domain.java +++ b/src/main/java/com/manybrain/mailinator/client/domain/Domain.java @@ -1,26 +1,30 @@ package com.manybrain.mailinator.client.domain; -import java.util.List; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.rule.Rule; import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.List; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class Domain { + private String id; + private String description; + private Boolean enabled; + private String name; + private String ownerid; + private List rules; - @JsonProperty("_id") - private String id; - @JsonProperty("description") - private String description; - @JsonProperty("enabled") - private Boolean enabled; - @JsonProperty("name") - private String name; - @JsonProperty("ownerid") - private String ownerid; - @JsonProperty("rules") - private List rules; - + public static Domain fromJson(JSONObject json) { + if (json == null) return null; + Domain d = new Domain(); + d.id = JsonUtils.getString(json, "_id"); + d.description = JsonUtils.getString(json, "description"); + d.enabled = JsonUtils.getBoolean(json, "enabled"); + d.name = JsonUtils.getString(json, "name"); + d.ownerid = JsonUtils.getString(json, "ownerid"); + d.rules = JsonUtils.getList(json, "rules", Rule::fromJson); + return d; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/domain/Domains.java b/src/main/java/com/manybrain/mailinator/client/domain/Domains.java index 31d06d2..9e24645 100644 --- a/src/main/java/com/manybrain/mailinator/client/domain/Domains.java +++ b/src/main/java/com/manybrain/mailinator/client/domain/Domains.java @@ -1,16 +1,20 @@ package com.manybrain.mailinator.client.domain; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.List; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class Domains { - - @JsonProperty("domains") private List domains; + + public static Domains fromJson(JSONObject json) { + if (json == null) return null; + Domains d = new Domains(); + d.domains = JsonUtils.getList(json, "domains", Domain::fromJson); + return d; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/domain/GetDomainRequest.java b/src/main/java/com/manybrain/mailinator/client/domain/GetDomainRequest.java index 54a73b3..9543b5c 100644 --- a/src/main/java/com/manybrain/mailinator/client/domain/GetDomainRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/domain/GetDomainRequest.java @@ -6,6 +6,7 @@ import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -24,8 +25,9 @@ public class GetDomainRequest implements Request { public Domain execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(domainId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) - .get(Domain.class); + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) + .get(String.class); + return Domain.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/domain/GetDomainsRequest.java b/src/main/java/com/manybrain/mailinator/client/domain/GetDomainsRequest.java index 2cb7044..90a5b15 100644 --- a/src/main/java/com/manybrain/mailinator/client/domain/GetDomainsRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/domain/GetDomainsRequest.java @@ -5,18 +5,20 @@ import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; public class GetDomainsRequest implements Request { - private static final String URL = BASE_URL + "/domains/"; + private static final String URL = BASE_URL + "/domains"; private static final WebTarget WEB_TARGET = CLIENT.target(URL); @Override public Domains execute(String apiToken) { - return WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) - .get(Domains.class); + String response = WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) + .get(String.class); + return Domains.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/message/Attachment.java b/src/main/java/com/manybrain/mailinator/client/message/Attachment.java index d4bb5cc..c47d0bd 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/Attachment.java +++ b/src/main/java/com/manybrain/mailinator/client/message/Attachment.java @@ -1,23 +1,26 @@ package com.manybrain.mailinator.client.message; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class Attachment { - - @JsonProperty("filename") private String filename; - @JsonProperty("content-disposition") private String contentDisposition; - @JsonProperty("content-transfer-encoding") private String contentTransferEncoding; - @JsonProperty("content-type") private String contentType; - @JsonProperty("attachment-id") private Integer attachmentId; + public static Attachment fromJson(JSONObject json) { + if (json == null) return null; + Attachment a = new Attachment(); + a.filename = JsonUtils.getString(json, "filename"); + a.contentDisposition = JsonUtils.getString(json, "content-disposition"); + a.contentTransferEncoding = JsonUtils.getString(json, "content-transfer-encoding"); + a.contentType = JsonUtils.getString(json, "content-type"); + a.attachmentId = JsonUtils.getInteger(json, "attachment-id"); + return a; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/message/Attachments.java b/src/main/java/com/manybrain/mailinator/client/message/Attachments.java index bbfb06f..59ed727 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/Attachments.java +++ b/src/main/java/com/manybrain/mailinator/client/message/Attachments.java @@ -1,16 +1,20 @@ package com.manybrain.mailinator.client.message; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.List; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class Attachments { - @JsonProperty("attachments") private List attachments; + public static Attachments fromJson(JSONObject json) { + if (json == null) return null; + Attachments a = new Attachments(); + a.attachments = JsonUtils.getList(json, "attachments", Attachment::fromJson); + return a; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/message/DeleteDomainMessagesRequest.java b/src/main/java/com/manybrain/mailinator/client/message/DeleteDomainMessagesRequest.java index 5fb2a74..becfe5a 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/DeleteDomainMessagesRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/DeleteDomainMessagesRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; @@ -30,9 +31,10 @@ public DeletedMessages execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .delete(DeletedMessages.class); + .delete(String.class); + return DeletedMessages.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/DeleteInboxMessagesRequest.java b/src/main/java/com/manybrain/mailinator/client/message/DeleteInboxMessagesRequest.java index 474b090..3bfde38 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/DeleteInboxMessagesRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/DeleteInboxMessagesRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; @@ -33,9 +34,10 @@ public DeletedMessages execute(String apiToken) WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("inbox", emptyIfNull(inbox)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .delete(DeletedMessages.class); + .delete(String.class); + return DeletedMessages.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/DeleteMessageRequest.java b/src/main/java/com/manybrain/mailinator/client/message/DeleteMessageRequest.java index 8d08b93..0c84ee1 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/DeleteMessageRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/DeleteMessageRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; @@ -35,9 +36,10 @@ public DeletedMessages execute(String apiToken) .resolveTemplate("inbox", emptyIfNull(inbox)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .delete(DeletedMessages.class); + .delete(String.class); + return DeletedMessages.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/DeletedMessages.java b/src/main/java/com/manybrain/mailinator/client/message/DeletedMessages.java index 79fbf4c..e8abf6b 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/DeletedMessages.java +++ b/src/main/java/com/manybrain/mailinator/client/message/DeletedMessages.java @@ -1,16 +1,19 @@ package com.manybrain.mailinator.client.message; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class DeletedMessages { + private String status; + private Integer count; - @JsonProperty("status") - private String status; - @JsonProperty("count") - private Integer count; - + public static DeletedMessages fromJson(JSONObject json) { + if (json == null) return null; + DeletedMessages d = new DeletedMessages(); + d.status = JsonUtils.getString(json, "status"); + d.count = JsonUtils.getInteger(json, "count"); + return d; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/message/EmailLogEntry.java b/src/main/java/com/manybrain/mailinator/client/message/EmailLogEntry.java index 480c037..7093a2a 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/EmailLogEntry.java +++ b/src/main/java/com/manybrain/mailinator/client/message/EmailLogEntry.java @@ -1,21 +1,21 @@ package com.manybrain.mailinator.client.message; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class EmailLogEntry { + private String log; + private String time; + private String event; - @JsonProperty("log") - private String log; - @JsonProperty("time") - private String time; - @JsonProperty("event") - private String event; - + public static EmailLogEntry fromJson(JSONObject json) { + if (json == null) return null; + EmailLogEntry e = new EmailLogEntry(); + e.log = JsonUtils.getString(json, "log"); + e.time = JsonUtils.getString(json, "time"); + e.event = JsonUtils.getString(json, "event"); + return e; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageAttachmentsRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageAttachmentsRequest.java index 4027b7b..9239ba5 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageAttachmentsRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageAttachmentsRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; @@ -35,9 +36,10 @@ public Attachments execute(String apiToken) .resolveTemplate("inbox", emptyIfNull(inbox)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Attachments.class); + .get(String.class); + return Attachments.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageLinksRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageLinksRequest.java index 8940e3e..1ee776a 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageLinksRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageLinksRequest.java @@ -6,6 +6,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -35,9 +36,10 @@ public Links execute(String apiToken) .resolveTemplate("inbox", emptyIfNull(inbox)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Links.class); + .get(String.class); + return Links.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageRequest.java index e8f3636..2500708 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageRequest.java @@ -3,8 +3,11 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -13,7 +16,9 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +@Builder @RequiredArgsConstructor +@AllArgsConstructor public class GetInboxMessageRequest implements Request { @@ -29,15 +34,23 @@ public class GetInboxMessageRequest @NonNull private final String messageId; + private String delete; + public Message execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("inbox", emptyIfNull(inbox)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + if (delete != null) + { + webTarget = webTarget.queryParam("delete", delete); + } + + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Message.class); + .get(String.class); + return Message.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageSmtpLogRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageSmtpLogRequest.java index 25cacf5..148000c 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageSmtpLogRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageSmtpLogRequest.java @@ -6,6 +6,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -35,9 +36,10 @@ public SmtpLog execute(String apiToken) .resolveTemplate("inbox", emptyIfNull(inbox)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(SmtpLog.class); + .get(String.class); + return SmtpLog.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetInboxRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetInboxRequest.java index e47f9ca..ad62768 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetInboxRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetInboxRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.AllArgsConstructor; @@ -50,7 +51,7 @@ public class GetInboxRequest public Inbox execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) - .resolveTemplate("inbox", emptyIfNull(inbox)); + .resolveTemplate("inbox", inbox != null ? inbox : "*"); if (skip != null) { @@ -85,9 +86,10 @@ public Inbox execute(String apiToken) webTarget = webTarget.queryParam("wait", wait); } - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Inbox.class); + .get(String.class); + return Inbox.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetLatestInboxMessagesRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetLatestInboxMessagesRequest.java index c234640..2ec2b48 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetLatestInboxMessagesRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetLatestInboxMessagesRequest.java @@ -7,6 +7,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -14,6 +15,11 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated This endpoint is not present in the current OpenAPI specification and is known to return server errors. + * Use {@link GetInboxRequest} instead. + */ +@Deprecated @RequiredArgsConstructor public class GetLatestInboxMessagesRequest implements Request @@ -33,9 +39,10 @@ public Inbox execute(String apiToken) WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("inbox", emptyIfNull(inbox)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Inbox.class); + .get(String.class); + return Inbox.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetLatestMessagesRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetLatestMessagesRequest.java index 4eea996..dc61920 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetLatestMessagesRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetLatestMessagesRequest.java @@ -6,6 +6,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -13,6 +14,11 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated This endpoint is not present in the current OpenAPI specification and is known to return server errors. + * Use {@link GetInboxRequest} instead. + */ +@Deprecated @RequiredArgsConstructor public class GetLatestMessagesRequest implements Request @@ -29,9 +35,10 @@ public Inbox execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Inbox.class); + .get(String.class); + return Inbox.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageAttachmentsRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageAttachmentsRequest.java index 37007de..7061711 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetMessageAttachmentsRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageAttachmentsRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; @@ -32,9 +33,10 @@ public Attachments execute(String apiToken) WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Attachments.class); + .get(String.class); + return Attachments.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageHeadersRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageHeadersRequest.java new file mode 100644 index 0000000..ca59318 --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageHeadersRequest.java @@ -0,0 +1,41 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; + +import com.manybrain.mailinator.client.JsonUtils; +import com.manybrain.mailinator.client.Request; + +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; +import static com.manybrain.mailinator.client.JerseyClient.CLIENT; +import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; + +@RequiredArgsConstructor +public class GetMessageHeadersRequest + implements Request +{ + + private static final String URL = BASE_URL + "/domains/{domain}/messages/{message_id}/headers"; + + private static final WebTarget WEB_TARGET = CLIENT.target(URL); + + @NonNull + private final String domain; + @NonNull + private final String messageId; + + public MessageHeadersResponse execute(String apiToken) + { + String response = WEB_TARGET + .resolveTemplate("domain", emptyIfNull(domain)) + .resolveTemplate("message_id", emptyIfNull(messageId)) + .request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return MessageHeadersResponse.fromJson(JsonUtils.parseObject(response)); + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksFullRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksFullRequest.java index 6c29140..1dc8292 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksFullRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksFullRequest.java @@ -6,6 +6,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -32,9 +33,10 @@ public LinksFull execute(String apiToken) WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(LinksFull.class); + .get(String.class); + return LinksFull.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksRequest.java index 7a4d65b..23169da 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksRequest.java @@ -6,6 +6,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -32,9 +33,10 @@ public Links execute(String apiToken) WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Links.class); + .get(String.class); + return Links.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageRequest.java index bf8df75..4a7a614 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetMessageRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.AllArgsConstructor; @@ -43,9 +44,10 @@ public Message execute(String apiToken) webTarget = webTarget.queryParam("delete", delete); } - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Message.class); + .get(String.class); + return Message.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageSmtpLogRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageSmtpLogRequest.java index 53e13c5..23a5523 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetMessageSmtpLogRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageSmtpLogRequest.java @@ -6,6 +6,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -32,9 +33,10 @@ public SmtpLog execute(String apiToken) WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("message_id", emptyIfNull(messageId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(SmtpLog.class); + .get(String.class); + return SmtpLog.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequest.java new file mode 100644 index 0000000..f862095 --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequest.java @@ -0,0 +1,41 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; + +import com.manybrain.mailinator.client.JsonUtils; +import com.manybrain.mailinator.client.Request; + +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; +import static com.manybrain.mailinator.client.JerseyClient.CLIENT; +import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; + +@RequiredArgsConstructor +public class GetMessageSummaryRequest + implements Request +{ + + private static final String URL = BASE_URL + "/domains/{domain}/messages/{message_id}/summary"; + + private static final WebTarget WEB_TARGET = CLIENT.target(URL); + + @NonNull + private final String domain; + @NonNull + private final String messageId; + + public MessageSummaryResponse execute(String apiToken) + { + String response = WEB_TARGET + .resolveTemplate("domain", emptyIfNull(domain)) + .resolveTemplate("message_id", emptyIfNull(messageId)) + .request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return MessageSummaryResponse.fromJson(JsonUtils.parseObject(response)); + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequest.java new file mode 100644 index 0000000..f2b36bf --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequest.java @@ -0,0 +1,43 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; + +import com.manybrain.mailinator.client.JsonUtils; +import com.manybrain.mailinator.client.Request; + +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import org.json.simple.JSONObject; + +import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; +import static com.manybrain.mailinator.client.JerseyClient.CLIENT; +import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; + +@RequiredArgsConstructor +public class GetMessageTextHtmlRequest + implements Request +{ + + private static final String URL = BASE_URL + "/domains/{domain}/messages/{message_id}/texthtml"; + + private static final WebTarget WEB_TARGET = CLIENT.target(URL); + + @NonNull + private final String domain; + @NonNull + private final String messageId; + + public JSONObject execute(String apiToken) + { + String response = WEB_TARGET + .resolveTemplate("domain", emptyIfNull(domain)) + .resolveTemplate("message_id", emptyIfNull(messageId)) + .request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return JsonUtils.parseObject(response); + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequest.java new file mode 100644 index 0000000..f0dcaeb --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequest.java @@ -0,0 +1,43 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; + +import com.manybrain.mailinator.client.JsonUtils; +import com.manybrain.mailinator.client.Request; + +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import org.json.simple.JSONObject; + +import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; +import static com.manybrain.mailinator.client.JerseyClient.CLIENT; +import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; + +@RequiredArgsConstructor +public class GetMessageTextPlainRequest + implements Request +{ + + private static final String URL = BASE_URL + "/domains/{domain}/messages/{message_id}/textplain"; + + private static final WebTarget WEB_TARGET = CLIENT.target(URL); + + @NonNull + private final String domain; + @NonNull + private final String messageId; + + public JSONObject execute(String apiToken) + { + String response = WEB_TARGET + .resolveTemplate("domain", emptyIfNull(domain)) + .resolveTemplate("message_id", emptyIfNull(messageId)) + .request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return JsonUtils.parseObject(response); + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextRequest.java new file mode 100644 index 0000000..7f20c4f --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/GetMessageTextRequest.java @@ -0,0 +1,41 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; + +import com.manybrain.mailinator.client.JsonUtils; +import com.manybrain.mailinator.client.Request; + +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; +import static com.manybrain.mailinator.client.JerseyClient.CLIENT; +import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; + +@RequiredArgsConstructor +public class GetMessageTextRequest + implements Request +{ + + private static final String URL = BASE_URL + "/domains/{domain}/messages/{message_id}/text"; + + private static final WebTarget WEB_TARGET = CLIENT.target(URL); + + @NonNull + private final String domain; + @NonNull + private final String messageId; + + public MessageTextResponse execute(String apiToken) + { + String response = WEB_TARGET + .resolveTemplate("domain", emptyIfNull(domain)) + .resolveTemplate("message_id", emptyIfNull(messageId)) + .request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return MessageTextResponse.fromJson(JsonUtils.parseObject(response)); + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetSmsInboxRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetSmsInboxRequest.java index 65629c0..854ccad 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/GetSmsInboxRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/GetSmsInboxRequest.java @@ -3,8 +3,11 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -14,7 +17,9 @@ import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +@Builder @RequiredArgsConstructor +@AllArgsConstructor public class GetSmsInboxRequest implements Request { @@ -28,14 +33,64 @@ public class GetSmsInboxRequest @NonNull private final String phoneNumber; + private Integer skip; + + private Integer limit; + + private Sort sort; + + private Boolean decodeSubject; + + private String cursor; + + private Boolean full; + + private String delete; + + private String wait; + public Inbox execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("phoneNumber", emptyIfNull(phoneNumber)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + if (skip != null) + { + webTarget = webTarget.queryParam("skip", skip); + } + if (limit != null) + { + webTarget = webTarget.queryParam("limit", limit); + } + if (sort != null) + { + webTarget = webTarget.queryParam("sort", sort.getType()); + } + if (decodeSubject != null) + { + webTarget = webTarget.queryParam("decode_subject", decodeSubject); + } + if (cursor != null) + { + webTarget = webTarget.queryParam("cursor", cursor); + } + if (full != null && full) + { + webTarget = webTarget.queryParam("full", full); + } + if (delete != null) + { + webTarget = webTarget.queryParam("delete", delete); + } + if (wait != null) + { + webTarget = webTarget.queryParam("wait", wait); + } + + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .get(Inbox.class); + .get(String.class); + return Inbox.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequest.java new file mode 100644 index 0000000..3403cca --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequest.java @@ -0,0 +1,80 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; + +import com.manybrain.mailinator.client.JsonUtils; +import com.manybrain.mailinator.client.Request; + +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import org.json.simple.JSONObject; + +import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; +import static com.manybrain.mailinator.client.JerseyClient.CLIENT; +import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; + +import java.util.Collections; + +/** + * Fetches the next message arriving in any inbox of a domain via the Mailinator stream endpoint. + *

+ * The server uses HTTP long-polling and sends newline-delimited JSON. Ping frames + * ({@code {"ping":...}}) are transparently skipped. The first real message is + * returned as an {@link Inbox}. + *

+ * URL: {@code GET /api/v2/domains/{domain}/stream} + */ +@RequiredArgsConstructor +public class GetStreamDomainMessagesRequest + implements Request +{ + + private static final String URL = BASE_URL + "/domains/{domain}/stream"; + + private static final WebTarget WEB_TARGET = CLIENT.target(URL); + + @NonNull + private final String domain; + + public Inbox execute(String apiToken) + { + String response = WEB_TARGET + .resolveTemplate("domain", emptyIfNull(domain)) + .request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + + return parseStreamResponse(response, domain); + } + + static Inbox parseStreamResponse(String response, String domain) + { + if (response == null) return null; + for (String line : response.split("\\n")) + { + String trimmed = line.trim(); + if (trimmed.isEmpty()) continue; + JSONObject json = JsonUtils.parseObject(trimmed); + if (json == null) continue; + if (json.containsKey("ping")) continue; + + // Already an inbox-shaped payload + if (json.containsKey("msgs")) + { + return Inbox.fromJson(json); + } + + // Single message payload — wrap it + Message msg = Message.fromJson(json); + Inbox inbox = new Inbox(); + inbox.setDomain(domain); + inbox.setTo(msg.getTo()); + inbox.setMsgs(Collections.singletonList(msg)); + return inbox; + } + return null; + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequest.java b/src/main/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequest.java new file mode 100644 index 0000000..266c532 --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequest.java @@ -0,0 +1,50 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.MediaType; + +import com.manybrain.mailinator.client.Request; + +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; +import static com.manybrain.mailinator.client.JerseyClient.CLIENT; +import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; + +/** + * Fetches the next message arriving in a specific inbox of a domain via the Mailinator stream endpoint. + *

+ * The server uses HTTP long-polling and sends newline-delimited JSON. Ping frames + * ({@code {"ping":...}}) are transparently skipped. The first real message is + * returned as an {@link Inbox}. + *

+ * URL: {@code GET /api/v2/domains/{domain}/stream/{inbox}} + */ +@RequiredArgsConstructor +public class GetStreamInboxMessagesRequest + implements Request +{ + + private static final String URL = BASE_URL + "/domains/{domain}/stream/{inbox}"; + + private static final WebTarget WEB_TARGET = CLIENT.target(URL); + + @NonNull + private final String domain; + @NonNull + private final String inbox; + + public Inbox execute(String apiToken) + { + String response = WEB_TARGET + .resolveTemplate("domain", emptyIfNull(domain)) + .resolveTemplate("inbox", emptyIfNull(inbox)) + .request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + + return GetStreamDomainMessagesRequest.parseStreamResponse(response, domain); + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/Inbox.java b/src/main/java/com/manybrain/mailinator/client/message/Inbox.java index c6d5fd3..20f4cfc 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/Inbox.java +++ b/src/main/java/com/manybrain/mailinator/client/message/Inbox.java @@ -1,26 +1,26 @@ - package com.manybrain.mailinator.client.message; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.List; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class Inbox { - - @JsonProperty("domain") private String domain; - @JsonProperty("to") private String to; - @JsonProperty("msgs") private List msgs; - @JsonProperty("cursor") private String cursor; + public static Inbox fromJson(JSONObject json) { + if (json == null) return null; + Inbox i = new Inbox(); + i.domain = JsonUtils.getString(json, "domain"); + i.to = JsonUtils.getString(json, "to"); + i.msgs = JsonUtils.getList(json, "msgs", Message::fromJson); + i.cursor = JsonUtils.getString(json, "cursor"); + return i; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/message/LinkEntity.java b/src/main/java/com/manybrain/mailinator/client/message/LinkEntity.java index 174895b..10d15a1 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/LinkEntity.java +++ b/src/main/java/com/manybrain/mailinator/client/message/LinkEntity.java @@ -1,18 +1,20 @@ package com.manybrain.mailinator.client.message; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class LinkEntity { - @JsonProperty("link") private String link; - @JsonProperty("text") private String text; - + + public static LinkEntity fromJson(JSONObject json) { + if (json == null) return null; + LinkEntity e = new LinkEntity(); + e.link = JsonUtils.getString(json, "link"); + e.text = JsonUtils.getString(json, "text"); + return e; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/message/Links.java b/src/main/java/com/manybrain/mailinator/client/message/Links.java index 5a6687c..2ccf5f7 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/Links.java +++ b/src/main/java/com/manybrain/mailinator/client/message/Links.java @@ -1,19 +1,19 @@ package com.manybrain.mailinator.client.message; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; import java.util.List; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class Links { + private List links; - @JsonProperty("links") - private List links; - + public static Links fromJson(JSONObject json) { + if (json == null) return null; + Links l = new Links(); + l.links = JsonUtils.getStringList(json, "links"); + return l; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/message/LinksFull.java b/src/main/java/com/manybrain/mailinator/client/message/LinksFull.java index f2c591f..c8b675b 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/LinksFull.java +++ b/src/main/java/com/manybrain/mailinator/client/message/LinksFull.java @@ -1,19 +1,19 @@ package com.manybrain.mailinator.client.message; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; import java.util.List; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class LinksFull { + private List links; - @JsonProperty("links") - private List links; - + public static LinksFull fromJson(JSONObject json) { + if (json == null) return null; + LinksFull l = new LinksFull(); + l.links = JsonUtils.getList(json, "links", LinkEntity::fromJson); + return l; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/message/Message.java b/src/main/java/com/manybrain/mailinator/client/message/Message.java index 57873be..1559ba7 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/Message.java +++ b/src/main/java/com/manybrain/mailinator/client/message/Message.java @@ -1,53 +1,56 @@ package com.manybrain.mailinator.client.message; +import com.manybrain.mailinator.client.JsonUtils; +import lombok.Data; +import org.json.simple.JSONObject; + import java.util.List; import java.util.Map; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Data; - @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class Message { - @JsonProperty("is_first_exchange") private Boolean isFirstExchange; - @JsonProperty("fromfull") private String fromfull; - @JsonProperty("headers") private Map headers; - @JsonProperty("subject") private String subject; - @JsonProperty("parts") private List parts; - @JsonProperty("from") private String from; - @JsonProperty("to") private String to; - @JsonProperty("id") private String id; - @JsonProperty("time") private Long time; - @JsonProperty("seconds_ago") private Long secondsAgo; - @JsonProperty("domain") private String domain; - @JsonProperty("origfrom") private String origfrom; - @JsonProperty("mrid") private String mrid; - @JsonProperty("size") private Integer size; - @JsonProperty("stream") private String stream; - @JsonProperty("msg_type") private String msgType; - @JsonProperty("source") private String source; - @JsonProperty("text") private String text; + @SuppressWarnings("unchecked") + public static Message fromJson(JSONObject json) { + if (json == null) return null; + Message m = new Message(); + m.isFirstExchange = JsonUtils.getBoolean(json, "is_first_exchange"); + m.fromfull = JsonUtils.getString(json, "fromfull"); + m.headers = (JSONObject) json.get("headers"); + m.subject = JsonUtils.getString(json, "subject"); + m.parts = JsonUtils.getList(json, "parts", Part::fromJson); + m.from = JsonUtils.getString(json, "from"); + m.to = JsonUtils.getString(json, "to"); + m.id = JsonUtils.getString(json, "id"); + m.time = JsonUtils.getLong(json, "time"); + m.secondsAgo = JsonUtils.getLong(json, "seconds_ago"); + m.domain = JsonUtils.getString(json, "domain"); + m.origfrom = JsonUtils.getString(json, "origfrom"); + m.mrid = JsonUtils.getString(json, "mrid"); + m.size = JsonUtils.getInteger(json, "size"); + m.stream = JsonUtils.getString(json, "stream"); + m.msgType = JsonUtils.getString(json, "msg_type"); + m.source = JsonUtils.getString(json, "source"); + m.text = JsonUtils.getString(json, "text"); + return m; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/message/MessageHeadersResponse.java b/src/main/java/com/manybrain/mailinator/client/message/MessageHeadersResponse.java new file mode 100644 index 0000000..fd42d5f --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/MessageHeadersResponse.java @@ -0,0 +1,21 @@ +package com.manybrain.mailinator.client.message; + +import com.manybrain.mailinator.client.JsonUtils; +import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.Map; + +@Data +public class MessageHeadersResponse +{ + private Map headers; + + @SuppressWarnings("unchecked") + public static MessageHeadersResponse fromJson(JSONObject json) { + if (json == null) return null; + MessageHeadersResponse r = new MessageHeadersResponse(); + r.headers = (JSONObject) json.get("headers"); + return r; + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/MessageSummary.java b/src/main/java/com/manybrain/mailinator/client/message/MessageSummary.java new file mode 100644 index 0000000..22a7e43 --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/MessageSummary.java @@ -0,0 +1,34 @@ +package com.manybrain.mailinator.client.message; + +import com.manybrain.mailinator.client.JsonUtils; +import lombok.Data; +import org.json.simple.JSONObject; + +@Data +public class MessageSummary +{ + private String id; + private String subject; + private String domain; + private String from; + private String origfrom; + private String to; + private Long time; + private Long secondsAgo; + private String source; + + public static MessageSummary fromJson(JSONObject json) { + if (json == null) return null; + MessageSummary s = new MessageSummary(); + s.id = JsonUtils.getString(json, "id"); + s.subject = JsonUtils.getString(json, "subject"); + s.domain = JsonUtils.getString(json, "domain"); + s.from = JsonUtils.getString(json, "from"); + s.origfrom = JsonUtils.getString(json, "origfrom"); + s.to = JsonUtils.getString(json, "to"); + s.time = JsonUtils.getLong(json, "time"); + s.secondsAgo = JsonUtils.getLong(json, "seconds_ago"); + s.source = JsonUtils.getString(json, "source"); + return s; + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/MessageSummaryResponse.java b/src/main/java/com/manybrain/mailinator/client/message/MessageSummaryResponse.java new file mode 100644 index 0000000..69f87d6 --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/MessageSummaryResponse.java @@ -0,0 +1,18 @@ +package com.manybrain.mailinator.client.message; + +import com.manybrain.mailinator.client.JsonUtils; +import lombok.Data; +import org.json.simple.JSONObject; + +@Data +public class MessageSummaryResponse +{ + private MessageSummary summary; + + public static MessageSummaryResponse fromJson(JSONObject json) { + if (json == null) return null; + MessageSummaryResponse r = new MessageSummaryResponse(); + r.summary = MessageSummary.fromJson(JsonUtils.getObject(json, "summary")); + return r; + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/MessageTextResponse.java b/src/main/java/com/manybrain/mailinator/client/message/MessageTextResponse.java new file mode 100644 index 0000000..1d0aaad --- /dev/null +++ b/src/main/java/com/manybrain/mailinator/client/message/MessageTextResponse.java @@ -0,0 +1,18 @@ +package com.manybrain.mailinator.client.message; + +import com.manybrain.mailinator.client.JsonUtils; +import lombok.Data; +import org.json.simple.JSONObject; + +@Data +public class MessageTextResponse +{ + private String text; + + public static MessageTextResponse fromJson(JSONObject json) { + if (json == null) return null; + MessageTextResponse r = new MessageTextResponse(); + r.text = JsonUtils.getString(json, "text"); + return r; + } +} diff --git a/src/main/java/com/manybrain/mailinator/client/message/MessageToPost.java b/src/main/java/com/manybrain/mailinator/client/message/MessageToPost.java index 8829294..653eab8 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/MessageToPost.java +++ b/src/main/java/com/manybrain/mailinator/client/message/MessageToPost.java @@ -1,24 +1,27 @@ package com.manybrain.mailinator.client.message; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NonNull; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) @AllArgsConstructor public class MessageToPost { - @NonNull - @JsonProperty("subject") private String subject; @NonNull - @JsonProperty("from") private String from; @NonNull - @JsonProperty("text") private String text; + + @SuppressWarnings("unchecked") + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + json.put("subject", subject); + json.put("from", from); + json.put("text", text); + return json; + } } diff --git a/src/main/java/com/manybrain/mailinator/client/message/Part.java b/src/main/java/com/manybrain/mailinator/client/message/Part.java index 93a628e..fbb4a17 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/Part.java +++ b/src/main/java/com/manybrain/mailinator/client/message/Part.java @@ -1,19 +1,23 @@ package com.manybrain.mailinator.client.message; -import java.util.Map; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.Map; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class Part { - - @JsonProperty("headers") private Map headers; - @JsonProperty("body") private String body; + @SuppressWarnings("unchecked") + public static Part fromJson(JSONObject json) { + if (json == null) return null; + Part p = new Part(); + p.headers = (JSONObject) json.get("headers"); + p.body = JsonUtils.getString(json, "body"); + return p; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/message/PostMessageRequest.java b/src/main/java/com/manybrain/mailinator/client/message/PostMessageRequest.java index 07d38f1..9458548 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/PostMessageRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/message/PostMessageRequest.java @@ -7,6 +7,7 @@ import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; import lombok.RequiredArgsConstructor; @@ -30,8 +31,9 @@ public PostedMessage execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain", emptyIfNull(domain)) .resolveTemplate("inbox", emptyIfNull(inbox)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) - .post(Entity.json(message), PostedMessage.class); + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE).header(AUTHORIZATION, apiToken) + .post(Entity.entity(message.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); + return PostedMessage.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/message/PostedMessage.java b/src/main/java/com/manybrain/mailinator/client/message/PostedMessage.java index 9152c18..77f0414 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/PostedMessage.java +++ b/src/main/java/com/manybrain/mailinator/client/message/PostedMessage.java @@ -1,23 +1,25 @@ package com.manybrain.mailinator.client.message; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.rule.Rule; - import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.List; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) public class PostedMessage { - - @JsonProperty("status") private String status; - @JsonProperty("id") private String id; - @JsonProperty("rules_fired") private List rulesFired; + public static PostedMessage fromJson(JSONObject json) { + if (json == null) return null; + PostedMessage p = new PostedMessage(); + p.status = JsonUtils.getString(json, "status"); + p.id = JsonUtils.getString(json, "id"); + p.rulesFired = JsonUtils.getList(json, "rules_fired", Rule::fromJson); + return p; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/message/SmtpLog.java b/src/main/java/com/manybrain/mailinator/client/message/SmtpLog.java index 7568b67..42c9d56 100644 --- a/src/main/java/com/manybrain/mailinator/client/message/SmtpLog.java +++ b/src/main/java/com/manybrain/mailinator/client/message/SmtpLog.java @@ -1,25 +1,25 @@ package com.manybrain.mailinator.client.message; +import com.manybrain.mailinator.client.JsonUtils; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.json.simple.JSONObject; import java.util.List; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - @Data @Builder @NoArgsConstructor @AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class SmtpLog { + private List logEntries; - @JsonProperty("log") - private List logEntries; - + public static SmtpLog fromJson(JSONObject json) { + if (json == null) return null; + SmtpLog s = new SmtpLog(); + s.logEntries = JsonUtils.getList(json, "log", EmailLogEntry::fromJson); + return s; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/rule/Action.java b/src/main/java/com/manybrain/mailinator/client/rule/Action.java index 59d0c72..d8e1052 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/Action.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/Action.java @@ -1,26 +1,38 @@ package com.manybrain.mailinator.client.rule; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.json.simple.JSONObject; @Data @Builder @NoArgsConstructor @AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) public class Action { - - @JsonProperty("action") public ActionType action; - @JsonProperty("action_data") public ActionData actionData; - @JsonProperty("destination") public String destination; + public static Action fromJson(JSONObject json) { + if (json == null) return null; + Action a = new Action(); + String act = JsonUtils.getString(json, "action"); + a.action = act != null ? ActionType.valueOf(act) : null; + a.actionData = ActionData.fromJson(JsonUtils.getObject(json, "action_data")); + a.destination = JsonUtils.getString(json, "destination"); + return a; + } + @SuppressWarnings("unchecked") + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + if (action != null) json.put("action", action.name()); + if (actionData != null) json.put("action_data", actionData.toJSON()); + if (destination != null) json.put("destination", destination); + return json; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/rule/ActionData.java b/src/main/java/com/manybrain/mailinator/client/rule/ActionData.java index d4cafe3..21719fa 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/ActionData.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/ActionData.java @@ -1,21 +1,31 @@ package com.manybrain.mailinator.client.rule; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import org.json.simple.JSONObject; @Data @Builder @NoArgsConstructor @AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) public class ActionData { - - @JsonProperty("url") public String url; + public static ActionData fromJson(JSONObject json) { + if (json == null) return null; + ActionData a = new ActionData(); + a.url = JsonUtils.getString(json, "url"); + return a; + } + + @SuppressWarnings("unchecked") + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + if (url != null) json.put("url", url); + return json; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/rule/Condition.java b/src/main/java/com/manybrain/mailinator/client/rule/Condition.java index b6169c4..ec64574 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/Condition.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/Condition.java @@ -1,23 +1,34 @@ package com.manybrain.mailinator.client.rule; +import com.manybrain.mailinator.client.JsonUtils; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data @Builder @NoArgsConstructor @AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) public class Condition { + public OperationType operation; + public ConditionData conditionData; - @JsonProperty("operation") - public OperationType operation; - @JsonProperty("condition_data") - public ConditionData conditionData; + public static Condition fromJson(JSONObject json) { + if (json == null) return null; + Condition c = new Condition(); + String op = JsonUtils.getString(json, "operation"); + c.operation = op != null ? OperationType.valueOf(op) : null; + c.conditionData = ConditionData.fromJson(JsonUtils.getObject(json, "condition_data")); + return c; + } + @SuppressWarnings("unchecked") + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + if (operation != null) json.put("operation", operation.name()); + if (conditionData != null) json.put("condition_data", conditionData.toJSON()); + return json; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/rule/ConditionData.java b/src/main/java/com/manybrain/mailinator/client/rule/ConditionData.java index 35d628f..f75f14a 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/ConditionData.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/ConditionData.java @@ -1,27 +1,39 @@ package com.manybrain.mailinator.client.rule; +import com.manybrain.mailinator.client.JsonUtils; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data @Builder @NoArgsConstructor @AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) public class ConditionData { - - @JsonProperty("operation") public OperationType operation; @Builder.Default - @JsonProperty("field") public String field = "to"; - @JsonProperty("value") public String value; + public static ConditionData fromJson(JSONObject json) { + if (json == null) return null; + ConditionData c = new ConditionData(); + String op = JsonUtils.getString(json, "operation"); + c.operation = op != null ? OperationType.valueOf(op) : null; + c.field = JsonUtils.getString(json, "field"); + c.value = JsonUtils.getString(json, "value"); + return c; + } + + @SuppressWarnings("unchecked") + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + if (operation != null) json.put("operation", operation.name()); + if (field != null) json.put("field", field); + if (value != null) json.put("value", value); + return json; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/rule/CreateRuleRequest.java b/src/main/java/com/manybrain/mailinator/client/rule/CreateRuleRequest.java index bfe445f..89cf201 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/CreateRuleRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/CreateRuleRequest.java @@ -4,6 +4,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import lombok.NonNull; @@ -14,6 +15,10 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated Rules management endpoints have been deprecated and will be removed in a future release. + */ +@Deprecated @RequiredArgsConstructor public class CreateRuleRequest implements Request @@ -32,9 +37,10 @@ public Rule execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(domainId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .post(Entity.json(rule), Rule.class); + .post(Entity.entity(rule.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); + return Rule.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/rule/DeleteRuleRequest.java b/src/main/java/com/manybrain/mailinator/client/rule/DeleteRuleRequest.java index f534087..bcd5a9f 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/DeleteRuleRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/DeleteRuleRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import com.manybrain.mailinator.client.ResponseStatus; @@ -14,6 +15,10 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated Rules management endpoints have been deprecated and will be removed in a future release. + */ +@Deprecated @RequiredArgsConstructor public class DeleteRuleRequest implements Request @@ -34,9 +39,10 @@ public ResponseStatus execute(String apiToken) .resolveTemplate("domain_id", emptyIfNull(domainId)) .resolveTemplate("rule_id", emptyIfNull(ruleId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) + String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) .header(AUTHORIZATION, apiToken) - .delete(ResponseStatus.class); + .delete(String.class); + return ResponseStatus.fromJson(JsonUtils.parseObject(response)); } diff --git a/src/main/java/com/manybrain/mailinator/client/rule/DisableRuleRequest.java b/src/main/java/com/manybrain/mailinator/client/rule/DisableRuleRequest.java index 9cce937..0b50952 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/DisableRuleRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/DisableRuleRequest.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import jakarta.ws.rs.client.Entity; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import com.manybrain.mailinator.client.ResponseStatus; @@ -14,6 +15,10 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated Rules management endpoints have been deprecated and will be removed in a future release. + */ +@Deprecated @RequiredArgsConstructor public class DisableRuleRequest implements Request { @@ -30,9 +35,10 @@ public ResponseStatus execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(domainId)) .resolveTemplate("rule_id", emptyIfNull(ruleId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) - .header(AUTHORIZATION, apiToken) - .put(Entity.json("{}"), ResponseStatus.class); +String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .put(Entity.json("{}"), String.class); + return ResponseStatus.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/rule/EnableRuleRequest.java b/src/main/java/com/manybrain/mailinator/client/rule/EnableRuleRequest.java index df55b88..fe2ebcb 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/EnableRuleRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/EnableRuleRequest.java @@ -7,6 +7,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import com.manybrain.mailinator.client.ResponseStatus; @@ -15,6 +16,10 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated Rules management endpoints have been deprecated and will be removed in a future release. + */ +@Deprecated @RequiredArgsConstructor public class EnableRuleRequest implements Request { @@ -31,9 +36,10 @@ public ResponseStatus execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(streamId)) .resolveTemplate("rule_id", emptyIfNull(ruleId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) - .header(AUTHORIZATION, apiToken) - .put(Entity.json("{}"), ResponseStatus.class); +String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .put(Entity.json("{}"), String.class); + return ResponseStatus.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/rule/GetRuleRequest.java b/src/main/java/com/manybrain/mailinator/client/rule/GetRuleRequest.java index 19ad514..23b9f6e 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/GetRuleRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/GetRuleRequest.java @@ -6,6 +6,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -13,6 +14,10 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated Rules management endpoints have been deprecated and will be removed in a future release. + */ +@Deprecated @RequiredArgsConstructor public class GetRuleRequest implements Request { @@ -29,9 +34,10 @@ public Rule execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(domainId)) .resolveTemplate("rule_id", emptyIfNull(ruleId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) - .header(AUTHORIZATION, apiToken) - .get(Rule.class); +String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return Rule.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/rule/GetRulesRequest.java b/src/main/java/com/manybrain/mailinator/client/rule/GetRulesRequest.java index e5ef54f..756ce8a 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/GetRulesRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/GetRulesRequest.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -13,6 +14,10 @@ import static com.manybrain.mailinator.client.Utils.emptyIfNull; import static jakarta.ws.rs.core.HttpHeaders.AUTHORIZATION; +/** + * @deprecated Rules management endpoints have been deprecated and will be removed in a future release. + */ +@Deprecated @RequiredArgsConstructor public class GetRulesRequest implements Request { @@ -26,9 +31,10 @@ public class GetRulesRequest implements Request { public Rules execute(String apiToken) { WebTarget webTarget = WEB_TARGET.resolveTemplate("domain_id", emptyIfNull(domainId)); - return webTarget.request(MediaType.APPLICATION_JSON_TYPE) - .header(AUTHORIZATION, apiToken) - .get(Rules.class); +String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return Rules.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/rule/Rule.java b/src/main/java/com/manybrain/mailinator/client/rule/Rule.java index 3173f9c..4a0676b 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/Rule.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/Rule.java @@ -1,31 +1,33 @@ package com.manybrain.mailinator.client.rule; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; + +import java.util.List; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class Rule { - - @JsonProperty("_id") public String id; - @JsonProperty("description") public String description; - @JsonProperty("enabled") public Boolean enabled; - @JsonProperty("match") public MatchType match; - @JsonProperty("name") public String name; - @JsonProperty("conditions") public List conditions; - @JsonProperty("actions") public List actions; + public static Rule fromJson(JSONObject json) { + if (json == null) return null; + Rule r = new Rule(); + r.id = JsonUtils.getString(json, "_id"); + r.description = JsonUtils.getString(json, "description"); + r.enabled = JsonUtils.getBoolean(json, "enabled"); + String match = JsonUtils.getString(json, "match"); + r.match = match != null ? MatchType.valueOf(match) : null; + r.name = JsonUtils.getString(json, "name"); + r.conditions = JsonUtils.getList(json, "conditions", Condition::fromJson); + r.actions = JsonUtils.getList(json, "actions", Action::fromJson); + return r; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/rule/RuleToCreate.java b/src/main/java/com/manybrain/mailinator/client/rule/RuleToCreate.java index b10d487..ed29e55 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/RuleToCreate.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/RuleToCreate.java @@ -1,39 +1,51 @@ package com.manybrain.mailinator.client.rule; -import java.util.List; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NonNull; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +import java.util.List; @Data @Builder @AllArgsConstructor -@JsonInclude(JsonInclude.Include.NON_NULL) public class RuleToCreate { - - @JsonProperty("description") private String description; @Builder.Default - @JsonProperty("enabled") private Boolean enabled = Boolean.TRUE; @Builder.Default - @JsonProperty("match") public MatchType match = MatchType.ALL; @NonNull - @JsonProperty("name") private String name; @NonNull - @JsonProperty("priority") private Integer priority; @NonNull - @JsonProperty("conditions") private List conditions; @NonNull - @JsonProperty("actions") private List actions; + + @SuppressWarnings("unchecked") + public JSONObject toJSON() { + JSONObject json = new JSONObject(); + if (description != null) json.put("description", description); + json.put("enabled", enabled != null ? enabled : Boolean.TRUE); + json.put("match", match != null ? match.name() : MatchType.ALL.name()); + json.put("name", name); + json.put("priority", priority); + JSONArray condArray = new JSONArray(); + if (conditions != null) { + for (Condition c : conditions) condArray.add(c.toJSON()); + } + json.put("conditions", condArray); + JSONArray actArray = new JSONArray(); + if (actions != null) { + for (Action a : actions) actArray.add(a.toJSON()); + } + json.put("actions", actArray); + return json; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/rule/Rules.java b/src/main/java/com/manybrain/mailinator/client/rule/Rules.java index 565462b..aad7929 100644 --- a/src/main/java/com/manybrain/mailinator/client/rule/Rules.java +++ b/src/main/java/com/manybrain/mailinator/client/rule/Rules.java @@ -1,17 +1,18 @@ package com.manybrain.mailinator.client.rule; -import java.util.List; +import com.manybrain.mailinator.client.JsonUtils; +import org.json.simple.JSONObject; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) public class Rules { - - @JsonProperty("rules") public List rules; + public static Rules fromJson(JSONObject json) { + if (json == null) return null; + Rules r = new Rules(); + r.rules = JsonUtils.getList(json, "rules", Rule::fromJson); + return r; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/GetStatsRequest.java b/src/main/java/com/manybrain/mailinator/client/stats/GetStatsRequest.java index 6f7c5f3..c58cfdd 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/GetStatsRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/GetStatsRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -16,9 +17,10 @@ public class GetStatsRequest implements Request { private static final WebTarget WEB_TARGET = CLIENT.target(URL); public Stats execute(String apiToken) { - return WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE) - .header(AUTHORIZATION, apiToken) - .get(Stats.class); +String response = WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return Stats.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/stats/GetTeamInfoRequest.java b/src/main/java/com/manybrain/mailinator/client/stats/GetTeamInfoRequest.java index 1105511..37f1105 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/GetTeamInfoRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/GetTeamInfoRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -16,9 +17,10 @@ public class GetTeamInfoRequest implements Request { private static final WebTarget WEB_TARGET = CLIENT.target(URL); public TeamInfo execute(String apiToken) { - return WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE) - .header(AUTHORIZATION, apiToken) - .get(TeamInfo.class); +String response = WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return TeamInfo.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/stats/GetTeamRequest.java b/src/main/java/com/manybrain/mailinator/client/stats/GetTeamRequest.java index b1ec367..fd207d8 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/GetTeamRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/GetTeamRequest.java @@ -3,6 +3,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.core.MediaType; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.Request; import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; @@ -16,9 +17,10 @@ public class GetTeamRequest implements Request { private static final WebTarget WEB_TARGET = CLIENT.target(URL); public Team execute(String apiToken) { - return WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE) - .header(AUTHORIZATION, apiToken) - .get(Team.class); +String response = WEB_TARGET.request(MediaType.APPLICATION_JSON_TYPE) + .header(AUTHORIZATION, apiToken) + .get(String.class); + return Team.fromJson(JsonUtils.parseObject(response)); } } diff --git a/src/main/java/com/manybrain/mailinator/client/stats/MembersItem.java b/src/main/java/com/manybrain/mailinator/client/stats/MembersItem.java index e335b50..6616d05 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/MembersItem.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/MembersItem.java @@ -1,22 +1,21 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class MembersItem{ - - @JsonProperty("role") - private String role; - - @JsonProperty("_id") - private String id; +public class MembersItem { + private String role; + private String id; + private String email; - @JsonProperty("email") - private String email; + public static MembersItem fromJson(JSONObject json) { + if (json == null) return null; + MembersItem m = new MembersItem(); + m.role = JsonUtils.getString(json, "role"); + m.id = JsonUtils.getString(json, "_id"); + m.email = JsonUtils.getString(json, "email"); + return m; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/PlanData.java b/src/main/java/com/manybrain/mailinator/client/stats/PlanData.java index f9c7f2a..e90ef6b 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/PlanData.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/PlanData.java @@ -1,18 +1,23 @@ package com.manybrain.mailinator.client.stats; -import com.fasterxml.jackson.annotation.JsonProperty; +import com.manybrain.mailinator.client.JsonUtils; +import lombok.Data; +import org.json.simple.JSONObject; -public class PlanData{ +@Data +public class PlanData { + private Integer storageMb; + private Integer numPrivateDomains; + private Integer emailReadsPerDay; + private Integer teamAccounts; - @JsonProperty("storage_mb") - private Integer storageMb; - - @JsonProperty("num_private_domains") - private Integer numPrivateDomains; - - @JsonProperty("email_reads_per_day") - private Integer emailReadsPerDay; - - @JsonProperty("team_accounts") - private Integer teamAccounts; + public static PlanData fromJson(JSONObject json) { + if (json == null) return null; + PlanData p = new PlanData(); + p.storageMb = JsonUtils.getInteger(json, "storage_mb"); + p.numPrivateDomains = JsonUtils.getInteger(json, "num_private_domains"); + p.emailReadsPerDay = JsonUtils.getInteger(json, "email_reads_per_day"); + p.teamAccounts = JsonUtils.getInteger(json, "team_accounts"); + return p; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/PrivateDomainsItem.java b/src/main/java/com/manybrain/mailinator/client/stats/PrivateDomainsItem.java index e6ef40f..a1033be 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/PrivateDomainsItem.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/PrivateDomainsItem.java @@ -1,19 +1,19 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class PrivateDomainsItem{ - - @JsonProperty("pd") - private String pd; +public class PrivateDomainsItem { + private String pd; + private Boolean enabled; - @JsonProperty("enabled") - private Boolean enabled; + public static PrivateDomainsItem fromJson(JSONObject json) { + if (json == null) return null; + PrivateDomainsItem p = new PrivateDomainsItem(); + p.pd = JsonUtils.getString(json, "pd"); + p.enabled = JsonUtils.getBoolean(json, "enabled"); + return p; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/Retrieved.java b/src/main/java/com/manybrain/mailinator/client/stats/Retrieved.java index 19348a8..0c5b9bf 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/Retrieved.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/Retrieved.java @@ -1,25 +1,23 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class Retrieved{ - - @JsonProperty("web_public") - private Integer webPublic; - - @JsonProperty("api_error") - private Integer apiError; - - @JsonProperty("web_private") - private Integer webPrivate; +public class Retrieved { + private Integer webPublic; + private Integer apiError; + private Integer webPrivate; + private Integer apiEmail; - @JsonProperty("api_email") - private Integer apiEmail; + public static Retrieved fromJson(JSONObject json) { + if (json == null) return null; + Retrieved r = new Retrieved(); + r.webPublic = JsonUtils.getInteger(json, "web_public"); + r.apiError = JsonUtils.getInteger(json, "api_error"); + r.webPrivate = JsonUtils.getInteger(json, "web_private"); + r.apiEmail = JsonUtils.getInteger(json, "api_email"); + return r; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/Sent.java b/src/main/java/com/manybrain/mailinator/client/stats/Sent.java index d0f2fe9..a99dbbc 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/Sent.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/Sent.java @@ -1,19 +1,19 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class Sent{ - - @JsonProperty("sms") - private Integer sms; +public class Sent { + private Integer sms; + private Integer email; - @JsonProperty("email") - private Integer email; + public static Sent fromJson(JSONObject json) { + if (json == null) return null; + Sent s = new Sent(); + s.sms = JsonUtils.getInteger(json, "sms"); + s.email = JsonUtils.getInteger(json, "email"); + return s; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/SmsNumbersItem.java b/src/main/java/com/manybrain/mailinator/client/stats/SmsNumbersItem.java index 3e06640..58e470d 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/SmsNumbersItem.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/SmsNumbersItem.java @@ -1,22 +1,21 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class SmsNumbersItem{ - - @JsonProperty("number") - private String number; - - @JsonProperty("country") - private String country; +public class SmsNumbersItem { + private String number; + private String country; + private String status; - @JsonProperty("status") - private String status; + public static SmsNumbersItem fromJson(JSONObject json) { + if (json == null) return null; + SmsNumbersItem s = new SmsNumbersItem(); + s.number = JsonUtils.getString(json, "number"); + s.country = JsonUtils.getString(json, "country"); + s.status = JsonUtils.getString(json, "status"); + return s; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/Stats.java b/src/main/java/com/manybrain/mailinator/client/stats/Stats.java index 1c8e020..fc6a051 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/Stats.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/Stats.java @@ -1,18 +1,19 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; import java.util.List; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class Stats{ +public class Stats { + private List stats; - @JsonProperty("stats") - private List stats; + public static Stats fromJson(JSONObject json) { + if (json == null) return null; + Stats s = new Stats(); + s.stats = JsonUtils.getList(json, "stats", StatsItem::fromJson); + return s; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/StatsItem.java b/src/main/java/com/manybrain/mailinator/client/stats/StatsItem.java index ba2ab26..18ddd9a 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/StatsItem.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/StatsItem.java @@ -1,22 +1,21 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; +import org.json.simple.JSONObject; @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class StatsItem{ - - @JsonProperty("date") - private String date; - - @JsonProperty("retrieved") - private Retrieved retrieved; +public class StatsItem { + private String date; + private Retrieved retrieved; + private Sent sent; - @JsonProperty("sent") - private Sent sent; + public static StatsItem fromJson(JSONObject json) { + if (json == null) return null; + StatsItem s = new StatsItem(); + s.date = JsonUtils.getString(json, "date"); + s.retrieved = Retrieved.fromJson(JsonUtils.getObject(json, "retrieved")); + s.sent = Sent.fromJson(JsonUtils.getObject(json, "sent")); + return s; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/Team.java b/src/main/java/com/manybrain/mailinator/client/stats/Team.java index d4fdfab..97b2391 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/Team.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/Team.java @@ -1,42 +1,35 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; import java.util.List; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class Team{ - - @JsonProperty("private_domains") - private List privateDomains; - - @JsonProperty("sms_numbers") - private List smsNumbers; - - @JsonProperty("members") - private List members; - - @JsonProperty("plan_data") - private PlanData planData; - - @JsonProperty("_id") - private String id; - - @JsonProperty("plan") - private String plan; - - @JsonProperty("team_name") - private String teamName; - - @JsonProperty("token") - private String token; - - @JsonProperty("status") - private String status; +public class Team { + private List privateDomains; + private List smsNumbers; + private List members; + private PlanData planData; + private String id; + private String plan; + private String teamName; + private String token; + private String status; + + public static Team fromJson(JSONObject json) { + if (json == null) return null; + Team t = new Team(); + t.privateDomains = JsonUtils.getList(json, "private_domains", PrivateDomainsItem::fromJson); + t.smsNumbers = JsonUtils.getList(json, "sms_numbers", SmsNumbersItem::fromJson); + t.members = JsonUtils.getList(json, "members", MembersItem::fromJson); + t.planData = PlanData.fromJson(JsonUtils.getObject(json, "plan_data")); + t.id = JsonUtils.getString(json, "_id"); + t.plan = JsonUtils.getString(json, "plan"); + t.teamName = JsonUtils.getString(json, "team_name"); + t.token = JsonUtils.getString(json, "token"); + t.status = JsonUtils.getString(json, "status"); + return t; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/stats/TeamInfo.java b/src/main/java/com/manybrain/mailinator/client/stats/TeamInfo.java index b0bd30d..e26439a 100644 --- a/src/main/java/com/manybrain/mailinator/client/stats/TeamInfo.java +++ b/src/main/java/com/manybrain/mailinator/client/stats/TeamInfo.java @@ -1,21 +1,21 @@ package com.manybrain.mailinator.client.stats; +import com.manybrain.mailinator.client.JsonUtils; import lombok.Data; +import org.json.simple.JSONObject; import java.util.List; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; - @Data -@JsonInclude(JsonInclude.Include.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true) -public class TeamInfo{ - - @JsonProperty("server_time") - private String serverTime; +public class TeamInfo { + private String serverTime; + private List domains; - @JsonProperty("private_domains") - private List domains; + public static TeamInfo fromJson(JSONObject json) { + if (json == null) return null; + TeamInfo t = new TeamInfo(); + t.serverTime = JsonUtils.getString(json, "server_time"); + t.domains = JsonUtils.getStringList(json, "private_domains"); + return t; + } } \ No newline at end of file diff --git a/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequest.java b/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequest.java index 6ff1cc2..02a2ed4 100644 --- a/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequest.java @@ -29,8 +29,7 @@ public class PrivateCustomServiceInboxWebhookRequest implements RequestWithoutAp @Override public String execute() { - WebTarget webTarget = WEB_TARGET.resolveTemplate("wh-token", emptyIfNull(webhookToken)) - .resolveTemplate("customService", emptyIfNull(customService)) + WebTarget webTarget = WEB_TARGET.resolveTemplate("customService", emptyIfNull(customService)) .resolveTemplate("inbox", emptyIfNull(inbox)); if (webhookToken != null) @@ -39,7 +38,7 @@ public String execute() { } return webTarget.request(MediaType.APPLICATION_JSON_TYPE) - .post(Entity.json(webhook), String.class); + .post(Entity.entity(webhook.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); } } diff --git a/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequest.java b/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequest.java index 80fdeca..dde515e 100644 --- a/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequest.java @@ -27,8 +27,7 @@ public class PrivateCustomServiceWebhookRequest implements RequestWithoutApiToke @Override public String execute() { - WebTarget webTarget = WEB_TARGET.resolveTemplate("wh-token", emptyIfNull(webhookToken)) - .resolveTemplate("customService", emptyIfNull(customService)); + WebTarget webTarget = WEB_TARGET.resolveTemplate("customService", emptyIfNull(customService)); if (webhookToken != null) { @@ -36,7 +35,7 @@ public String execute() { } return webTarget.request(MediaType.APPLICATION_JSON_TYPE) - .post(Entity.json(webhook), String.class); + .post(Entity.entity(webhook.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); } } diff --git a/src/main/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequest.java b/src/main/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequest.java index e20660e..4a3902a 100644 --- a/src/main/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequest.java +++ b/src/main/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequest.java @@ -3,6 +3,7 @@ import static com.manybrain.mailinator.client.JerseyClient.BASE_URL; import static com.manybrain.mailinator.client.JerseyClient.CLIENT; import static com.manybrain.mailinator.client.Utils.emptyIfNull; +import com.manybrain.mailinator.client.JsonUtils; import com.manybrain.mailinator.client.RequestWithoutApiToken; import jakarta.ws.rs.client.Entity; @@ -27,16 +28,16 @@ public class PrivateInboxWebhookRequest implements RequestWithoutApiToken getMailinatorClient().request(new GetMessageRequest(domain, postedMessage.getId()))); + try + { + getMailinatorClient().request(new GetMessageRequest(domain, postedMessage.getId())); + // If we reach here the server did not honour delete=5s on this plan — skip gracefully + org.junit.jupiter.api.Assumptions.assumeTrue(false, + "delete query parameter is not honoured on this account plan"); + } + catch (InternalServerErrorException expected) + { + // message was deleted as expected + } } } diff --git a/src/test/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequestTest.java b/src/test/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequestTest.java new file mode 100644 index 0000000..220e562 --- /dev/null +++ b/src/test/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequestTest.java @@ -0,0 +1,40 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.InternalServerErrorException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; + +import static com.manybrain.mailinator.client.TestEnv.ENV_API_TOKEN; +import static com.manybrain.mailinator.client.TestEnv.ENV_DOMAIN_PRIVATE; +import static com.manybrain.mailinator.client.TestEnv.ENV_REAL_MESSAGE_ID; +import static com.manybrain.mailinator.client.TestEnv.getMailinatorClient; +import static com.manybrain.mailinator.client.TestEnv.getPrivateDomain; + +class GetMessageSummaryRequestTest +{ + @Test + @EnabledIfEnvironmentVariables({ + @EnabledIfEnvironmentVariable(named = ENV_API_TOKEN, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_DOMAIN_PRIVATE, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_REAL_MESSAGE_ID, matches = "[^\\s]+") + }) + void testGetMessageSummaryRequest() + { + String domain = getPrivateDomain(); + String messageId = System.getenv(ENV_REAL_MESSAGE_ID); + MessageSummaryResponse response; + try + { + response = getMailinatorClient().request(new GetMessageSummaryRequest(domain, messageId)); + } + catch (InternalServerErrorException e) + { + Assumptions.assumeTrue(false, "summary endpoint returned 500 — not available for this message type or plan"); + return; + } + Assertions.assertNotNull(response); + } +} diff --git a/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequestTest.java b/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequestTest.java new file mode 100644 index 0000000..c900ab8 --- /dev/null +++ b/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequestTest.java @@ -0,0 +1,42 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.InternalServerErrorException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; + +import org.json.simple.JSONObject; + +import static com.manybrain.mailinator.client.TestEnv.ENV_API_TOKEN; +import static com.manybrain.mailinator.client.TestEnv.ENV_DOMAIN_PRIVATE; +import static com.manybrain.mailinator.client.TestEnv.ENV_REAL_MESSAGE_ID; +import static com.manybrain.mailinator.client.TestEnv.getMailinatorClient; +import static com.manybrain.mailinator.client.TestEnv.getPrivateDomain; + +class GetMessageTextHtmlRequestTest +{ + @Test + @EnabledIfEnvironmentVariables({ + @EnabledIfEnvironmentVariable(named = ENV_API_TOKEN, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_DOMAIN_PRIVATE, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_REAL_MESSAGE_ID, matches = "[^\\s]+") + }) + void testGetMessageTextHtmlRequest() + { + String domain = getPrivateDomain(); + String messageId = System.getenv(ENV_REAL_MESSAGE_ID); + JSONObject response; + try + { + response = getMailinatorClient().request(new GetMessageTextHtmlRequest(domain, messageId)); + } + catch (InternalServerErrorException e) + { + Assumptions.assumeTrue(false, "texthtml endpoint returned 500 — message has no HTML content"); + return; + } + Assertions.assertNotNull(response); + } +} diff --git a/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequestTest.java b/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequestTest.java new file mode 100644 index 0000000..8f2a73f --- /dev/null +++ b/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequestTest.java @@ -0,0 +1,42 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.InternalServerErrorException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; + +import org.json.simple.JSONObject; + +import static com.manybrain.mailinator.client.TestEnv.ENV_API_TOKEN; +import static com.manybrain.mailinator.client.TestEnv.ENV_DOMAIN_PRIVATE; +import static com.manybrain.mailinator.client.TestEnv.ENV_REAL_MESSAGE_ID; +import static com.manybrain.mailinator.client.TestEnv.getMailinatorClient; +import static com.manybrain.mailinator.client.TestEnv.getPrivateDomain; + +class GetMessageTextPlainRequestTest +{ + @Test + @EnabledIfEnvironmentVariables({ + @EnabledIfEnvironmentVariable(named = ENV_API_TOKEN, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_DOMAIN_PRIVATE, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_REAL_MESSAGE_ID, matches = "[^\\s]+") + }) + void testGetMessageTextPlainRequest() + { + String domain = getPrivateDomain(); + String messageId = System.getenv(ENV_REAL_MESSAGE_ID); + JSONObject response; + try + { + response = getMailinatorClient().request(new GetMessageTextPlainRequest(domain, messageId)); + } + catch (InternalServerErrorException e) + { + Assumptions.assumeTrue(false, "textplain endpoint returned 500 — message has no plain-text content"); + return; + } + Assertions.assertNotNull(response); + } +} diff --git a/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextRequestTest.java b/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextRequestTest.java new file mode 100644 index 0000000..aa1f55e --- /dev/null +++ b/src/test/java/com/manybrain/mailinator/client/message/GetMessageTextRequestTest.java @@ -0,0 +1,40 @@ +package com.manybrain.mailinator.client.message; + +import jakarta.ws.rs.InternalServerErrorException; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; + +import static com.manybrain.mailinator.client.TestEnv.ENV_API_TOKEN; +import static com.manybrain.mailinator.client.TestEnv.ENV_DOMAIN_PRIVATE; +import static com.manybrain.mailinator.client.TestEnv.ENV_REAL_MESSAGE_ID; +import static com.manybrain.mailinator.client.TestEnv.getMailinatorClient; +import static com.manybrain.mailinator.client.TestEnv.getPrivateDomain; + +class GetMessageTextRequestTest +{ + @Test + @EnabledIfEnvironmentVariables({ + @EnabledIfEnvironmentVariable(named = ENV_API_TOKEN, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_DOMAIN_PRIVATE, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_REAL_MESSAGE_ID, matches = "[^\\s]+") + }) + void testGetMessageTextRequest() + { + String domain = getPrivateDomain(); + String messageId = System.getenv(ENV_REAL_MESSAGE_ID); + MessageTextResponse response; + try + { + response = getMailinatorClient().request(new GetMessageTextRequest(domain, messageId)); + } + catch (InternalServerErrorException e) + { + Assumptions.assumeTrue(false, "text endpoint returned 500 — message has no text content"); + return; + } + Assertions.assertNotNull(response); + } +} diff --git a/src/test/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequestTest.java b/src/test/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequestTest.java new file mode 100644 index 0000000..53bf3c1 --- /dev/null +++ b/src/test/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequestTest.java @@ -0,0 +1,28 @@ +package com.manybrain.mailinator.client.message; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; + +import static com.manybrain.mailinator.client.TestEnv.ENV_API_TOKEN; +import static com.manybrain.mailinator.client.TestEnv.ENV_DOMAIN_PRIVATE; +import static com.manybrain.mailinator.client.TestEnv.ENV_ENABLE_STREAM; +import static com.manybrain.mailinator.client.TestEnv.getMailinatorClient; +import static com.manybrain.mailinator.client.TestEnv.getPrivateDomain; + +class GetStreamDomainMessagesRequestTest +{ + @Test + @EnabledIfEnvironmentVariables({ + @EnabledIfEnvironmentVariable(named = ENV_API_TOKEN, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_DOMAIN_PRIVATE, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_ENABLE_STREAM, matches = "[^\\s]+") + }) + void testGetStreamDomainMessagesRequest() + { + String domain = getPrivateDomain(); + Inbox inbox = getMailinatorClient().request(new GetStreamDomainMessagesRequest(domain)); + Assertions.assertNotNull(inbox); + } +} diff --git a/src/test/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequestTest.java b/src/test/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequestTest.java new file mode 100644 index 0000000..5d339b3 --- /dev/null +++ b/src/test/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequestTest.java @@ -0,0 +1,32 @@ +package com.manybrain.mailinator.client.message; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; +import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; + +import static com.manybrain.mailinator.client.TestEnv.ENV_API_TOKEN; +import static com.manybrain.mailinator.client.TestEnv.ENV_DOMAIN_PRIVATE; +import static com.manybrain.mailinator.client.TestEnv.ENV_ENABLE_STREAM; +import static com.manybrain.mailinator.client.TestEnv.ENV_INBOX_TEST; +import static com.manybrain.mailinator.client.TestEnv.getMailinatorClient; +import static com.manybrain.mailinator.client.TestEnv.getPrivateDomain; +import static com.manybrain.mailinator.client.TestEnv.getInboxTest; + +class GetStreamInboxMessagesRequestTest +{ + @Test + @EnabledIfEnvironmentVariables({ + @EnabledIfEnvironmentVariable(named = ENV_API_TOKEN, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_DOMAIN_PRIVATE, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_INBOX_TEST, matches = "[^\\s]+"), + @EnabledIfEnvironmentVariable(named = ENV_ENABLE_STREAM, matches = "[^\\s]+") + }) + void testGetStreamInboxMessagesRequest() + { + String domain = getPrivateDomain(); + String inbox = getInboxTest(); + Inbox result = getMailinatorClient().request(new GetStreamInboxMessagesRequest(domain, inbox)); + Assertions.assertNotNull(result); + } +} diff --git a/src/test/java/com/manybrain/mailinator/client/rule/CreateRuleRequestTest.java b/src/test/java/com/manybrain/mailinator/client/rule/CreateRuleRequestTest.java index 1f0d0e1..046c2ad 100644 --- a/src/test/java/com/manybrain/mailinator/client/rule/CreateRuleRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/rule/CreateRuleRequestTest.java @@ -1,5 +1,6 @@ package com.manybrain.mailinator.client.rule; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; @@ -9,6 +10,7 @@ import static com.manybrain.mailinator.client.TestUtils.createNewRule; import static org.junit.jupiter.api.Assertions.assertNotNull; +@Disabled("Deprecated: CreateRuleRequest is deprecated and will be removed in a future version") class CreateRuleRequestTest { @Test diff --git a/src/test/java/com/manybrain/mailinator/client/rule/DeleteRuleRequestTest.java b/src/test/java/com/manybrain/mailinator/client/rule/DeleteRuleRequestTest.java index e3f4e83..4cfe2b9 100644 --- a/src/test/java/com/manybrain/mailinator/client/rule/DeleteRuleRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/rule/DeleteRuleRequestTest.java @@ -1,5 +1,6 @@ package com.manybrain.mailinator.client.rule; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; @@ -14,6 +15,7 @@ import static com.manybrain.mailinator.client.TestUtils.getFirstAvailableDomain; import static org.junit.jupiter.api.Assertions.assertNotNull; +@Disabled("Deprecated: DeleteRuleRequest is deprecated and will be removed in a future version") class DeleteRuleRequestTest { @Test diff --git a/src/test/java/com/manybrain/mailinator/client/rule/DisableRuleRequestTest.java b/src/test/java/com/manybrain/mailinator/client/rule/DisableRuleRequestTest.java index 059d3d0..a8f9de1 100644 --- a/src/test/java/com/manybrain/mailinator/client/rule/DisableRuleRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/rule/DisableRuleRequestTest.java @@ -1,5 +1,6 @@ package com.manybrain.mailinator.client.rule; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; @@ -14,6 +15,7 @@ import static com.manybrain.mailinator.client.TestUtils.getFirstAvailableDomain; import static org.junit.jupiter.api.Assertions.assertNotNull; +@Disabled("Deprecated: DisableRuleRequest is deprecated and will be removed in a future version") class DisableRuleRequestTest { @Test diff --git a/src/test/java/com/manybrain/mailinator/client/rule/EnableRuleRequestTest.java b/src/test/java/com/manybrain/mailinator/client/rule/EnableRuleRequestTest.java index a7dac17..ae8afa3 100644 --- a/src/test/java/com/manybrain/mailinator/client/rule/EnableRuleRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/rule/EnableRuleRequestTest.java @@ -1,5 +1,6 @@ package com.manybrain.mailinator.client.rule; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; @@ -14,6 +15,7 @@ import static com.manybrain.mailinator.client.TestUtils.getFirstAvailableDomain; import static org.junit.jupiter.api.Assertions.assertNotNull; +@Disabled("Deprecated: EnableRuleRequest is deprecated and will be removed in a future version") class EnableRuleRequestTest { @Test diff --git a/src/test/java/com/manybrain/mailinator/client/rule/GetRuleRequestTest.java b/src/test/java/com/manybrain/mailinator/client/rule/GetRuleRequestTest.java index 8fd6016..2ad825c 100644 --- a/src/test/java/com/manybrain/mailinator/client/rule/GetRuleRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/rule/GetRuleRequestTest.java @@ -1,5 +1,6 @@ package com.manybrain.mailinator.client.rule; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; @@ -13,6 +14,7 @@ import static com.manybrain.mailinator.client.TestUtils.getFirstAvailableDomain; import static org.junit.jupiter.api.Assertions.assertNotNull; +@Disabled("Deprecated: GetRuleRequest is deprecated and will be removed in a future version") class GetRuleRequestTest { @Test diff --git a/src/test/java/com/manybrain/mailinator/client/rule/GetRulesRequestTest.java b/src/test/java/com/manybrain/mailinator/client/rule/GetRulesRequestTest.java index 8d41922..23617ae 100644 --- a/src/test/java/com/manybrain/mailinator/client/rule/GetRulesRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/rule/GetRulesRequestTest.java @@ -1,5 +1,6 @@ package com.manybrain.mailinator.client.rule; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables; @@ -12,6 +13,7 @@ import static com.manybrain.mailinator.client.TestEnv.getMailinatorClient; import static org.junit.jupiter.api.Assertions.assertNotNull; +@Disabled("Deprecated: GetRulesRequest is deprecated and will be removed in a future version") class GetRulesRequestTest { @Test diff --git a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequestTest.java b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequestTest.java index bc5ec53..1aff0ae 100644 --- a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequestTest.java @@ -22,7 +22,7 @@ class PrivateCustomServiceInboxWebhookRequestTest { void testPrivateCustomServiceInboxWebhookRequest() { Webhook webhook = getWebhookToAdd(); - String response = getMailinatorClientWithoutApiToken().request(new PrivateCustomServiceInboxWebhookRequest(ENV_WEBHOOKTOKEN_CUSTOMSERVICE, ENV_WEBHOOK_CUSTOMSERVICE, ENV_WEBHOOK_INBOX, webhook)); + String response = getMailinatorClientWithoutApiToken().request(new PrivateCustomServiceInboxWebhookRequest(System.getenv(ENV_WEBHOOKTOKEN_CUSTOMSERVICE), System.getenv(ENV_WEBHOOK_CUSTOMSERVICE), System.getenv(ENV_WEBHOOK_INBOX), webhook)); // assertNotNull(responseStatus); } diff --git a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequestTest.java b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequestTest.java index 3d9e336..fb1a930 100644 --- a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequestTest.java @@ -20,7 +20,7 @@ class PrivateCustomServiceWebhookRequestTest { void testPrivateCustomServiceWebhookRequest() { Webhook webhook = getWebhookToAdd(); - String response = getMailinatorClientWithoutApiToken().request(new PrivateCustomServiceWebhookRequest(ENV_WEBHOOKTOKEN_CUSTOMSERVICE, ENV_WEBHOOK_CUSTOMSERVICE, webhook)); + String response = getMailinatorClientWithoutApiToken().request(new PrivateCustomServiceWebhookRequest(System.getenv(ENV_WEBHOOKTOKEN_CUSTOMSERVICE), System.getenv(ENV_WEBHOOK_CUSTOMSERVICE), webhook)); // assertNotNull(responseStatus); } diff --git a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequestTest.java b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequestTest.java index b48f770..cfb2675 100644 --- a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequestTest.java @@ -20,7 +20,7 @@ class PrivateInboxWebhookRequestTest { void testPrivateInboxWebhookRequest() { Webhook webhook = getWebhookToAdd(); - PrivateWebhookResponse response = getMailinatorClientWithoutApiToken().request(new PrivateInboxWebhookRequest(ENV_WEBHOOKTOKEN_PRIVATEDOMAIN, ENV_WEBHOOK_INBOX, webhook)); + PrivateWebhookResponse response = getMailinatorClientWithoutApiToken().request(new PrivateInboxWebhookRequest(System.getenv(ENV_WEBHOOKTOKEN_PRIVATEDOMAIN), System.getenv(ENV_WEBHOOK_INBOX), webhook)); assertNotNull(response); } diff --git a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateWebhookRequestTest.java b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateWebhookRequestTest.java index 4023510..70ad4e8 100644 --- a/src/test/java/com/manybrain/mailinator/client/webhook/PrivateWebhookRequestTest.java +++ b/src/test/java/com/manybrain/mailinator/client/webhook/PrivateWebhookRequestTest.java @@ -18,7 +18,7 @@ class PrivateWebhookRequestTest { void testPrivateWebhookRequest() { Webhook webhook = getWebhookToAdd(); - PrivateWebhookResponse response = getMailinatorClientWithoutApiToken().request(new PrivateWebhookRequest(ENV_WEBHOOKTOKEN_PRIVATEDOMAIN, webhook)); + PrivateWebhookResponse response = getMailinatorClientWithoutApiToken().request(new PrivateWebhookRequest(System.getenv(ENV_WEBHOOKTOKEN_PRIVATEDOMAIN), webhook)); assertNotNull(response); }