From 7a4abd93dcbb1bdb74e54dcfb5caa59c9d7f5553 Mon Sep 17 00:00:00 2001 From: Juan Celhay Date: Tue, 1 Oct 2024 18:20:21 -0400 Subject: [PATCH] Add discount price param to GenerateAllocationTokens command (#2578) * Add discount price param to GenerateAlloCationTokens command * add discount price param to UpdateAllocationTokens command --- .../GenerateAllocationTokensCommand.java | 13 ++++++ .../tools/UpdateAllocationTokensCommand.java | 13 ++++++ .../GenerateAllocationTokensCommandTest.java | 42 +++++++++++++++++++ .../UpdateAllocationTokensCommandTest.java | 10 +++++ 4 files changed, 78 insertions(+) diff --git a/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java b/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java index 7a0abb45d..1b226e149 100644 --- a/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java +++ b/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java @@ -47,6 +47,7 @@ import google.registry.model.domain.token.AllocationToken.RegistrationBehavior; import google.registry.model.domain.token.AllocationToken.TokenStatus; import google.registry.model.domain.token.AllocationToken.TokenType; import google.registry.persistence.VKey; +import google.registry.tools.params.MoneyParameter; import google.registry.tools.params.TransitionListParameter.TokenStatusTransitions; import google.registry.util.CollectionUtils; import google.registry.util.DomainNameUtils; @@ -140,6 +141,17 @@ class GenerateAllocationTokensCommand implements Command { arity = 1) private Boolean discountPremiums; + @Parameter( + names = {"--discount_price"}, + description = + "A discount that allows the setting of promotional prices. This field is different from " + + "{@code discountFraction} because the price set here is treated as the domain " + + "price, versus {@code discountFraction} that applies a fraction discount to the " + + "domain base price. Use CURRENCY PRICE format, example: USD 777.99", + converter = MoneyParameter.class, + validateWith = MoneyParameter.class) + private Money discountPrice; + @Parameter( names = {"--discount_years"}, description = "The number of years the discount applies for. Default is 1, max value is 10.") @@ -233,6 +245,7 @@ class GenerateAllocationTokensCommand implements Command { .collect(toImmutableSet())); Optional.ofNullable(discountFraction).ifPresent(token::setDiscountFraction); Optional.ofNullable(discountPremiums).ifPresent(token::setDiscountPremiums); + Optional.ofNullable(discountPrice).ifPresent(token::setDiscountPrice); Optional.ofNullable(discountYears).ifPresent(token::setDiscountYears); Optional.ofNullable(tokenStatusTransitions) .ifPresent(token::setTokenStatusTransitions); diff --git a/core/src/main/java/google/registry/tools/UpdateAllocationTokensCommand.java b/core/src/main/java/google/registry/tools/UpdateAllocationTokensCommand.java index 7958327f5..4c9d32a29 100644 --- a/core/src/main/java/google/registry/tools/UpdateAllocationTokensCommand.java +++ b/core/src/main/java/google/registry/tools/UpdateAllocationTokensCommand.java @@ -34,6 +34,7 @@ import google.registry.model.domain.token.AllocationToken; import google.registry.model.domain.token.AllocationToken.RegistrationBehavior; import google.registry.model.domain.token.AllocationToken.TokenStatus; import google.registry.model.domain.token.AllocationToken.TokenType; +import google.registry.tools.params.MoneyParameter; import google.registry.tools.params.StringListParameter; import google.registry.tools.params.TransitionListParameter.TokenStatusTransitions; import java.util.List; @@ -91,6 +92,17 @@ final class UpdateAllocationTokensCommand extends UpdateOrDeleteAllocationTokens arity = 1) private Boolean discountPremiums; + @Parameter( + names = {"--discount_price"}, + description = + "A discount that allows the setting of promotional prices. This field is different from " + + "{@code discountFraction} because the price set here is treated as the domain " + + "price, versus {@code discountFraction} that applies a fraction discount to the " + + "domain base price. Use CURRENCY PRICE format, example: USD 777.99", + converter = MoneyParameter.class, + validateWith = MoneyParameter.class) + private Money discountPrice; + @Parameter( names = {"-y", "--discount_years"}, description = "The number of years the discount applies for. Default is 1, max value is 10.") @@ -203,6 +215,7 @@ final class UpdateAllocationTokensCommand extends UpdateOrDeleteAllocationTokens .collect(toImmutableSet()))); Optional.ofNullable(discountFraction).ifPresent(builder::setDiscountFraction); Optional.ofNullable(discountPremiums).ifPresent(builder::setDiscountPremiums); + Optional.ofNullable(discountPrice).ifPresent(builder::setDiscountPrice); Optional.ofNullable(discountYears).ifPresent(builder::setDiscountYears); Optional.ofNullable(tokenStatusTransitions).ifPresent(builder::setTokenStatusTransitions); diff --git a/core/src/test/java/google/registry/tools/GenerateAllocationTokensCommandTest.java b/core/src/test/java/google/registry/tools/GenerateAllocationTokensCommandTest.java index 9f967cf1e..070f78c00 100644 --- a/core/src/test/java/google/registry/tools/GenerateAllocationTokensCommandTest.java +++ b/core/src/test/java/google/registry/tools/GenerateAllocationTokensCommandTest.java @@ -164,6 +164,48 @@ class GenerateAllocationTokensCommandTest extends CommandTestCasenaturalOrder() + .put(START_OF_TIME, TokenStatus.NOT_STARTED) + .put(promoStart, TokenStatus.VALID) + .put(promoEnd, TokenStatus.ENDED) + .build()) + .build()); + } + @Test void testSuccess_specifyTokens() throws Exception { runCommand("--tokens", "foobar,foobaz"); diff --git a/core/src/test/java/google/registry/tools/UpdateAllocationTokensCommandTest.java b/core/src/test/java/google/registry/tools/UpdateAllocationTokensCommandTest.java index 1ec37cd0b..56b8c8d52 100644 --- a/core/src/test/java/google/registry/tools/UpdateAllocationTokensCommandTest.java +++ b/core/src/test/java/google/registry/tools/UpdateAllocationTokensCommandTest.java @@ -141,6 +141,16 @@ class UpdateAllocationTokensCommandTest extends CommandTestCase