|
13 | 13 | import io.vertx.junit5.VertxTestContext; |
14 | 14 | import org.junit.jupiter.api.Test; |
15 | 15 | import org.junit.jupiter.params.ParameterizedTest; |
| 16 | +import org.junit.jupiter.params.provider.Arguments; |
16 | 17 | import org.junit.jupiter.params.provider.MethodSource; |
17 | 18 | import org.junit.jupiter.params.provider.ValueSource; |
18 | 19 |
|
@@ -387,6 +388,34 @@ void updateServiceLink_updateNameOnly_succeeds(Vertx vertx, VertxTestContext tes |
387 | 388 | }); |
388 | 389 | } |
389 | 390 |
|
| 391 | + @Test |
| 392 | + void updateServiceLink_updateDisabledOnly_succeeds(Vertx vertx, VertxTestContext testContext) { |
| 393 | + fakeAuth(Role.MAINTAINER); |
| 394 | + |
| 395 | + setSites(new Site(123, "name1", false)); |
| 396 | + setServices(new Service(1, 123, "name1", Set.of(Role.MAINTAINER, Role.MAPPER))); |
| 397 | + ServiceLink existingLink = new ServiceLink("link1", 1, 123, "name1", Set.of(Role.MAPPER)); |
| 398 | + setServiceLinks(existingLink); |
| 399 | + |
| 400 | + JsonObject jo = new JsonObject(); |
| 401 | + jo.put("link_id", "link1"); |
| 402 | + jo.put("service_id", 1); |
| 403 | + jo.put("site_id", 123); |
| 404 | + jo.put("disabled", true); |
| 405 | + |
| 406 | + ServiceLink expected = new ServiceLink("link1", 1, 123, "name1", Set.of(Role.MAPPER)); |
| 407 | + expected.setDisabled(true); |
| 408 | + |
| 409 | + post(vertx, testContext, "api/service_link/update", jo.encode(), response -> { |
| 410 | + assertEquals(200, response.statusCode()); |
| 411 | + checkServiceLinkJson(expected, response.bodyAsJsonObject()); |
| 412 | + verify(serviceStoreWriter, never()).upload(null, null); |
| 413 | + verify(serviceLinkStoreWriter, times(1)).upload(List.of(expected), null); |
| 414 | + |
| 415 | + testContext.completeNow(); |
| 416 | + }); |
| 417 | + } |
| 418 | + |
390 | 419 | @Test |
391 | 420 | void updateServiceLink_updateRoleOnly_succeeds(Vertx vertx, VertxTestContext testContext) { |
392 | 421 | fakeAuth(Role.MAINTAINER); |
@@ -442,6 +471,35 @@ void updateServiceLink_updateRoleAndName_succeeds(Vertx vertx, VertxTestContext |
442 | 471 | }); |
443 | 472 | } |
444 | 473 |
|
| 474 | + @Test |
| 475 | + void updateServiceLink_updateRoleNameDisabled_succeeds(Vertx vertx, VertxTestContext testContext) { |
| 476 | + fakeAuth(Role.MAINTAINER); |
| 477 | + |
| 478 | + setSites(new Site(123, "name1", false)); |
| 479 | + setServices(new Service(1, 123, "name1", Set.of(Role.MAINTAINER, Role.MAPPER, Role.SHARER))); |
| 480 | + ServiceLink existingLink = new ServiceLink("link1", 1, 123, "name1", Set.of(Role.MAPPER)); |
| 481 | + setServiceLinks(existingLink); |
| 482 | + |
| 483 | + JsonObject jo = new JsonObject(); |
| 484 | + jo.put("link_id", "link1"); |
| 485 | + jo.put("service_id", 1); |
| 486 | + jo.put("site_id", 123); |
| 487 | + jo.put("name", "newname"); |
| 488 | + jo.put("roles", JsonArray.of(Role.MAPPER, Role.SHARER)); |
| 489 | + jo.put("disabled", true); |
| 490 | + |
| 491 | + ServiceLink expected = new ServiceLink("link1", 1, 123, "newname", Set.of(Role.MAPPER, Role.SHARER), true); |
| 492 | + |
| 493 | + post(vertx, testContext, "api/service_link/update", jo.encode(), response -> { |
| 494 | + assertEquals(200, response.statusCode()); |
| 495 | + checkServiceLinkJson(expected, response.bodyAsJsonObject()); |
| 496 | + verify(serviceStoreWriter, never()).upload(null, null); |
| 497 | + verify(serviceLinkStoreWriter, times(1)).upload(List.of(expected), null); |
| 498 | + |
| 499 | + testContext.completeNow(); |
| 500 | + }); |
| 501 | + } |
| 502 | + |
445 | 503 | @Test |
446 | 504 | void updateServiceLink_roleDoesNotExist_returnsError(Vertx vertx, VertxTestContext testContext) { |
447 | 505 | fakeAuth(Role.MAINTAINER); |
@@ -622,20 +680,20 @@ void addServiceLink_linkIdRegex_validation(String linkIdRegex, String linkId, bo |
622 | 680 |
|
623 | 681 | private static java.util.stream.Stream<org.junit.jupiter.params.provider.Arguments> linkIdRegexCases() { |
624 | 682 | return java.util.stream.Stream.of( |
625 | | - org.junit.jupiter.params.provider.Arguments.of("link[0-9]+", "invalidLink", false), |
626 | | - org.junit.jupiter.params.provider.Arguments.of("link[0-9]+", "link42", true), |
627 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "XY12345", true), // snowflake valid |
628 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "UID2_ENVIRONMENT", true), // snowflake valid |
629 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "xy12345", false), // snowflake invalid, lowercase |
630 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "X", true), // snowflake valid, minimum length |
631 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "X".repeat(256), true), // snowflake valid, maximum length |
632 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "X".repeat(257), false), // snowflake invalid, exceeds maximum length |
633 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", " XY12345", false), // snowflake invalid, leading whitespace |
634 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "XY12345 ", false), // snowflake invalid, trailing whitespace |
635 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "XY 12345", false), // snowflake invalid, whitespace in the middle |
636 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "", false), // snowflake invalid, empty |
637 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", " ", false), // snowflake invalid, just whitespace |
638 | | - org.junit.jupiter.params.provider.Arguments.of("^[A-Z0-9_]{1,256}$", "XY_12345", true) // snowflake valid, used underscore |
| 683 | + Arguments.of("link[0-9]+", "invalidLink", false), |
| 684 | + Arguments.of("link[0-9]+", "link42", true), |
| 685 | + Arguments.of("^[A-Z0-9_]{1,256}$", "XY12345", true), // snowflake valid |
| 686 | + Arguments.of("^[A-Z0-9_]{1,256}$", "UID2_ENVIRONMENT", true), // snowflake valid |
| 687 | + Arguments.of("^[A-Z0-9_]{1,256}$", "xy12345", false), // snowflake invalid, lowercase |
| 688 | + Arguments.of("^[A-Z0-9_]{1,256}$", "X", true), // snowflake valid, minimum length |
| 689 | + Arguments.of("^[A-Z0-9_]{1,256}$", "X".repeat(256), true), // snowflake valid, maximum length |
| 690 | + Arguments.of("^[A-Z0-9_]{1,256}$", "X".repeat(257), false), // snowflake invalid, exceeds maximum length |
| 691 | + Arguments.of("^[A-Z0-9_]{1,256}$", " XY12345", false), // snowflake invalid, leading whitespace |
| 692 | + Arguments.of("^[A-Z0-9_]{1,256}$", "XY12345 ", false), // snowflake invalid, trailing whitespace |
| 693 | + Arguments.of("^[A-Z0-9_]{1,256}$", "XY 12345", false), // snowflake invalid, whitespace in the middle |
| 694 | + Arguments.of("^[A-Z0-9_]{1,256}$", "", false), // snowflake invalid, empty |
| 695 | + Arguments.of("^[A-Z0-9_]{1,256}$", " ", false), // snowflake invalid, just whitespace |
| 696 | + Arguments.of("^[A-Z0-9_]{1,256}$", "XY_12345", true) // snowflake valid, used underscore |
639 | 697 | ); |
640 | 698 | } |
641 | 699 | } |
0 commit comments