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 a1f65512e..b97ded978 100644 --- a/core/src/main/java/google/registry/flows/domain/DomainRenewFlow.java +++ b/core/src/main/java/google/registry/flows/domain/DomainRenewFlow.java @@ -53,6 +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.MissingRemoveDomainTokenOnPackageDomainException; +import google.registry.flows.domain.token.AllocationTokenFlowUtils.RemoveDomainTokenOnNonPackageDomainException; import google.registry.model.ImmutableObject; import google.registry.model.billing.BillingBase.Reason; import google.registry.model.billing.BillingEvent; @@ -119,10 +121,8 @@ import org.joda.time.Duration; * @error {@link DomainFlowUtils.RegistrarMustBeActiveForThisOperationException} * @error {@link DomainFlowUtils.UnsupportedFeeAttributeException} * @error {@link DomainRenewFlow.IncorrectCurrentExpirationDateException} - * @error {@link - * google.registry.flows.domain.token.AllocationTokenFlowUtils.MissingRemovePackageTokenOnPackageDomainException} - * @error {@link - * google.registry.flows.domain.token.AllocationTokenFlowUtils.RemovePackageTokenOnNonPackageDomainException} + * @error {@link MissingRemoveDomainTokenOnPackageDomainException} + * @error {@link RemoveDomainTokenOnNonPackageDomainException} * @error {@link * google.registry.flows.domain.token.AllocationTokenFlowUtils.AllocationTokenNotValidForDomainException} * @error {@link 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 ed51eb9a1..e24e5d158 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 domainHasPackageToken = domain.getCurrentPackageToken().isPresent(); - boolean hasRemovePackageToken = + boolean hasRemoveDomainToken = allocationToken.isPresent() - && TokenBehavior.REMOVE_PACKAGE.equals(allocationToken.get().getTokenBehavior()); + && TokenBehavior.REMOVE_DOMAIN.equals(allocationToken.get().getTokenBehavior()); - if (hasRemovePackageToken && !domainHasPackageToken) { - throw new RemovePackageTokenOnNonPackageDomainException(); - } else if (!hasRemovePackageToken && domainHasPackageToken) { - throw new MissingRemovePackageTokenOnPackageDomainException(); + if (hasRemoveDomainToken && !domainHasPackageToken) { + throw new RemoveDomainTokenOnNonPackageDomainException(); + } else if (!hasRemoveDomainToken && domainHasPackageToken) { + throw new MissingRemoveDomainTokenOnPackageDomainException(); } } public static Domain maybeApplyPackageRemovalToken( Domain domain, Optional allocationToken) { if (!allocationToken.isPresent() - || !TokenBehavior.REMOVE_PACKAGE.equals(allocationToken.get().getTokenBehavior())) { + || !TokenBehavior.REMOVE_DOMAIN.equals(allocationToken.get().getTokenBehavior())) { return domain; } @@ -338,19 +338,19 @@ public class AllocationTokenFlowUtils { } } - /** The __REMOVEPACKAGE__ token is missing on a package domain command */ - public static class MissingRemovePackageTokenOnPackageDomainException + /** The __REMOVEDOMAIN__ token is missing on a package domain command */ + public static class MissingRemoveDomainTokenOnPackageDomainException extends AssociationProhibitsOperationException { - MissingRemovePackageTokenOnPackageDomainException() { + MissingRemoveDomainTokenOnPackageDomainException() { super("Domains that are inside packages cannot be explicitly renewed or transferred"); } } - /** The __REMOVEPACKAGE__ token is not allowed on non package domains */ - public static class RemovePackageTokenOnNonPackageDomainException + /** The __REMOVEDOMAIN__ token is not allowed on non package domains */ + public static class RemoveDomainTokenOnNonPackageDomainException extends AssociationProhibitsOperationException { - RemovePackageTokenOnNonPackageDomainException() { - super("__REMOVEPACKAGE__ token is not allowed on non package domains"); + RemoveDomainTokenOnNonPackageDomainException() { + super("__REMOVEDOMAIN__ token is not allowed on non package 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 a327d7bc2..d73c2aa90 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_PACKAGE = "__REMOVEPACKAGE__"; + private static final String REMOVE_DOMAIN = "__REMOVEDOMAIN__"; private static final ImmutableMap STATIC_TOKEN_BEHAVIORS = - ImmutableMap.of(REMOVE_PACKAGE, TokenBehavior.REMOVE_PACKAGE); + ImmutableMap.of(REMOVE_DOMAIN, TokenBehavior.REMOVE_DOMAIN); // 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_PACKAGE, + REMOVE_DOMAIN, new AllocationToken.Builder() .setTokenType(TokenType.UNLIMITED_USE) - .setToken(REMOVE_PACKAGE) + .setToken(REMOVE_DOMAIN) .build()); public static Optional maybeGetStaticTokenInstance(String name) { @@ -137,10 +137,10 @@ public class AllocationToken extends UpdateAutoTimestampEntity implements Builda /** No special behavior */ DEFAULT, /** - * REMOVE_PACKAGE triggers domain removal from promotional package, bypasses DEFAULT token - * validations. + * REMOVE_DOMAIN triggers domain removal from promotional bulk (package) pricing, bypasses + * DEFAULT token validations. */ - REMOVE_PACKAGE + REMOVE_DOMAIN } /** 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 eef162415..808f1d913 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.MissingRemovePackageTokenOnPackageDomainException; -import google.registry.flows.domain.token.AllocationTokenFlowUtils.RemovePackageTokenOnNonPackageDomainException; +import google.registry.flows.domain.token.AllocationTokenFlowUtils.MissingRemoveDomainTokenOnPackageDomainException; +import google.registry.flows.domain.token.AllocationTokenFlowUtils.RemoveDomainTokenOnNonPackageDomainException; import google.registry.flows.exceptions.ResourceStatusProhibitsOperationException; import google.registry.model.billing.BillingBase.Flag; import google.registry.model.billing.BillingBase.Reason; @@ -1271,12 +1271,12 @@ class DomainRenewFlowTest extends ResourceFlowTestCase ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "abc123")); EppException thrown = - assertThrows(MissingRemovePackageTokenOnPackageDomainException.class, this::runFlow); + assertThrows(MissingRemoveDomainTokenOnPackageDomainException.class, this::runFlow); assertAboutEppExceptions().that(thrown).marshalsToXml(); } @Test - void testFailsToRenewPackageDomainNoRemovePackageToken() throws Exception { + void testFailsToRenewPackageDomainNoRemoveDomainToken() throws Exception { AllocationToken token = persistResource( new AllocationToken.Builder() @@ -1296,25 +1296,25 @@ class DomainRenewFlowTest extends ResourceFlowTestCase setEppInput("domain_renew.xml", ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "5")); EppException thrown = - assertThrows(MissingRemovePackageTokenOnPackageDomainException.class, this::runFlow); + assertThrows(MissingRemoveDomainTokenOnPackageDomainException.class, this::runFlow); assertAboutEppExceptions().that(thrown).marshalsToXml(); } @Test - void testFailsToRenewNonPackageDomainWithRemovePackageToken() throws Exception { + void testFailsToRenewNonPackageDomainWithRemoveDomainToken() throws Exception { persistDomain(); setEppInput( "domain_renew_allocationtoken.xml", - ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEPACKAGE__")); + ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEDOMAIN__")); EppException thrown = - assertThrows(RemovePackageTokenOnNonPackageDomainException.class, this::runFlow); + assertThrows(RemoveDomainTokenOnNonPackageDomainException.class, this::runFlow); assertAboutEppExceptions().that(thrown).marshalsToXml(); } @Test - void testSuccesfullyAppliesRemovePackageToken() throws Exception { + void testSuccesfullyAppliesRemoveDomainToken() throws Exception { AllocationToken token = persistResource( new AllocationToken.Builder() @@ -1332,7 +1332,7 @@ class DomainRenewFlowTest extends ResourceFlowTestCase .build()); setEppInput( "domain_renew_allocationtoken.xml", - ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEPACKAGE__")); + ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEDOMAIN__")); doSuccessfulTest( "domain_renew_response.xml", @@ -1346,7 +1346,7 @@ class DomainRenewFlowTest extends ResourceFlowTestCase } @Test - void testDryRunRemovePackageToken() throws Exception { + void testDryRunRemoveDomainToken() throws Exception { AllocationToken token = persistResource( new AllocationToken.Builder() @@ -1365,7 +1365,7 @@ class DomainRenewFlowTest extends ResourceFlowTestCase setEppInput( "domain_renew_allocationtoken.xml", - ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEPACKAGE__")); + ImmutableMap.of("DOMAIN", "example.tld", "YEARS", "2", "TOKEN", "__REMOVEDOMAIN__")); dryRunFlowAssertResponse( loadFile( diff --git a/docs/flows.md b/docs/flows.md index c51a49ca1..bdc27346b 100644 --- a/docs/flows.md +++ b/docs/flows.md @@ -499,8 +499,8 @@ 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 __REMOVEPACKAGE__ token is missing on a package domain command - * The __REMOVEPACKAGE__ token is not allowed on non package domains + * The __REMOVEDOMAIN__ token is missing on a package domain command + * The __REMOVEDOMAIN__ token is not allowed on non package 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.