diff --git a/core/src/main/java/google/registry/flows/domain/DomainRenewFlow.java b/core/src/main/java/google/registry/flows/domain/DomainRenewFlow.java index 68da19693..757141391 100644 --- a/core/src/main/java/google/registry/flows/domain/DomainRenewFlow.java +++ b/core/src/main/java/google/registry/flows/domain/DomainRenewFlow.java @@ -53,8 +53,8 @@ import google.registry.flows.custom.DomainRenewFlowCustomLogic.BeforeResponseRet import google.registry.flows.custom.DomainRenewFlowCustomLogic.BeforeSaveParameters; import google.registry.flows.custom.EntityChanges; import google.registry.flows.domain.token.AllocationTokenFlowUtils; -import google.registry.flows.domain.token.AllocationTokenFlowUtils.MissingRemoveDomainTokenOnBulkPricingDomainException; -import google.registry.flows.domain.token.AllocationTokenFlowUtils.RemoveDomainTokenOnNonBulkPricingDomainException; +import google.registry.flows.domain.token.AllocationTokenFlowUtils.MissingRemoveBulkPricingTokenOnBulkPricingDomainException; +import google.registry.flows.domain.token.AllocationTokenFlowUtils.RemoveBulkPricingTokenOnNonBulkPricingDomainException; import google.registry.model.ImmutableObject; import google.registry.model.billing.BillingBase.Reason; import google.registry.model.billing.BillingEvent; @@ -121,8 +121,8 @@ import org.joda.time.Duration; * @error {@link DomainFlowUtils.RegistrarMustBeActiveForThisOperationException} * @error {@link DomainFlowUtils.UnsupportedFeeAttributeException} * @error {@link DomainRenewFlow.IncorrectCurrentExpirationDateException} - * @error {@link MissingRemoveDomainTokenOnBulkPricingDomainException} - * @error {@link RemoveDomainTokenOnNonBulkPricingDomainException} + * @error {@link MissingRemoveBulkPricingTokenOnBulkPricingDomainException} + * @error {@link RemoveBulkPricingTokenOnNonBulkPricingDomainException} * @error {@link * google.registry.flows.domain.token.AllocationTokenFlowUtils.AllocationTokenNotValidForDomainException} * @error {@link @@ -328,7 +328,7 @@ public final class DomainRenewFlow implements MutatingFlow { checkHasBillingAccount(registrarId, existingDomain.getTld()); } verifyUnitIsYears(command.getPeriod()); - // We only allow __REMOVEDOMAIN__ token on bulk pricing domains for now + // We only allow __REMOVE_BULK_PRICING__ token on bulk pricing domains for now verifyTokenAllowedOnDomain(existingDomain, allocationToken); // If the date they specify doesn't match the expiration, fail. (This is an idempotence check). if (!command.getCurrentExpirationDate().equals( diff --git a/core/src/main/java/google/registry/flows/domain/token/AllocationTokenFlowUtils.java b/core/src/main/java/google/registry/flows/domain/token/AllocationTokenFlowUtils.java index dca4cc19e..1d6d67438 100644 --- a/core/src/main/java/google/registry/flows/domain/token/AllocationTokenFlowUtils.java +++ b/core/src/main/java/google/registry/flows/domain/token/AllocationTokenFlowUtils.java @@ -243,21 +243,21 @@ public class AllocationTokenFlowUtils { Domain domain, Optional allocationToken) throws EppException { boolean domainHasBulkToken = domain.getCurrentBulkToken().isPresent(); - boolean hasRemoveDomainToken = + boolean hasRemoveBulkPricingToken = allocationToken.isPresent() - && TokenBehavior.REMOVE_DOMAIN.equals(allocationToken.get().getTokenBehavior()); + && TokenBehavior.REMOVE_BULK_PRICING.equals(allocationToken.get().getTokenBehavior()); - if (hasRemoveDomainToken && !domainHasBulkToken) { - throw new RemoveDomainTokenOnNonBulkPricingDomainException(); - } else if (!hasRemoveDomainToken && domainHasBulkToken) { - throw new MissingRemoveDomainTokenOnBulkPricingDomainException(); + if (hasRemoveBulkPricingToken && !domainHasBulkToken) { + throw new RemoveBulkPricingTokenOnNonBulkPricingDomainException(); + } else if (!hasRemoveBulkPricingToken && domainHasBulkToken) { + throw new MissingRemoveBulkPricingTokenOnBulkPricingDomainException(); } } public static Domain maybeApplyBulkPricingRemovalToken( Domain domain, Optional allocationToken) { if (!allocationToken.isPresent() - || !TokenBehavior.REMOVE_DOMAIN.equals(allocationToken.get().getTokenBehavior())) { + || !TokenBehavior.REMOVE_BULK_PRICING.equals(allocationToken.get().getTokenBehavior())) { return domain; } @@ -338,19 +338,19 @@ public class AllocationTokenFlowUtils { } } - /** The __REMOVEDOMAIN__ token is missing on a bulk pricing domain command */ - public static class MissingRemoveDomainTokenOnBulkPricingDomainException + /** The __REMOVE_BULK_PRICING__ token is missing on a bulk pricing domain command */ + public static class MissingRemoveBulkPricingTokenOnBulkPricingDomainException extends AssociationProhibitsOperationException { - MissingRemoveDomainTokenOnBulkPricingDomainException() { + MissingRemoveBulkPricingTokenOnBulkPricingDomainException() { super("Domains that are inside bulk pricing cannot be explicitly renewed or transferred"); } } - /** The __REMOVEDOMAIN__ token is not allowed on non bulk pricing domains */ - public static class RemoveDomainTokenOnNonBulkPricingDomainException + /** The __REMOVE_BULK_PRICING__ token is not allowed on non bulk pricing domains */ + public static class RemoveBulkPricingTokenOnNonBulkPricingDomainException extends AssociationProhibitsOperationException { - RemoveDomainTokenOnNonBulkPricingDomainException() { - super("__REMOVEDOMAIN__ token is not allowed on non bulk pricing domains"); + RemoveBulkPricingTokenOnNonBulkPricingDomainException() { + super("__REMOVE_BULK_PRICING__ token is not allowed on non bulk pricing domains"); } } } diff --git a/core/src/main/java/google/registry/model/domain/token/AllocationToken.java b/core/src/main/java/google/registry/model/domain/token/AllocationToken.java index 6c08dd3d5..40202ba92 100644 --- a/core/src/main/java/google/registry/model/domain/token/AllocationToken.java +++ b/core/src/main/java/google/registry/model/domain/token/AllocationToken.java @@ -77,10 +77,10 @@ import org.joda.time.DateTime; public class AllocationToken extends UpdateAutoTimestampEntity implements Buildable { private static final long serialVersionUID = -3954475393220876903L; - private static final String REMOVE_DOMAIN = "__REMOVEDOMAIN__"; + private static final String REMOVE_BULK_PRICING = "__REMOVE_BULK_PRICING__"; private static final ImmutableMap STATIC_TOKEN_BEHAVIORS = - ImmutableMap.of(REMOVE_DOMAIN, TokenBehavior.REMOVE_DOMAIN); + ImmutableMap.of(REMOVE_BULK_PRICING, TokenBehavior.REMOVE_BULK_PRICING); // Promotions should only move forward, and ENDED / CANCELLED are terminal states. private static final ImmutableMultimap VALID_TOKEN_STATUS_TRANSITIONS = @@ -91,10 +91,10 @@ public class AllocationToken extends UpdateAutoTimestampEntity implements Builda private static final ImmutableMap BEHAVIORAL_TOKENS = ImmutableMap.of( - REMOVE_DOMAIN, + REMOVE_BULK_PRICING, new AllocationToken.Builder() .setTokenType(TokenType.UNLIMITED_USE) - .setToken(REMOVE_DOMAIN) + .setToken(REMOVE_BULK_PRICING) .build()); public static Optional maybeGetStaticTokenInstance(String name) { @@ -142,10 +142,10 @@ public class AllocationToken extends UpdateAutoTimestampEntity implements Builda /** No special behavior */ DEFAULT, /** - * REMOVE_DOMAIN triggers domain removal from a bulk pricing package, bypasses DEFAULT token - * validations. + * REMOVE_BULK_PRICING triggers domain removal from a bulk pricing package, bypasses DEFAULT + * token validations. */ - REMOVE_DOMAIN + REMOVE_BULK_PRICING } /** The status of this token with regard to any potential promotion. */ diff --git a/core/src/test/java/google/registry/flows/domain/DomainRenewFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainRenewFlowTest.java index ea76dc675..78ebcea95 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainRenewFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainRenewFlowTest.java @@ -77,8 +77,8 @@ import google.registry.flows.domain.token.AllocationTokenFlowUtils.AllocationTok import google.registry.flows.domain.token.AllocationTokenFlowUtils.AllocationTokenNotValidForTldException; import google.registry.flows.domain.token.AllocationTokenFlowUtils.AlreadyRedeemedAllocationTokenException; import google.registry.flows.domain.token.AllocationTokenFlowUtils.InvalidAllocationTokenException; -import google.registry.flows.domain.token.AllocationTokenFlowUtils.MissingRemoveDomainTokenOnBulkPricingDomainException; -import google.registry.flows.domain.token.AllocationTokenFlowUtils.RemoveDomainTokenOnNonBulkPricingDomainException; +import google.registry.flows.domain.token.AllocationTokenFlowUtils.MissingRemoveBulkPricingTokenOnBulkPricingDomainException; +import google.registry.flows.domain.token.AllocationTokenFlowUtils.RemoveBulkPricingTokenOnNonBulkPricingDomainException; import google.registry.flows.exceptions.ResourceStatusProhibitsOperationException; import google.registry.model.billing.BillingBase.Flag; import google.registry.model.billing.BillingBase.Reason; @@ -1276,12 +1276,13 @@ class DomainRenewFlowTest extends ResourceFlowTestCase ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "token")); EppException thrown = - assertThrows(MissingRemoveDomainTokenOnBulkPricingDomainException.class, this::runFlow); + assertThrows( + MissingRemoveBulkPricingTokenOnBulkPricingDomainException.class, this::runFlow); assertAboutEppExceptions().that(thrown).marshalsToXml(); } @Test - void testFailsToRenewBulkPricingDomainNoRemoveDomainToken() throws Exception { + void testFailsToRenewBulkPricingDomainNoRemoveBulkPricingToken() throws Exception { AllocationToken token = persistResource( new AllocationToken.Builder() @@ -1299,25 +1300,26 @@ class DomainRenewFlowTest extends ResourceFlowTestCase setEppInput("domain_renew.xml", ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "5")); EppException thrown = - assertThrows(MissingRemoveDomainTokenOnBulkPricingDomainException.class, this::runFlow); + assertThrows( + MissingRemoveBulkPricingTokenOnBulkPricingDomainException.class, this::runFlow); assertAboutEppExceptions().that(thrown).marshalsToXml(); } @Test - void testFailsToRenewNonBulkPricingDomainWithRemoveDomainToken() throws Exception { + void testFailsToRenewNonBulkPricingDomainWithRemoveBulkPricingToken() throws Exception { persistDomain(); setEppInput( "domain_renew_allocationtoken.xml", - ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEDOMAIN__")); + ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVE_BULK_PRICING__")); EppException thrown = - assertThrows(RemoveDomainTokenOnNonBulkPricingDomainException.class, this::runFlow); + assertThrows(RemoveBulkPricingTokenOnNonBulkPricingDomainException.class, this::runFlow); assertAboutEppExceptions().that(thrown).marshalsToXml(); } @Test - void testSuccesfullyAppliesRemoveDomainToken() throws Exception { + void testSuccesfullyAppliesRemoveBulkPricingToken() throws Exception { AllocationToken token = persistResource( new AllocationToken.Builder() @@ -1333,7 +1335,7 @@ class DomainRenewFlowTest extends ResourceFlowTestCase reloadResourceByForeignKey().asBuilder().setCurrentBulkToken(token.createVKey()).build()); setEppInput( "domain_renew_allocationtoken.xml", - ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEDOMAIN__")); + ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVE_BULK_PRICING__")); doSuccessfulTest( "domain_renew_response.xml", @@ -1347,7 +1349,7 @@ class DomainRenewFlowTest extends ResourceFlowTestCase } @Test - void testDryRunRemoveDomainToken() throws Exception { + void testDryRunRemoveBulkPricingToken() throws Exception { AllocationToken token = persistResource( new AllocationToken.Builder() @@ -1364,7 +1366,7 @@ class DomainRenewFlowTest extends ResourceFlowTestCase setEppInput( "domain_renew_allocationtoken.xml", - ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEDOMAIN__")); + ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVE_BULK_PRICING__")); dryRunFlowAssertResponse( loadFile( diff --git a/docs/flows.md b/docs/flows.md index 4d2f67c17..18d489d57 100644 --- a/docs/flows.md +++ b/docs/flows.md @@ -499,8 +499,10 @@ comes in at the exact millisecond that the domain would have expired. * Resource status prohibits this operation. * The allocation token is not currently valid. * 2305 - * The __REMOVEDOMAIN__ token is missing on a bulk pricing domain command - * The __REMOVEDOMAIN__ token is not allowed on non bulk pricing domains + * The __REMOVE_BULK_PRICING__ token is missing on a bulk pricing domain + command + * The __REMOVE_BULK_PRICING__ token is not allowed on non bulk pricing + domains * The allocation token is not valid for this domain. * The allocation token is not valid for this registrar. * The allocation token is not valid for this TLD.