From c23eed6ec437c47cb08944a19583a9fbba310ce4 Mon Sep 17 00:00:00 2001 From: gbrodman Date: Fri, 12 Jul 2024 14:47:15 -0400 Subject: [PATCH] Change domain-create fee response for tiered promos (#2491) As requested, for registrars participating in these tiered pricing promos that wish to receive this type of response, we make the following changes: 1. The pre-promotional (i.e. base tier) price is returned as the standard domain-create fee when running a domain check. 2. The promotional (i.e. correct) price is returned as a special custom command class with a name of "STANDARD PROMO" when running a domain check 3. Domain creates will return the non-promotional (i.e. incorrect) price rather than the actual promotional price. This PR does only number 3. See PR #2489 for the others. --- .../flows/domain/DomainCreateFlow.java | 14 +- .../flows/domain/DomainCreateFlowTest.java | 392 ++++++------------ 2 files changed, 139 insertions(+), 267 deletions(-) diff --git a/core/src/main/java/google/registry/flows/domain/DomainCreateFlow.java b/core/src/main/java/google/registry/flows/domain/DomainCreateFlow.java index 7c604cfeb..700b43ac0 100644 --- a/core/src/main/java/google/registry/flows/domain/DomainCreateFlow.java +++ b/core/src/main/java/google/registry/flows/domain/DomainCreateFlow.java @@ -59,6 +59,7 @@ import static google.registry.util.DateTimeUtils.leapSafeAddYears; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.net.InternetDomainName; +import google.registry.config.RegistryConfig; import google.registry.flows.EppException; import google.registry.flows.EppException.CommandUseErrorException; import google.registry.flows.EppException.ParameterValuePolicyErrorException; @@ -438,11 +439,22 @@ public final class DomainCreateFlow implements MutatingFlow { .build()); persistEntityChanges(entityChanges); + // If the registrar is participating in tiered pricing promos, return the standard price in the + // response (even if the actual charged price is less) + boolean shouldShowDefaultPrice = + defaultTokenUsed + && RegistryConfig.getTieredPricingPromotionRegistrarIds().contains(registrarId); + FeesAndCredits responseFeesAndCredits = + shouldShowDefaultPrice + ? pricingLogic.getCreatePrice( + tld, targetId, now, years, isAnchorTenant, isSunriseCreate, Optional.empty()) + : feesAndCredits; + BeforeResponseReturnData responseData = flowCustomLogic.beforeResponse( BeforeResponseParameters.newBuilder() .setResData(DomainCreateData.create(targetId, now, registrationExpirationTime)) - .setResponseExtensions(createResponseExtensions(feeCreate, feesAndCredits)) + .setResponseExtensions(createResponseExtensions(feeCreate, responseFeesAndCredits)) .build()); return responseBuilder .setResData(responseData.resData()) diff --git a/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java index 823193105..f78ae631a 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java @@ -48,6 +48,7 @@ import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.createTlds; import static google.registry.testing.DatabaseHelper.deleteTld; import static google.registry.testing.DatabaseHelper.getHistoryEntries; +import static google.registry.testing.DatabaseHelper.loadAllOf; import static google.registry.testing.DatabaseHelper.loadRegistrar; import static google.registry.testing.DatabaseHelper.newContact; import static google.registry.testing.DatabaseHelper.newHost; @@ -1099,19 +1100,10 @@ class DomainCreateFlowTest extends ResourceFlowTestCasenaturalOrder() - .put(START_OF_TIME, TokenStatus.NOT_STARTED) - .put(clock.nowUtc().minusDays(2), TokenStatus.VALID) - .put(clock.nowUtc().minusDays(1), TokenStatus.ENDED) - .build()) - .build()); persistResource( - Tld.get("tld") + setupDefaultTokenWithDiscount() .asBuilder() - .setDefaultPromoTokens( - ImmutableList.of(defaultToken1.createVKey(), defaultToken2.createVKey())) + .setTokenStatusTransitions( + ImmutableSortedMap.naturalOrder() + .put(START_OF_TIME, TokenStatus.NOT_STARTED) + .put(clock.nowUtc().minusDays(2), TokenStatus.VALID) + .put(clock.nowUtc().minusDays(1), TokenStatus.ENDED) + .build()) .build()); doSuccessfulTest(); } @@ -2088,20 +1866,10 @@ class DomainCreateFlowTest extends ResourceFlowTestCase>builder() + .addAll(tld.getDefaultPromoTokens()) + .add(allocationToken.createVKey()) + .build()) + .build()); + return allocationToken; + } }