Return expiry date along with the EAP fee

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=126407427
This commit is contained in:
ctingue 2016-07-01 07:18:08 -07:00 committed by Ben McIlwain
parent 9f731ba4d0
commit d6bd2d56cd
4 changed files with 74 additions and 9 deletions

View file

@ -0,0 +1,51 @@
// Copyright 2016 The Domain Registry Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package google.registry.model.domain.fee;
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
import com.google.common.collect.Range;
import org.joda.money.Money;
import org.joda.time.DateTime;
/**
* An object representing an EAP fee (as a {@link Money}) along with the interval for which the
* fee applies.
*/
public class EapFee {
/** The EAP fee (as applied on top of the domain registration cost). */
Money cost;
/** The time period for which the fee applies. */
Range<DateTime> period;
public Money getCost() {
return cost;
}
public Range<DateTime> getPeriod() {
return period;
}
public static EapFee create(Money cost, Range<DateTime> period) {
EapFee instance = new EapFee();
instance.cost = checkArgumentNotNull(cost, "EAP fee cost cannot be null.");
instance.period = checkArgumentNotNull(period, "EAP fee period cannot be null.");
return instance;
}
}

View file

@ -23,6 +23,7 @@ import static google.registry.model.ofy.ObjectifyService.ofy;
import static google.registry.model.ofy.Ofy.RECOMMENDED_MEMCACHE_EXPIRATION; import static google.registry.model.ofy.Ofy.RECOMMENDED_MEMCACHE_EXPIRATION;
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy; import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
import static google.registry.util.DateTimeUtils.END_OF_TIME; import static google.registry.util.DateTimeUtils.END_OF_TIME;
import static google.registry.util.DateTimeUtils.START_OF_TIME;
import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; import static google.registry.util.PreconditionsUtils.checkArgumentNotNull;
import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static org.joda.money.CurrencyUnit.USD; import static org.joda.money.CurrencyUnit.USD;
@ -37,6 +38,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedMap; import com.google.common.collect.ImmutableSortedMap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Ordering; import com.google.common.collect.Ordering;
import com.google.common.collect.Range;
import com.google.common.net.InternetDomainName; import com.google.common.net.InternetDomainName;
import com.googlecode.objectify.Key; import com.googlecode.objectify.Key;
@ -57,6 +59,7 @@ import google.registry.model.ImmutableObject;
import google.registry.model.common.EntityGroupRoot; import google.registry.model.common.EntityGroupRoot;
import google.registry.model.common.TimedTransitionProperty; import google.registry.model.common.TimedTransitionProperty;
import google.registry.model.common.TimedTransitionProperty.TimedTransition; import google.registry.model.common.TimedTransitionProperty.TimedTransition;
import google.registry.model.domain.fee.EapFee;
import google.registry.model.pricing.PremiumPricingEngine; import google.registry.model.pricing.PremiumPricingEngine;
import google.registry.model.pricing.StaticPremiumListPricingEngine; import google.registry.model.pricing.StaticPremiumListPricingEngine;
import google.registry.model.registry.label.PremiumList; import google.registry.model.registry.label.PremiumList;
@ -521,8 +524,15 @@ public class Registry extends ImmutableObject implements Buildable {
/** /**
* Returns the EAP fee for the registry at the given time. * Returns the EAP fee for the registry at the given time.
*/ */
public Money getEapFeeFor(DateTime now) { public EapFee getEapFeeFor(DateTime now) {
return eapFeeSchedule.getValueAtTime(now); ImmutableSortedMap<DateTime, Money> valueMap = eapFeeSchedule.toValueMap();
DateTime periodStart = valueMap.floorKey(now);
DateTime periodEnd = valueMap.ceilingKey(now);
return EapFee.create(
eapFeeSchedule.getValueAtTime(now),
Range.closedOpen(
periodStart != null ? periodStart : START_OF_TIME,
periodEnd != null ? periodEnd : END_OF_TIME));
} }
public String getLordnUsername() { public String getLordnUsername() {

View file

@ -416,7 +416,8 @@ public class RegistryTest extends EntityTestCase {
@Test @Test
public void testEapFee_undefined() { public void testEapFee_undefined() {
assertThat(Registry.get("tld").getEapFeeFor(clock.nowUtc())).isEqualTo(Money.of(USD, 0)); assertThat(Registry.get("tld").getEapFeeFor(clock.nowUtc()).getCost())
.isEqualTo(Money.of(USD, 0));
} }
@Test @Test
@ -430,9 +431,11 @@ public class RegistryTest extends EntityTestCase {
a, Money.of(USD, 100), a, Money.of(USD, 100),
b, Money.of(USD, 50))).build(); b, Money.of(USD, 50))).build();
assertThat(registry.getEapFeeFor(clock.nowUtc())).isEqualTo(Money.of(USD, 100)); assertThat(registry.getEapFeeFor(clock.nowUtc()).getCost()).isEqualTo(Money.of(USD, 100));
assertThat(registry.getEapFeeFor(clock.nowUtc().minusDays(2))).isEqualTo(Money.of(USD, 0)); assertThat(registry.getEapFeeFor(clock.nowUtc().minusDays(2)).getCost())
assertThat(registry.getEapFeeFor(clock.nowUtc().plusDays(2))).isEqualTo(Money.of(USD, 50)); .isEqualTo(Money.of(USD, 0));
assertThat(registry.getEapFeeFor(clock.nowUtc().plusDays(2)).getCost())
.isEqualTo(Money.of(USD, 50));
} }
@Test @Test

View file

@ -107,9 +107,10 @@ public class CreateTldCommandTest extends CommandTestCase<CreateTldCommand> {
"xn--q9jyb4c"); "xn--q9jyb4c");
Registry registry = Registry.get("xn--q9jyb4c"); Registry registry = Registry.get("xn--q9jyb4c");
assertThat(registry.getEapFeeFor(now.minusHours(1))).isEqualTo(Money.zero(USD)); assertThat(registry.getEapFeeFor(now.minusHours(1)).getCost()).isEqualTo(Money.zero(USD));
assertThat(registry.getEapFeeFor(now.plusHours(1))).isEqualTo(Money.of(USD, 50)); assertThat(registry.getEapFeeFor(now.plusHours(1)).getCost()).isEqualTo(Money.of(USD, 50));
assertThat(registry.getEapFeeFor(now.plusDays(1).plusHours(1))).isEqualTo(Money.of(USD, 10)); assertThat(registry.getEapFeeFor(now.plusDays(1).plusHours(1)).getCost())
.isEqualTo(Money.of(USD, 10));
} }
@Test @Test