From dc16b135b0a6e1e10bec516a28c4da05dc1c46f4 Mon Sep 17 00:00:00 2001 From: voj-tech-j Date: Mon, 20 Apr 2026 11:33:45 +0200 Subject: [PATCH] fix: use slim DomainListItem model for listDomains response --- .../domains/model/DomainListItem.java | 50 +++++++++++++++++++ .../domains/model/ListDomainsResponse.java | 4 +- .../lettr/services/domains/DomainsTest.java | 11 +++- 3 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/lettr/services/domains/model/DomainListItem.java diff --git a/src/main/java/com/lettr/services/domains/model/DomainListItem.java b/src/main/java/com/lettr/services/domains/model/DomainListItem.java new file mode 100644 index 0000000..908fc6d --- /dev/null +++ b/src/main/java/com/lettr/services/domains/model/DomainListItem.java @@ -0,0 +1,50 @@ +package com.lettr.services.domains.model; + +import com.google.gson.annotations.SerializedName; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * Slim view of a sending domain as returned by {@code GET /domains}. + * For the full detail view (DKIM/SPF/DMARC, DNS records, provider), see {@link Domain}. + */ +public class DomainListItem { + + private String domain; + private String status; + + @SerializedName("status_label") + private String statusLabel; + + @SerializedName("can_send") + private boolean canSend; + + @SerializedName("cname_status") + private String cnameStatus; + + @SerializedName("dkim_status") + private String dkimStatus; + + @SerializedName("created_at") + private String createdAt; + + @SerializedName("updated_at") + private String updatedAt; + + @Nonnull public String getDomain() { return domain; } + /** Status: {@code pending}, {@code approved}, or {@code blocked}. */ + @Nonnull public String getStatus() { return status; } + @Nonnull public String getStatusLabel() { return statusLabel; } + public boolean isCanSend() { return canSend; } + @Nullable public String getCnameStatus() { return cnameStatus; } + /** DKIM status. Null until the domain has been verified at least once. */ + @Nullable public String getDkimStatus() { return dkimStatus; } + @Nonnull public String getCreatedAt() { return createdAt; } + @Nonnull public String getUpdatedAt() { return updatedAt; } + + @Override + public String toString() { + return "DomainListItem{domain='" + domain + "', status='" + status + "', canSend=" + canSend + '}'; + } +} diff --git a/src/main/java/com/lettr/services/domains/model/ListDomainsResponse.java b/src/main/java/com/lettr/services/domains/model/ListDomainsResponse.java index e115d88..bf9be1a 100644 --- a/src/main/java/com/lettr/services/domains/model/ListDomainsResponse.java +++ b/src/main/java/com/lettr/services/domains/model/ListDomainsResponse.java @@ -8,10 +8,10 @@ */ public class ListDomainsResponse { - private List domains; + private List domains; /** Returns the list of registered sending domains. */ - @Nonnull public List getDomains() { return domains; } + @Nonnull public List getDomains() { return domains; } @Override public String toString() { diff --git a/src/test/java/com/lettr/services/domains/DomainsTest.java b/src/test/java/com/lettr/services/domains/DomainsTest.java index 77b4c19..6c42260 100644 --- a/src/test/java/com/lettr/services/domains/DomainsTest.java +++ b/src/test/java/com/lettr/services/domains/DomainsTest.java @@ -69,11 +69,20 @@ void createDomainResponseDeserializes() { void listDomainsResponseDeserializes() { String json = "{\"domains\":[{\"domain\":\"example.com\",\"status\":\"approved\"," + "\"status_label\":\"Approved\",\"can_send\":true," + + "\"cname_status\":\"valid\",\"dkim_status\":\"valid\"," + "\"created_at\":\"2024-01-15T10:30:00+00:00\",\"updated_at\":\"2024-01-16T14:45:00+00:00\"}]}"; ListDomainsResponse response = gson.fromJson(json, ListDomainsResponse.class); assertEquals(1, response.getDomains().size()); - assertEquals("example.com", response.getDomains().get(0).getDomain()); + DomainListItem item = response.getDomains().get(0); + assertEquals("example.com", item.getDomain()); + assertEquals("approved", item.getStatus()); + assertEquals("Approved", item.getStatusLabel()); + assertTrue(item.isCanSend()); + assertEquals("valid", item.getCnameStatus()); + assertEquals("valid", item.getDkimStatus()); + assertEquals("2024-01-15T10:30:00+00:00", item.getCreatedAt()); + assertEquals("2024-01-16T14:45:00+00:00", item.getUpdatedAt()); } @Test