summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeandro Alves <leandroalves@yahooinc.com>2022-03-14 23:45:14 +0100
committerValerij Fredriksen <valerijf@yahooinc.com>2022-03-15 12:12:48 +0100
commit20e5e6f8970a833dbf59f63fed7dd26d945febb6 (patch)
treeabc5dee26444dc66181fb5f2abf537d3b1fa5d3c
parenta7286271db0f3d155f48616153cf78601baed81b (diff)
update tests
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java2
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java10
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java18
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<Audience> 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<Audience> 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<TenantContacts.Contact> contacts = SlimeUtils.entriesStream(insp).map(inspector -> {
+ String email = inspector.field("email").asString().trim();
List<TenantContacts.Audience> 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)