diff --git a/core/src/main/java/google/registry/model/tld/label/PremiumList.java b/core/src/main/java/google/registry/model/tld/label/PremiumList.java index 80672466faf..709f68767b0 100644 --- a/core/src/main/java/google/registry/model/tld/label/PremiumList.java +++ b/core/src/main/java/google/registry/model/tld/label/PremiumList.java @@ -169,6 +169,14 @@ public Builder setRevisionId(Long revisionId) { getInstance().revisionId = revisionId; return this; } + + @Override + public PremiumEntry build() { + checkArgument(getInstance().price != null, "Price must not be null"); + checkArgument( + getInstance().price.compareTo(BigDecimal.ZERO) >= 0, "Price must not be negative"); + return super.build(); + } } } diff --git a/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java b/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java index 3cffd5291f8..39471ed4988 100644 --- a/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java +++ b/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java @@ -110,28 +110,44 @@ void testParse_canIncludeOrNotIncludeCurrencyUnit() { @Test void testValidation_labelMustBeLowercase() { - Exception e = - assertThrows( - IllegalArgumentException.class, - () -> - new PremiumEntry.Builder() - .setPrice(BigDecimal.valueOf(399)) - .setLabel("UPPER.tld") - .build()); - assertThat(e).hasMessageThat().contains("must be in puny-coded, lower-case form"); + assertThat( + assertThrows( + IllegalArgumentException.class, + () -> + new PremiumEntry.Builder() + .setPrice(BigDecimal.valueOf(399)) + .setLabel("UPPER.tld") + .build())) + .hasMessageThat() + .contains("must be in puny-coded, lower-case form"); + } + + @Test + void testValidation_priceMustNotBeNegative() { + assertThat( + assertThrows( + IllegalArgumentException.class, + () -> + new PremiumEntry.Builder() + .setPrice(BigDecimal.valueOf(-100)) + .setLabel("anchor") + .build())) + .hasMessageThat() + .isEqualTo("Price must not be negative"); } @Test void testValidation_labelMustBePunyCoded() { - Exception e = - assertThrows( - IllegalArgumentException.class, - () -> - new PremiumEntry.Builder() - .setPrice(BigDecimal.valueOf(399)) - .setLabel("lower.みんな") - .build()); - assertThat(e).hasMessageThat().contains("must be in puny-coded, lower-case form"); + assertThat( + assertThrows( + IllegalArgumentException.class, + () -> + new PremiumEntry.Builder() + .setPrice(BigDecimal.valueOf(399)) + .setLabel("lower.みんな") + .build())) + .hasMessageThat() + .contains("must be in puny-coded, lower-case form"); } @Test