From 20e5e6f8970a833dbf59f63fed7dd26d945febb6 Mon Sep 17 00:00:00 2001 From: Leandro Alves Date: Mon, 14 Mar 2022 23:45:14 +0100 Subject: update tests --- .../vespa/hosted/controller/tenant/TenantContacts.java | 2 +- .../restapi/application/ApplicationApiHandler.java | 10 +++++++--- .../restapi/application/ApplicationApiCloudTest.java | 18 ++++++++++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) 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 8573beefbab..14635a3bb30 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 @@ -57,7 +57,7 @@ public class TenantContacts { public Contact(List audiences) { this.audiences = List.copyOf(audiences); - if (audiences.isEmpty()) throw new IllegalArgumentException("audience cannot be empty"); + if (audiences.isEmpty()) throw new IllegalArgumentException("at least one notification activity must be enabled"); } public List audiences() { return audiences; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index f449a8d6bd2..f504e54a054 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -679,10 +679,14 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { if (!insp.valid()) return oldContacts; List contacts = SlimeUtils.entriesStream(insp).map(inspector -> { + String email = inspector.field("email").asString().trim(); List audiences = SlimeUtils.entriesStream(inspector.field("audiences")) - .map(audience -> fromAudience(audience.asString())) - .collect(Collectors.toUnmodifiableList()); - return new TenantContacts.EmailContact(audiences, inspector.field("email").asString()); + .map(audience -> fromAudience(audience.asString())) + .collect(Collectors.toUnmodifiableList()); + if (!email.contains("@")) { + throw new IllegalArgumentException("'email' needs to be an email address"); + } + return new TenantContacts.EmailContact(audiences, email); }).collect(toUnmodifiableList()); return new TenantContacts(contacts); 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 d2b80625730..c02e898b038 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 @@ -92,7 +92,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { .roles(Set.of(Role.administrator(tenantName))); tester.assertResponse(postPartial, "{\"message\":\"Tenant info updated\"}", 200); - String partialContacts = "\"contacts\": [{\"audience\": [\"tenant\"],\"email\": \"contact1@example.com\"}]"; + String partialContacts = "{\"contacts\": [{\"audiences\": [\"tenant\"],\"email\": \"contact1@example.com\"}]}"; var postPartialContacts = request("/application/v4/tenant/scoober/info", PUT) .data(partialContacts) @@ -100,7 +100,7 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { tester.assertResponse(postPartialContacts, "{\"message\":\"Tenant info updated\"}", 200); // Read back the updated info - tester.assertResponse(infoRequest, "{\"name\":\"\",\"email\":\"\",\"website\":\"\",\"contactName\":\"newName\",\"contactEmail\":\"foo@example.com\",\"billingContact\":{\"name\":\"billingName\",\"email\":\"\",\"phone\":\"\"},\"contacts\":[]}", 200); + tester.assertResponse(infoRequest, "{\"name\":\"\",\"email\":\"\",\"website\":\"\",\"contactName\":\"newName\",\"contactEmail\":\"foo@example.com\",\"billingContact\":{\"name\":\"billingName\",\"email\":\"\",\"phone\":\"\"},\"contacts\":[{\"audiences\":[\"tenant\"],\"email\":\"contact1@example.com\"}]}", 200); String fullAddress = "{\"addressLines\":\"addressLines\",\"postalCodeOrZip\":\"postalCodeOrZip\",\"city\":\"city\",\"stateRegionProvince\":\"stateRegionProvince\",\"country\":\"country\"}"; String fullBillingContact = "{\"name\":\"name\",\"email\":\"foo@example\",\"phone\":\"phone\",\"address\":" + fullAddress + "}"; @@ -172,6 +172,20 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { .roles(Set.of(Role.administrator(tenantName))); tester.assertResponse(addressInfoResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"All address fields must be set\"}", 400); + // at least one notification activity must be enabled + var contactsWithoutAudience = "{\"contacts\": [{\"email\": \"contact1@example.com\"}]}"; + 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); + + // email needs to be present, not blank, and contain an @ + var contactsWithInvalidEmail = "{\"contacts\": [{\"audiences\": [\"tenant\"],\"email\": \"contact1\"}]}"; + var contactsWithInvalidEmailResponse = request("/application/v4/tenant/scoober/info", PUT) + .data(contactsWithInvalidEmail) + .roles(Set.of(Role.administrator(tenantName))); + tester.assertResponse(contactsWithInvalidEmailResponse, "{\"error-code\":\"BAD_REQUEST\",\"message\":\"'email' needs to be an email address\"}", 400); + // updating a tenant that already has the fields set works var basicInfo = "{\"contactName\": \"Scoober Rentals Inc.\", \"contactEmail\": \"foo@example.com\"}"; var basicInfoResponse = request("/application/v4/tenant/scoober/info", PUT) -- cgit v1.2.3