diff --git a/java/google/registry/flows/domain/DomainFlowUtils.java b/java/google/registry/flows/domain/DomainFlowUtils.java index f30ef953f..7eeff164e 100644 --- a/java/google/registry/flows/domain/DomainFlowUtils.java +++ b/java/google/registry/flows/domain/DomainFlowUtils.java @@ -79,7 +79,6 @@ import google.registry.model.mark.Mark; import google.registry.model.mark.ProtectedMark; import google.registry.model.mark.Trademark; import google.registry.model.poll.PollMessage; -import google.registry.model.pricing.PremiumPricingEngine.DomainPrices; import google.registry.model.registrar.Registrar; import google.registry.model.registry.Registry; import google.registry.model.registry.Registry.TldState; @@ -89,6 +88,7 @@ import google.registry.model.smd.AbstractSignedMark; import google.registry.model.smd.EncodedSignedMark; import google.registry.model.smd.SignedMark; import google.registry.model.smd.SignedMarkRevocationList; +import google.registry.pricing.TldSpecificLogicEngine; import google.registry.tmch.TmchXmlSignature; import google.registry.tmch.TmchXmlSignature.CertificateSignatureException; import google.registry.util.Idn; @@ -576,13 +576,11 @@ public class DomainFlowUtils { throw new CurrencyUnitMismatchException(); } - DomainPrices prices = getPricesForDomainName(domainName, now); builder .setCommand(feeCommand) .setCurrency(registry.getCurrency()) .setPeriod(feeRequest.getPeriod()) - // Choose from four classes: premium, premium-collision, collision, or null (standard case). - .setClass(prices.getFeeClass().orNull()); + .setClass(TldSpecificLogicEngine.getFeeClass(domainName, now).orNull()); switch (feeCommand.getCommand()) { case UNKNOWN: @@ -592,25 +590,20 @@ public class DomainFlowUtils { builder.setClass("reserved"); // Override whatever class we've set above. } else { builder.setFees( - ImmutableList.of( - Fee.create(prices.getCreateCost().multipliedBy(years).getAmount(), "create"))); + TldSpecificLogicEngine.getCreatePrice(registry, domainName, now, years).getFees()); } break; case RESTORE: if (years != 1) { throw new RestoresAreAlwaysForOneYearException(); } - // Restores have a "renew" and a "restore" fee. builder.setFees( - ImmutableList.of( - Fee.create(prices.getRenewCost().multipliedBy(years).getAmount(), "renew"), - Fee.create(registry.getStandardRestoreCost().getAmount(), "restore"))); + TldSpecificLogicEngine.getRestorePrice(registry, domainName, now, years).getFees()); break; default: // Anything else (transfer|renew) will have a "renew" fee. builder.setFees( - ImmutableList.of( - Fee.create(prices.getRenewCost().multipliedBy(years).getAmount(), "renew"))); + TldSpecificLogicEngine.getRenewPrice(registry, domainName, now, years).getFees()); } } diff --git a/java/google/registry/pricing/TldSpecificLogicEngine.java b/java/google/registry/pricing/TldSpecificLogicEngine.java index 0e4b86fd8..28420e928 100644 --- a/java/google/registry/pricing/TldSpecificLogicEngine.java +++ b/java/google/registry/pricing/TldSpecificLogicEngine.java @@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkState; import static google.registry.pricing.PricingEngineProxy.getPricesForDomainName; import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; +import com.google.common.base.Optional; import com.google.common.collect.ImmutableList; import google.registry.model.ImmutableObject; @@ -122,9 +123,7 @@ public final class TldSpecificLogicEngine { } /** - * Returns a new restore price for the pricer. - * - *

TODO: This probably needs to include the renew price. + * Returns a new restore price (including the renew price) for the pricer. * *

domain name, number of years and date must be defined before calling this. */ @@ -138,5 +137,12 @@ public final class TldSpecificLogicEngine { Fee.create(registry.getStandardRestoreCost().getAmount(), "restore"))); } + /** + * Returns the fee class for a given domain and date. + */ + public static Optional getFeeClass(String domainName, DateTime date) { + return getPricesForDomainName(domainName, date).getFeeClass(); + } + // TODO(b/29089413): Add support for transfer prices once this is plumbed through the flows. } diff --git a/javatests/google/registry/flows/domain/DomainCheckFlowTest.java b/javatests/google/registry/flows/domain/DomainCheckFlowTest.java index 81f6317f2..9be87cf6a 100644 --- a/javatests/google/registry/flows/domain/DomainCheckFlowTest.java +++ b/javatests/google/registry/flows/domain/DomainCheckFlowTest.java @@ -22,10 +22,13 @@ import static google.registry.testing.DatastoreHelper.persistDeletedDomain; import static google.registry.testing.DatastoreHelper.persistPremiumList; import static google.registry.testing.DatastoreHelper.persistReservedList; import static google.registry.testing.DatastoreHelper.persistResource; +import static google.registry.util.DateTimeUtils.START_OF_TIME; +import static org.joda.money.CurrencyUnit.USD; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedMap; import google.registry.flows.ResourceCheckFlow.TooManyResourceChecksException; import google.registry.flows.ResourceCheckFlowTestCase; @@ -57,6 +60,7 @@ import google.registry.testing.DatastoreHelper; import org.joda.money.CurrencyUnit; import org.joda.money.Money; +import org.joda.time.DateTime; import org.junit.Before; import org.junit.Test; @@ -502,4 +506,18 @@ public class DomainCheckFlowTest create(true, "example2.tld", null), create(true, "example3.tld", null)); } + + @Test + public void testSuccess_eapFeeCheck() throws Exception { + clock.setTo(DateTime.parse("2010-01-01T10:00:00Z")); + persistActiveDomain("example1.tld"); + persistResource(Registry.get("tld").asBuilder() + .setEapFeeSchedule(ImmutableSortedMap.of( + START_OF_TIME, Money.of(USD, 0), + clock.nowUtc().minusDays(1), Money.of(USD, 100), + clock.nowUtc().plusDays(1), Money.of(USD, 0))) + .build()); + setEppInput("domain_check_fee.xml"); + runFlowAssertResponse(readFile("domain_check_eap_fee_response.xml")); + } } diff --git a/javatests/google/registry/flows/domain/testdata/domain_check_eap_fee_response.xml b/javatests/google/registry/flows/domain/testdata/domain_check_eap_fee_response.xml new file mode 100644 index 000000000..615e3d8be --- /dev/null +++ b/javatests/google/registry/flows/domain/testdata/domain_check_eap_fee_response.xml @@ -0,0 +1,45 @@ + + + + Command completed successfully + + + + + example1.tld + In use + + + example2.tld + + + example3.tld + + + + + + + example2.tld + USD + create + 1 + 13.00 + 100.00 + + + example3.tld + USD + create + 2 + 26.00 + 100.00 + + + + + ABC-12345 + server-trid + + +