mirror of
https://github.com/google/nomulus.git
synced 2025-08-05 01:11:50 +02:00
Read from bloom filter for premium pricing checks
This also cleans up the PremiumList API so that it only has one method for checking premium prices, which is by TLD, rather than two. I will be refactoring a lot of the static methods currently residing in the PremiumList class into a separate utils class, but I don't want to include too many changes in this one CL. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=148475345
This commit is contained in:
parent
3ac74fa449
commit
3ca9bb6aeb
18 changed files with 328 additions and 282 deletions
|
@ -17,7 +17,9 @@ package google.registry.model.registry.label;
|
|||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.truth.Truth.assertWithMessage;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.model.registry.label.PremiumList.cachePremiumListEntries;
|
||||
import static google.registry.model.registry.label.PremiumList.getPremiumPrice;
|
||||
import static google.registry.model.registry.label.PremiumList.saveWithEntries;
|
||||
import static google.registry.testing.DatastoreHelper.createTld;
|
||||
import static google.registry.testing.DatastoreHelper.persistPremiumList;
|
||||
import static google.registry.testing.DatastoreHelper.persistReservedList;
|
||||
|
@ -34,7 +36,6 @@ import google.registry.testing.AppEngineRule;
|
|||
import google.registry.testing.ExceptionRule;
|
||||
import java.util.Map;
|
||||
import org.joda.money.Money;
|
||||
import org.joda.time.DateTime;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
|
@ -75,54 +76,49 @@ public class PremiumListTest {
|
|||
.setPremiumPricingEngine(StaticPremiumListPricingEngine.NAME)
|
||||
.build());
|
||||
assertThat(Registry.get("ghost").getPremiumList()).isNull();
|
||||
assertThat(getPremiumPrice("blah", "ghost")).isAbsent();
|
||||
assertThat(getPremiumPrice("blah", Registry.get("ghost"))).isAbsent();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPremiumPrice_throwsExceptionWhenNonExistentPremiumListConfigured()
|
||||
throws Exception {
|
||||
PremiumList.get("tld").get().delete();
|
||||
thrown.expect(IllegalStateException.class, "Could not load premium list named tld");
|
||||
getPremiumPrice("blah", "tld");
|
||||
thrown.expect(IllegalStateException.class, "Could not load premium list 'tld'");
|
||||
getPremiumPrice("blah", Registry.get("tld"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSave_largeNumberOfEntries_succeeds() throws Exception {
|
||||
PremiumList premiumList = persistHumongousPremiumList("tld", 2500);
|
||||
assertThat(premiumList.getPremiumListEntries()).hasSize(2500);
|
||||
assertThat(premiumList.getPremiumPrice("7")).hasValue(Money.parse("USD 100"));
|
||||
assertThat(premiumList.loadPremiumListEntries()).hasSize(2500);
|
||||
assertThat(getPremiumPrice("7", Registry.get("tld"))).hasValue(Money.parse("USD 100"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSave_updateTime_isUpdatedOnEverySave() throws Exception {
|
||||
PremiumList pl = new PremiumList.Builder()
|
||||
.setName("tld3")
|
||||
.setPremiumListMapFromLines(ImmutableList.of("slime,USD 10"))
|
||||
.build()
|
||||
.saveAndUpdateEntries();
|
||||
PremiumList newPl = new PremiumList.Builder()
|
||||
.setName(pl.getName())
|
||||
.setPremiumListMapFromLines(ImmutableList.of("mutants,USD 20"))
|
||||
.build()
|
||||
.saveAndUpdateEntries();
|
||||
PremiumList pl =
|
||||
saveWithEntries(
|
||||
new PremiumList.Builder().setName("tld3").build(), ImmutableList.of("slime,USD 10"));
|
||||
PremiumList newPl =
|
||||
saveWithEntries(
|
||||
new PremiumList.Builder().setName(pl.getName()).build(),
|
||||
ImmutableList.of("mutants,USD 20"));
|
||||
assertThat(newPl.getLastUpdateTime()).isGreaterThan(pl.getLastUpdateTime());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSave_creationTime_onlyUpdatedOnFirstCreation() throws Exception {
|
||||
PremiumList pl = persistPremiumList("tld3", "sludge,JPY 1000");
|
||||
DateTime creationTime = pl.creationTime;
|
||||
pl = pl.asBuilder()
|
||||
.setPremiumListMapFromLines(ImmutableList.of("sleighbells,CHF 2000"))
|
||||
.build();
|
||||
assertThat(pl.creationTime).isEqualTo(creationTime);
|
||||
PremiumList newPl = saveWithEntries(pl, ImmutableList.of("sleighbells,CHF 2000"));
|
||||
assertThat(newPl.creationTime).isEqualTo(pl.creationTime);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSave_removedPremiumListEntries_areNoLongerInDatastore() throws Exception {
|
||||
Registry registry = Registry.get("tld");
|
||||
PremiumList pl = persistPremiumList("tld", "genius,USD 10", "dolt,JPY 1000");
|
||||
assertThat(getPremiumPrice("genius", "tld")).hasValue(Money.parse("USD 10"));
|
||||
assertThat(getPremiumPrice("dolt", "tld")).hasValue(Money.parse("JPY 1000"));
|
||||
assertThat(getPremiumPrice("genius", registry)).hasValue(Money.parse("USD 10"));
|
||||
assertThat(getPremiumPrice("dolt", registry)).hasValue(Money.parse("JPY 1000"));
|
||||
assertThat(ofy()
|
||||
.load()
|
||||
.type(PremiumListEntry.class)
|
||||
|
@ -131,13 +127,10 @@ public class PremiumListTest {
|
|||
.now()
|
||||
.price)
|
||||
.isEqualTo(Money.parse("JPY 1000"));
|
||||
PremiumList pl2 = pl.asBuilder()
|
||||
.setPremiumListMapFromLines(ImmutableList.of("genius,USD 10", "savant,USD 90"))
|
||||
.build()
|
||||
.saveAndUpdateEntries();
|
||||
assertThat(getPremiumPrice("genius", "tld")).hasValue(Money.parse("USD 10"));
|
||||
assertThat(getPremiumPrice("savant", "tld")).hasValue(Money.parse("USD 90"));
|
||||
assertThat(getPremiumPrice("dolt", "tld")).isAbsent();
|
||||
PremiumList pl2 = saveWithEntries(pl, ImmutableList.of("genius,USD 10", "savant,USD 90"));
|
||||
assertThat(getPremiumPrice("genius", registry)).hasValue(Money.parse("USD 10"));
|
||||
assertThat(getPremiumPrice("savant", registry)).hasValue(Money.parse("USD 90"));
|
||||
assertThat(getPremiumPrice("dolt", registry)).isAbsent();
|
||||
assertThat(ofy()
|
||||
.load()
|
||||
.type(PremiumListEntry.class)
|
||||
|
@ -156,59 +149,46 @@ public class PremiumListTest {
|
|||
|
||||
@Test
|
||||
public void testGetPremiumPrice_allLabelsAreNonPremium_whenNotInList() throws Exception {
|
||||
assertThat(getPremiumPrice("blah", "tld")).isAbsent();
|
||||
assertThat(getPremiumPrice("slinge", "tld")).isAbsent();
|
||||
assertThat(getPremiumPrice("blah", Registry.get("tld"))).isAbsent();
|
||||
assertThat(getPremiumPrice("slinge", Registry.get("tld"))).isAbsent();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSave_simple() throws Exception {
|
||||
PremiumList pl = persistPremiumList("tld2", "lol , USD 999 # yupper rooni ");
|
||||
PremiumList pl =
|
||||
saveWithEntries(
|
||||
new PremiumList.Builder().setName("tld2").build(),
|
||||
ImmutableList.of("lol , USD 999 # yupper rooni "));
|
||||
createTld("tld");
|
||||
persistResource(Registry.get("tld").asBuilder().setPremiumList(pl).build());
|
||||
assertThat(pl.getPremiumPrice("lol")).hasValue(Money.parse("USD 999"));
|
||||
assertThat(getPremiumPrice("lol", "tld")).hasValue(Money.parse("USD 999"));
|
||||
assertThat(getPremiumPrice("lol ", "tld")).isAbsent();
|
||||
Map<String, PremiumListEntry> entries = PremiumList.get("tld2").get().getPremiumListEntries();
|
||||
assertThat(getPremiumPrice("lol", Registry.get("tld"))).hasValue(Money.parse("USD 999"));
|
||||
assertThat(getPremiumPrice("lol ", Registry.get("tld"))).isAbsent();
|
||||
Map<String, PremiumListEntry> entries =
|
||||
PremiumList.get("tld2").get().loadPremiumListEntries();
|
||||
assertThat(entries.keySet()).containsExactly("lol");
|
||||
assertThat(entries).doesNotContainKey("lol ");
|
||||
PremiumListEntry entry = entries.values().iterator().next();
|
||||
PremiumListEntry entry = entries.get("lol");
|
||||
assertThat(entry.comment).isEqualTo("yupper rooni");
|
||||
assertThat(entry.price).isEqualTo(Money.parse("USD 999"));
|
||||
assertThat(entry.label).isEqualTo("lol");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_saveAndUpdateEntries_twiceOnUnchangedList() throws Exception {
|
||||
public void test_saveAndUpdateEntriesTwice() throws Exception {
|
||||
PremiumList pl =
|
||||
new PremiumList.Builder()
|
||||
.setName("pl")
|
||||
.setPremiumListMapFromLines(ImmutableList.of("test,USD 1"))
|
||||
.build()
|
||||
.saveAndUpdateEntries();
|
||||
Map<String, PremiumListEntry> entries = pl.getPremiumListEntries();
|
||||
saveWithEntries(
|
||||
new PremiumList.Builder().setName("pl").build(), ImmutableList.of("test,USD 1"));
|
||||
Map<String, PremiumListEntry> entries = pl.loadPremiumListEntries();
|
||||
assertThat(entries.keySet()).containsExactly("test");
|
||||
assertThat(PremiumList.get("pl").get().getPremiumListEntries()).isEqualTo(entries);
|
||||
assertThat(PremiumList.get("pl").get().loadPremiumListEntries()).isEqualTo(entries);
|
||||
// Save again with no changes, and clear the cache to force a re-load from Datastore.
|
||||
pl.saveAndUpdateEntries();
|
||||
PremiumList resaved = saveWithEntries(pl, ImmutableList.of("test,USD 1"));
|
||||
ofy().clearSessionCache();
|
||||
assertThat(PremiumList.get("pl").get().getPremiumListEntries()).isEqualTo(entries);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_saveAndUpdateEntries_twiceOnListWithOnlyMetadataChanges() throws Exception {
|
||||
PremiumList pl =
|
||||
new PremiumList.Builder()
|
||||
.setName("pl")
|
||||
.setPremiumListMapFromLines(ImmutableList.of("test,USD 1"))
|
||||
.build()
|
||||
.saveAndUpdateEntries();
|
||||
Map<String, PremiumListEntry> entries = pl.getPremiumListEntries();
|
||||
assertThat(entries.keySet()).containsExactly("test");
|
||||
assertThat(PremiumList.get("pl").get().getPremiumListEntries()).isEqualTo(entries);
|
||||
// Save again with description changed, and clear the cache to force a re-load from Datastore.
|
||||
pl.asBuilder().setDescription("foobar").build().saveAndUpdateEntries();
|
||||
ofy().clearSessionCache();
|
||||
assertThat(PremiumList.get("pl").get().getPremiumListEntries()).isEqualTo(entries);
|
||||
Map<String, PremiumListEntry> entriesReloaded =
|
||||
PremiumList.get("pl").get().loadPremiumListEntries();
|
||||
assertThat(entriesReloaded).hasSize(1);
|
||||
assertThat(entriesReloaded).containsKey("test");
|
||||
assertThat(entriesReloaded.get("test").parent).isEqualTo(resaved.getRevisionKey());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -253,22 +233,33 @@ public class PremiumListTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testAsBuilder_updatingEntitiesreplacesRevisionKey() throws Exception {
|
||||
public void testGetPremiumPrice_comesFromBloomFilter() throws Exception {
|
||||
PremiumList pl = PremiumList.get("tld").get();
|
||||
assertThat(pl.asBuilder()
|
||||
.setPremiumListMapFromLines(ImmutableList.of("qux,USD 123"))
|
||||
.build()
|
||||
.getRevisionKey())
|
||||
.isNotEqualTo(pl.getRevisionKey());
|
||||
PremiumListEntry entry =
|
||||
persistResource(
|
||||
new PremiumListEntry.Builder()
|
||||
.setParent(pl.getRevisionKey())
|
||||
.setLabel("missingno")
|
||||
.setPrice(Money.parse("USD 1000"))
|
||||
.build());
|
||||
// "missingno" shouldn't be in the bloom filter, thus it should return not premium without
|
||||
// attempting to load the entity that is actually present.
|
||||
assertThat(getPremiumPrice("missingno", Registry.get("tld"))).isAbsent();
|
||||
// However, if we manually query the cache to force an entity load, it should be found.
|
||||
assertThat(
|
||||
cachePremiumListEntries.get(
|
||||
Key.create(pl.getRevisionKey(), PremiumListEntry.class, "missingno")))
|
||||
.hasValue(entry);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProbablePremiumLabels() throws Exception {
|
||||
PremiumList pl = PremiumList.get("tld").get();
|
||||
assertThat(pl.getRevision().probablePremiumLabels.mightContain("notpremium")).isFalse();
|
||||
PremiumListRevision revision = ofy().load().key(pl.getRevisionKey()).now();
|
||||
assertThat(revision.probablePremiumLabels.mightContain("notpremium")).isFalse();
|
||||
for (String label : ImmutableList.of("rich", "lol", "johnny-be-goode", "icann")) {
|
||||
assertWithMessage(label + " should be a probable premium")
|
||||
.that(pl.getRevision().probablePremiumLabels.mightContain(label))
|
||||
.that(revision.probablePremiumLabels.mightContain(label))
|
||||
.isTrue();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import static google.registry.model.EppResourceUtils.createDomainRepoId;
|
|||
import static google.registry.model.EppResourceUtils.createRepoId;
|
||||
import static google.registry.model.domain.launch.ApplicationStatus.VALIDATED;
|
||||
import static google.registry.model.ofy.ObjectifyService.ofy;
|
||||
import static google.registry.model.registry.label.PremiumList.parentEntriesOnRevision;
|
||||
import static google.registry.pricing.PricingEngineProxy.getDomainRenewCost;
|
||||
import static google.registry.util.CollectionUtils.difference;
|
||||
import static google.registry.util.CollectionUtils.union;
|
||||
|
@ -35,16 +36,17 @@ import static google.registry.util.DateTimeUtils.START_OF_TIME;
|
|||
import static google.registry.util.DomainNameUtils.ACE_PREFIX_REGEX;
|
||||
import static google.registry.util.DomainNameUtils.getTldFromDomainName;
|
||||
import static google.registry.util.ResourceUtils.readResourceUtf8;
|
||||
import static java.util.Arrays.asList;
|
||||
import static org.joda.money.CurrencyUnit.USD;
|
||||
|
||||
import com.google.common.base.Ascii;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.FluentIterable;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSortedMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
@ -83,6 +85,8 @@ import google.registry.model.registrar.Registrar;
|
|||
import google.registry.model.registry.Registry;
|
||||
import google.registry.model.registry.Registry.TldState;
|
||||
import google.registry.model.registry.label.PremiumList;
|
||||
import google.registry.model.registry.label.PremiumList.PremiumListEntry;
|
||||
import google.registry.model.registry.label.PremiumList.PremiumListRevision;
|
||||
import google.registry.model.registry.label.ReservedList;
|
||||
import google.registry.model.reporting.HistoryEntry;
|
||||
import google.registry.model.smd.EncodedSignedMark;
|
||||
|
@ -343,23 +347,27 @@ public class DatastoreHelper {
|
|||
.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* Persists a premium list and its child entities directly without writing commit logs.
|
||||
*
|
||||
* <p>Avoiding commit logs is important because a simple default premium list is persisted for
|
||||
* each TLD that is created in tests, and clocks would need to be mocked using an auto-
|
||||
* incrementing FakeClock for all tests in order to persist the commit logs properly because of
|
||||
* the requirement to have monotonically increasing timestamps.
|
||||
*/
|
||||
public static PremiumList persistPremiumList(String listName, String... lines) {
|
||||
Optional<PremiumList> existing = PremiumList.get(listName);
|
||||
return persistPremiumList(
|
||||
(existing.isPresent() ? existing.get().asBuilder() : new PremiumList.Builder())
|
||||
.setName(listName)
|
||||
.setPremiumListMapFromLines(ImmutableList.copyOf(lines))
|
||||
.build());
|
||||
}
|
||||
|
||||
private static PremiumList persistPremiumList(PremiumList premiumList) {
|
||||
// Persist the list and its child entities directly, rather than using its helper method, so
|
||||
// that we can avoid writing commit logs. This would cause issues since many tests replace the
|
||||
// clock in Ofy with a non-advancing FakeClock, and commit logs currently require
|
||||
// monotonically increasing timestamps.
|
||||
ofy().saveWithoutBackup().entities(premiumList, premiumList.getRevision()).now();
|
||||
ofy().saveWithoutBackup().entities(premiumList.getPremiumListEntries().values()).now();
|
||||
return premiumList;
|
||||
PremiumList premiumList = new PremiumList.Builder().setName(listName).build();
|
||||
ImmutableMap<String, PremiumListEntry> entries = premiumList.parse(asList(lines));
|
||||
PremiumListRevision revision = PremiumListRevision.create(premiumList, entries.keySet());
|
||||
ofy()
|
||||
.saveWithoutBackup()
|
||||
.entities(premiumList.asBuilder().setRevision(Key.create(revision)).build(), revision)
|
||||
.now();
|
||||
ofy()
|
||||
.saveWithoutBackup()
|
||||
.entities(parentEntriesOnRevision(entries.values(), Key.create(revision)))
|
||||
.now();
|
||||
return ofy().load().entity(premiumList).now();
|
||||
}
|
||||
|
||||
/** Creates and persists a tld. */
|
||||
|
|
|
@ -32,7 +32,7 @@ public class DeletePremiumListCommandTest extends CommandTestCase<DeletePremiumL
|
|||
@Test
|
||||
public void testSuccess() throws Exception {
|
||||
PremiumList premiumList = persistPremiumList("xn--q9jyb4c", "blah,USD 100");
|
||||
assertThat(premiumList.getPremiumListEntries()).hasSize(1);
|
||||
assertThat(premiumList.loadPremiumListEntries()).hasSize(1);
|
||||
runCommand("--force", "--name=xn--q9jyb4c");
|
||||
assertThat(PremiumList.get("xn--q9jyb4c")).isAbsent();
|
||||
|
||||
|
|
|
@ -15,9 +15,11 @@
|
|||
package google.registry.tools.server;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.model.registry.label.PremiumList.getPremiumPrice;
|
||||
import static google.registry.testing.DatastoreHelper.createTlds;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
|
||||
import google.registry.model.registry.Registry;
|
||||
import google.registry.model.registry.label.PremiumList;
|
||||
import google.registry.testing.AppEngineRule;
|
||||
import google.registry.testing.ExceptionRule;
|
||||
|
@ -81,10 +83,7 @@ public class CreatePremiumListActionTest {
|
|||
action.override = true;
|
||||
action.run();
|
||||
assertThat(response.getStatus()).isEqualTo(SC_OK);
|
||||
PremiumList premiumList = PremiumList.get("zanzibar").get();
|
||||
assertThat(premiumList.getPremiumListEntries()).hasSize(1);
|
||||
assertThat(premiumList.getPremiumPrice("zanzibar")).hasValue(Money.parse("USD 100"));
|
||||
assertThat(premiumList.getPremiumPrice("diamond")).isAbsent();
|
||||
assertThat(PremiumList.get("zanzibar").get().loadPremiumListEntries()).hasSize(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -93,9 +92,8 @@ public class CreatePremiumListActionTest {
|
|||
action.inputData = "rich,USD 25\nricher,USD 1000\n";
|
||||
action.run();
|
||||
assertThat(response.getStatus()).isEqualTo(SC_OK);
|
||||
PremiumList premiumList = PremiumList.get("foo").get();
|
||||
assertThat(premiumList.getPremiumListEntries()).hasSize(2);
|
||||
assertThat(premiumList.getPremiumPrice("rich")).hasValue(Money.parse("USD 25"));
|
||||
assertThat(premiumList.getPremiumPrice("diamond")).isAbsent();
|
||||
assertThat(PremiumList.get("foo").get().loadPremiumListEntries()).hasSize(2);
|
||||
assertThat(getPremiumPrice("rich", Registry.get("foo"))).hasValue(Money.parse("USD 25"));
|
||||
assertThat(getPremiumPrice("diamond", Registry.get("foo"))).isAbsent();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ package google.registry.tools.server;
|
|||
import static google.registry.testing.DatastoreHelper.persistPremiumList;
|
||||
|
||||
import com.google.common.base.Optional;
|
||||
import google.registry.model.registry.label.PremiumList;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
@ -35,10 +34,6 @@ public class ListPremiumListsActionTest extends ListActionTestCase {
|
|||
public void init() throws Exception {
|
||||
persistPremiumList("xn--q9jyb4c", "rich,USD 100");
|
||||
persistPremiumList("how", "richer,JPY 5000");
|
||||
PremiumList.get("how").get().asBuilder()
|
||||
.setDescription("foobar")
|
||||
.build()
|
||||
.saveAndUpdateEntries();
|
||||
action = new ListPremiumListsAction();
|
||||
}
|
||||
|
||||
|
|
|
@ -15,9 +15,11 @@
|
|||
package google.registry.tools.server;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static google.registry.model.registry.label.PremiumList.getPremiumPrice;
|
||||
import static google.registry.testing.DatastoreHelper.createTlds;
|
||||
import static javax.servlet.http.HttpServletResponse.SC_OK;
|
||||
|
||||
import google.registry.model.registry.Registry;
|
||||
import google.registry.model.registry.label.PremiumList;
|
||||
import google.registry.testing.AppEngineRule;
|
||||
import google.registry.testing.ExceptionRule;
|
||||
|
@ -79,11 +81,11 @@ public class UpdatePremiumListActionTest {
|
|||
action.inputData = "rich,USD 75\nricher,USD 5000\npoor, USD 0.99";
|
||||
action.run();
|
||||
assertThat(response.getStatus()).isEqualTo(SC_OK);
|
||||
PremiumList premiumList = PremiumList.get("foo").get();
|
||||
assertThat(premiumList.getPremiumListEntries()).hasSize(3);
|
||||
assertThat(premiumList.getPremiumPrice("rich")).hasValue(Money.parse("USD 75"));
|
||||
assertThat(premiumList.getPremiumPrice("richer")).hasValue(Money.parse("USD 5000"));
|
||||
assertThat(premiumList.getPremiumPrice("poor")).hasValue(Money.parse("USD 0.99"));
|
||||
assertThat(premiumList.getPremiumPrice("diamond")).isAbsent();
|
||||
Registry registry = Registry.get("foo");
|
||||
assertThat(PremiumList.get("foo").get().loadPremiumListEntries()).hasSize(3);
|
||||
assertThat(getPremiumPrice("rich", registry)).hasValue(Money.parse("USD 75"));
|
||||
assertThat(getPremiumPrice("richer", registry)).hasValue(Money.parse("USD 5000"));
|
||||
assertThat(getPremiumPrice("poor", registry)).hasValue(Money.parse("USD 0.99"));
|
||||
assertThat(getPremiumPrice("diamond", registry)).isAbsent();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue