From 7c4e5ce3643e6418f94c487ed2ad4e5666097f94 Mon Sep 17 00:00:00 2001 From: Leandro Alves Date: Wed, 16 Mar 2022 12:04:04 +0100 Subject: disallow duplicate contact --- .../com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'controller-api') diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java index 14635a3bb30..0e3101e4e52 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java @@ -18,6 +18,13 @@ public class TenantContacts { public TenantContacts(List contacts) { this.contacts = List.copyOf(contacts); + for (int i = 0; i < contacts.size(); i++) { + for (int j = 0; j < i; j++) { + if (contacts.get(i).equals(contacts.get(j))) { + throw new IllegalArgumentException("Duplicate contact: " + contacts.get(i)); + } + } + } } public static TenantContacts empty() { -- cgit v1.2.3 From df8005e4cab1b1b8b1df2072a9d1e5bd2d2fe296 Mon Sep 17 00:00:00 2001 From: Valerij Fredriksen Date: Wed, 16 Mar 2022 14:16:00 +0100 Subject: Nicer error message --- .../com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java | 6 ++---- .../controller/restapi/application/ApplicationApiCloudTest.java | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) (limited to 'controller-api') diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java index 0e3101e4e52..bd8671d814f 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java @@ -64,7 +64,7 @@ public class TenantContacts { public Contact(List audiences) { this.audiences = List.copyOf(audiences); - if (audiences.isEmpty()) throw new IllegalArgumentException("at least one notification activity must be enabled"); + if (audiences.isEmpty()) throw new IllegalArgumentException("At least one notification activity must be enabled"); } public List audiences() { return audiences; } @@ -106,9 +106,7 @@ public class TenantContacts { @Override public String toString() { - return "EmailContact{" + - "email='" + email + '\'' + - '}'; + return "email '" + email + '\''; } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java index 535560005a3..19ba4d78f02 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java @@ -177,7 +177,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { var contactsWithoutAudienceResponse = request("/application/v4/tenant/scoober/info", PUT) .data(contactsWithoutAudience) .roles(Set.of(Role.administrator(tenantName))); - tester.assertResponse(contactsWithoutAudienceResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"at least one notification activity must be enabled\"}", 400); + tester.assertResponse(contactsWithoutAudienceResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"At least one notification activity must be enabled\"}", 400); // email needs to be present, not blank, and contain an @ var contactsWithInvalidEmail = "{\"contacts\": [{\"audiences\": [\"tenant\"],\"email\": \"contact1\"}]}"; @@ -191,7 +191,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { var contactsWithDuplicateEmailResponse = request("/application/v4/tenant/scoober/info", PUT) .data(contactsWithDuplicateEmail) .roles(Set.of(Role.administrator(tenantName))); - tester.assertResponse(contactsWithDuplicateEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Duplicate contact: EmailContact{email='contact1@email.com'}\"}", 400); + tester.assertResponse(contactsWithDuplicateEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Duplicate contact: email 'contact1@email.com'\"}", 400); // updating a tenant that already has the fields set works var basicInfo = "{\"contactName\": \"Scoober Rentals Inc.\", \"contactEmail\": \"foo@example.com\"}"; -- cgit v1.2.3