Add replay & compare to more flow tests (#975)

* Add replay & compare to more flow tests

Add replay and comparison testing to another batch of flow tests, apply fixes
as needed.
This commit is contained in:
Michael Muller 2021-03-04 08:25:47 -05:00 committed by GitHub
parent 5520329385
commit f997f64169
15 changed files with 165 additions and 35 deletions

View file

@ -25,12 +25,19 @@ import google.registry.flows.ResourceCheckFlowTestCase;
import google.registry.flows.exceptions.TooManyResourceChecksException; import google.registry.flows.exceptions.TooManyResourceChecksException;
import google.registry.model.contact.ContactResource; import google.registry.model.contact.ContactResource;
import google.registry.testing.DualDatabaseTest; import google.registry.testing.DualDatabaseTest;
import google.registry.testing.ReplayExtension;
import google.registry.testing.TestOfyAndSql; import google.registry.testing.TestOfyAndSql;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link ContactCheckFlow}. */ /** Unit tests for {@link ContactCheckFlow}. */
@DualDatabaseTest @DualDatabaseTest
class ContactCheckFlowTest extends ResourceCheckFlowTestCase<ContactCheckFlow, ContactResource> { class ContactCheckFlowTest extends ResourceCheckFlowTestCase<ContactCheckFlow, ContactResource> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
ContactCheckFlowTest() { ContactCheckFlowTest() {
setEppInput("contact_check.xml"); setEppInput("contact_check.xml");
} }

View file

@ -38,13 +38,20 @@ import google.registry.model.eppcommon.StatusValue;
import google.registry.model.eppcommon.Trid; import google.registry.model.eppcommon.Trid;
import google.registry.model.reporting.HistoryEntry; import google.registry.model.reporting.HistoryEntry;
import google.registry.testing.DualDatabaseTest; import google.registry.testing.DualDatabaseTest;
import google.registry.testing.ReplayExtension;
import google.registry.testing.TestOfyAndSql; import google.registry.testing.TestOfyAndSql;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link ContactDeleteFlow}. */ /** Unit tests for {@link ContactDeleteFlow}. */
@DualDatabaseTest @DualDatabaseTest
class ContactDeleteFlowTest extends ResourceFlowTestCase<ContactDeleteFlow, ContactResource> { class ContactDeleteFlowTest extends ResourceFlowTestCase<ContactDeleteFlow, ContactResource> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
@BeforeEach @BeforeEach
void initFlowTest() { void initFlowTest() {
setEppInput("contact_delete.xml"); setEppInput("contact_delete.xml");

View file

@ -39,13 +39,20 @@ import google.registry.model.eppcommon.AuthInfo.PasswordAuth;
import google.registry.model.eppcommon.PresenceMarker; import google.registry.model.eppcommon.PresenceMarker;
import google.registry.model.eppcommon.StatusValue; import google.registry.model.eppcommon.StatusValue;
import google.registry.testing.DualDatabaseTest; import google.registry.testing.DualDatabaseTest;
import google.registry.testing.ReplayExtension;
import google.registry.testing.TestOfyAndSql; import google.registry.testing.TestOfyAndSql;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link ContactInfoFlow}. */ /** Unit tests for {@link ContactInfoFlow}. */
@DualDatabaseTest @DualDatabaseTest
class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, ContactResource> { class ContactInfoFlowTest extends ResourceFlowTestCase<ContactInfoFlow, ContactResource> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
ContactInfoFlowTest() { ContactInfoFlowTest() {
setEppInput("contact_info.xml"); setEppInput("contact_info.xml");
} }

View file

@ -38,14 +38,21 @@ import google.registry.model.transfer.TransferData;
import google.registry.model.transfer.TransferResponse; import google.registry.model.transfer.TransferResponse;
import google.registry.model.transfer.TransferStatus; import google.registry.model.transfer.TransferStatus;
import google.registry.testing.DualDatabaseTest; import google.registry.testing.DualDatabaseTest;
import google.registry.testing.ReplayExtension;
import google.registry.testing.TestOfyAndSql; import google.registry.testing.TestOfyAndSql;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link ContactTransferCancelFlow}. */ /** Unit tests for {@link ContactTransferCancelFlow}. */
@DualDatabaseTest @DualDatabaseTest
class ContactTransferCancelFlowTest class ContactTransferCancelFlowTest
extends ContactTransferFlowTestCase<ContactTransferCancelFlow, ContactResource> { extends ContactTransferFlowTestCase<ContactTransferCancelFlow, ContactResource> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
@BeforeEach @BeforeEach
void setUp() { void setUp() {
this.setEppInput("contact_transfer_cancel.xml"); this.setEppInput("contact_transfer_cancel.xml");

View file

@ -40,14 +40,21 @@ import google.registry.model.transfer.TransferData;
import google.registry.model.transfer.TransferResponse; import google.registry.model.transfer.TransferResponse;
import google.registry.model.transfer.TransferStatus; import google.registry.model.transfer.TransferStatus;
import google.registry.testing.DualDatabaseTest; import google.registry.testing.DualDatabaseTest;
import google.registry.testing.ReplayExtension;
import google.registry.testing.TestOfyAndSql; import google.registry.testing.TestOfyAndSql;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link ContactTransferRejectFlow}. */ /** Unit tests for {@link ContactTransferRejectFlow}. */
@DualDatabaseTest @DualDatabaseTest
class ContactTransferRejectFlowTest class ContactTransferRejectFlowTest
extends ContactTransferFlowTestCase<ContactTransferRejectFlow, ContactResource> { extends ContactTransferFlowTestCase<ContactTransferRejectFlow, ContactResource> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
@BeforeEach @BeforeEach
void setUp() { void setUp() {
setEppInput("contact_transfer_reject.xml"); setEppInput("contact_transfer_reject.xml");

View file

@ -52,15 +52,22 @@ import google.registry.model.reporting.HistoryEntry;
import google.registry.model.transfer.ContactTransferData; import google.registry.model.transfer.ContactTransferData;
import google.registry.model.transfer.TransferStatus; import google.registry.model.transfer.TransferStatus;
import google.registry.testing.DualDatabaseTest; import google.registry.testing.DualDatabaseTest;
import google.registry.testing.ReplayExtension;
import google.registry.testing.TestOfyAndSql; import google.registry.testing.TestOfyAndSql;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link ContactTransferRequestFlow}. */ /** Unit tests for {@link ContactTransferRequestFlow}. */
@DualDatabaseTest @DualDatabaseTest
class ContactTransferRequestFlowTest class ContactTransferRequestFlowTest
extends ContactTransferFlowTestCase<ContactTransferRequestFlow, ContactResource> { extends ContactTransferFlowTestCase<ContactTransferRequestFlow, ContactResource> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
ContactTransferRequestFlowTest() { ContactTransferRequestFlowTest() {
// We need the transfer to happen at exactly this time in order for the response to match up. // We need the transfer to happen at exactly this time in order for the response to match up.
clock.setTo(DateTime.parse("2000-06-08T22:00:00.0Z")); clock.setTo(DateTime.parse("2000-06-08T22:00:00.0Z"));

View file

@ -71,16 +71,29 @@ import google.registry.model.registry.Registry;
import google.registry.model.registry.Registry.TldState; import google.registry.model.registry.Registry.TldState;
import google.registry.model.registry.label.ReservedList; import google.registry.model.registry.label.ReservedList;
import google.registry.model.reporting.HistoryEntry; import google.registry.model.reporting.HistoryEntry;
import google.registry.testing.ReplayExtension;
import org.joda.money.CurrencyUnit; import org.joda.money.CurrencyUnit;
import org.joda.money.Money; import org.joda.money.Money;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link DomainCheckFlow}. */ /** Unit tests for {@link DomainCheckFlow}. */
class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, DomainBase> { class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, DomainBase> {
@Order(value = Order.DEFAULT - 3)
@RegisterExtension
final SetClockExtension setClockExtension = new SetClockExtension();
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
DomainCheckFlowTest() { DomainCheckFlowTest() {
setEppInput("domain_check_one_tld.xml"); setEppInput("domain_check_one_tld.xml");
} }
@ -1338,4 +1351,12 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
.setStatusValues(ImmutableSet.of(StatusValue.PENDING_DELETE)) .setStatusValues(ImmutableSet.of(StatusValue.PENDING_DELETE))
.build()); .build());
} }
class SetClockExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
// Kick the clock back to before the earliest date that we set the clock to.
clock.setTo(DateTime.parse("2009-01-01T10:00:00Z"));
}
}
} }

View file

@ -36,13 +36,20 @@ import google.registry.flows.exceptions.TooManyResourceChecksException;
import google.registry.model.domain.DomainBase; import google.registry.model.domain.DomainBase;
import google.registry.model.registry.Registry; import google.registry.model.registry.Registry;
import google.registry.model.registry.Registry.TldState; import google.registry.model.registry.Registry.TldState;
import google.registry.testing.ReplayExtension;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link DomainClaimsCheckFlow}. */ /** Unit tests for {@link DomainClaimsCheckFlow}. */
public class DomainClaimsCheckFlowTest public class DomainClaimsCheckFlowTest
extends ResourceFlowTestCase<DomainClaimsCheckFlow, DomainBase> { extends ResourceFlowTestCase<DomainClaimsCheckFlow, DomainBase> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
DomainClaimsCheckFlowTest() { DomainClaimsCheckFlowTest() {
setEppInput("domain_check_claims.xml"); setEppInput("domain_check_claims.xml");
} }

View file

@ -26,6 +26,7 @@ import static google.registry.testing.DatabaseHelper.persistActiveHost;
import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.testing.DatabaseHelper.persistResource;
import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions; import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions;
import static google.registry.testing.TestDataHelper.updateSubstitutions; import static google.registry.testing.TestDataHelper.updateSubstitutions;
import static google.registry.util.DateTimeUtils.END_OF_TIME;
import static google.registry.util.DateTimeUtils.START_OF_TIME; import static google.registry.util.DateTimeUtils.START_OF_TIME;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
@ -45,7 +46,8 @@ import google.registry.flows.domain.DomainFlowUtils.FeeChecksDontSupportPhasesEx
import google.registry.flows.domain.DomainFlowUtils.RestoresAreAlwaysForOneYearException; import google.registry.flows.domain.DomainFlowUtils.RestoresAreAlwaysForOneYearException;
import google.registry.flows.domain.DomainFlowUtils.TransfersAreAlwaysForOneYearException; import google.registry.flows.domain.DomainFlowUtils.TransfersAreAlwaysForOneYearException;
import google.registry.model.billing.BillingEvent; import google.registry.model.billing.BillingEvent;
import google.registry.model.billing.BillingEvent.Recurring; import google.registry.model.billing.BillingEvent.Flag;
import google.registry.model.billing.BillingEvent.Reason;
import google.registry.model.contact.ContactAuthInfo; import google.registry.model.contact.ContactAuthInfo;
import google.registry.model.contact.ContactResource; import google.registry.model.contact.ContactResource;
import google.registry.model.domain.DesignatedContact; import google.registry.model.domain.DesignatedContact;
@ -63,13 +65,26 @@ import google.registry.model.registry.Registry;
import google.registry.model.reporting.HistoryEntry; import google.registry.model.reporting.HistoryEntry;
import google.registry.persistence.VKey; import google.registry.persistence.VKey;
import google.registry.testing.AppEngineExtension; import google.registry.testing.AppEngineExtension;
import google.registry.testing.ReplayExtension;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.BeforeEachCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link DomainInfoFlow}. */ /** Unit tests for {@link DomainInfoFlow}. */
class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase> { class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase> {
@Order(value = Order.DEFAULT - 3)
@RegisterExtension
final SetClockExtension setClockExtension = new SetClockExtension();
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
/** /**
* The domain_info_fee.xml default substitutions common to most tests. * The domain_info_fee.xml default substitutions common to most tests.
* *
@ -93,7 +108,6 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
void setup() { void setup() {
setEppInput("domain_info.xml"); setEppInput("domain_info.xml");
sessionMetadata.setClientId("NewRegistrar"); sessionMetadata.setClientId("NewRegistrar");
clock.setTo(DateTime.parse("2005-03-03T22:00:00.000Z"));
createTld("tld"); createTld("tld");
persistResource(AppEngineExtension.makeRegistrar1().asBuilder().setClientId("ClientZ").build()); persistResource(AppEngineExtension.makeRegistrar1().asBuilder().setClientId("ClientZ").build());
} }
@ -149,7 +163,10 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
} }
private void doSuccessfulTest( private void doSuccessfulTest(
String expectedXmlFilename, boolean inactive, ImmutableMap<String, String> substitutions) String expectedXmlFilename,
boolean inactive,
ImmutableMap<String, String> substitutions,
boolean expectHistoryAndBilling)
throws Exception { throws Exception {
assertTransactionalFlow(false); assertTransactionalFlow(false);
String expected = String expected =
@ -158,12 +175,20 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
expected = expected.replaceAll("\"ok\"", "\"inactive\""); expected = expected.replaceAll("\"ok\"", "\"inactive\"");
} }
runFlowAssertResponse(expected); runFlowAssertResponse(expected);
if (!expectHistoryAndBilling) {
assertNoHistory(); assertNoHistory();
assertNoBillingEvents(); assertNoBillingEvents();
} }
}
private void doSuccessfulTest(
String expectedXmlFilename, boolean inactive, ImmutableMap<String, String> substitutions)
throws Exception {
doSuccessfulTest(expectedXmlFilename, inactive, substitutions, false);
}
private void doSuccessfulTest(String expectedXmlFilename, boolean inactive) throws Exception { private void doSuccessfulTest(String expectedXmlFilename, boolean inactive) throws Exception {
doSuccessfulTest(expectedXmlFilename, inactive, ImmutableMap.of()); doSuccessfulTest(expectedXmlFilename, inactive, ImmutableMap.of(), false);
} }
private void doSuccessfulTest(String expectedXmlFilename) throws Exception { private void doSuccessfulTest(String expectedXmlFilename) throws Exception {
@ -309,7 +334,11 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
.asBuilder() .asBuilder()
.addGracePeriod( .addGracePeriod(
GracePeriod.create( GracePeriod.create(
gracePeriodStatus, domain.getRepoId(), clock.nowUtc().plusDays(1), "foo", null)) gracePeriodStatus,
domain.getRepoId(),
clock.nowUtc().plusDays(1),
"TheRegistrar",
null))
.setCreationClientId("NewRegistrar") .setCreationClientId("NewRegistrar")
.setCreationTimeForTest(DateTime.parse("2003-11-26T22:00:00.0Z")) .setCreationTimeForTest(DateTime.parse("2003-11-26T22:00:00.0Z"))
.setRegistrationExpirationTime(DateTime.parse("2005-11-26T22:00:00.0Z")) .setRegistrationExpirationTime(DateTime.parse("2005-11-26T22:00:00.0Z"))
@ -328,10 +357,25 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
@Test @Test
void testSuccess_autoRenewGracePeriod() throws Exception { void testSuccess_autoRenewGracePeriod() throws Exception {
persistTestEntities(false); persistTestEntities(false);
Key<HistoryEntry> historyEntry = HistoryEntry historyEntry =
Key.create(domain.createVKey().getOfyKey(), HistoryEntry.class, 67890); persistResource(
VKey<BillingEvent.Recurring> recurringVKey = new HistoryEntry.Builder()
VKey.from(Key.create(historyEntry, Recurring.class, 12345)); .setParent(domain)
.setType(HistoryEntry.Type.DOMAIN_CREATE)
.setModificationTime(clock.nowUtc())
.build());
BillingEvent.Recurring renewEvent =
persistResource(
new BillingEvent.Recurring.Builder()
.setReason(Reason.RENEW)
.setFlags(ImmutableSet.of(Flag.AUTO_RENEW))
.setTargetId(getUniqueIdFromCommand())
.setClientId("TheRegistrar")
.setEventTime(clock.nowUtc())
.setRecurrenceEndTime(END_OF_TIME)
.setParent(historyEntry)
.build());
VKey<BillingEvent.Recurring> recurringVKey = renewEvent.createVKey();
// Add an AUTO_RENEW grace period to the saved resource. // Add an AUTO_RENEW grace period to the saved resource.
persistResource( persistResource(
domain domain
@ -341,10 +385,10 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
GracePeriodStatus.AUTO_RENEW, GracePeriodStatus.AUTO_RENEW,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
recurringVKey)) recurringVKey))
.build()); .build());
doSuccessfulTest("domain_info_response_autorenewperiod.xml", false); doSuccessfulTest("domain_info_response_autorenewperiod.xml", false, ImmutableMap.of(), true);
} }
@Test @Test
@ -360,7 +404,7 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
GracePeriodStatus.REDEMPTION, GracePeriodStatus.REDEMPTION,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
null)) null))
.setStatusValues(ImmutableSet.of(StatusValue.PENDING_DELETE)) .setStatusValues(ImmutableSet.of(StatusValue.PENDING_DELETE))
.build()); .build());
@ -379,7 +423,7 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
GracePeriodStatus.RENEW, GracePeriodStatus.RENEW,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
null)) null))
.build()); .build());
doSuccessfulTest("domain_info_response_renewperiod.xml", false); doSuccessfulTest("domain_info_response_renewperiod.xml", false);
@ -397,14 +441,14 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
GracePeriodStatus.RENEW, GracePeriodStatus.RENEW,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
null)) null))
.addGracePeriod( .addGracePeriod(
GracePeriod.create( GracePeriod.create(
GracePeriodStatus.RENEW, GracePeriodStatus.RENEW,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(2), clock.nowUtc().plusDays(2),
"foo", "TheRegistrar",
null)) null))
.build()); .build());
doSuccessfulTest("domain_info_response_renewperiod.xml", false); doSuccessfulTest("domain_info_response_renewperiod.xml", false);
@ -422,7 +466,7 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
GracePeriodStatus.TRANSFER, GracePeriodStatus.TRANSFER,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
null)) null))
.build()); .build());
doSuccessfulTest("domain_info_response_transferperiod.xml", false); doSuccessfulTest("domain_info_response_transferperiod.xml", false);
@ -450,14 +494,14 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
GracePeriodStatus.ADD, GracePeriodStatus.ADD,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
null)) null))
.addGracePeriod( .addGracePeriod(
GracePeriod.create( GracePeriod.create(
GracePeriodStatus.RENEW, GracePeriodStatus.RENEW,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(2), clock.nowUtc().plusDays(2),
"foo", "TheRegistrar",
null)) null))
.build()); .build());
doSuccessfulTest("domain_info_response_stackedaddrenewperiod.xml", false); doSuccessfulTest("domain_info_response_stackedaddrenewperiod.xml", false);
@ -475,7 +519,7 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
GracePeriodStatus.ADD, GracePeriodStatus.ADD,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
null)) null))
.setDsData( .setDsData(
ImmutableSet.of( ImmutableSet.of(
@ -929,4 +973,12 @@ class DomainInfoFlowTest extends ResourceFlowTestCase<DomainInfoFlow, DomainBase
assertIcannReportingActivityFieldLogged("srs-dom-info"); assertIcannReportingActivityFieldLogged("srs-dom-info");
assertTldsFieldLogged("tld"); assertTldsFieldLogged("tld");
} }
class SetClockExtension implements BeforeEachCallback {
@Override
public void beforeEach(ExtensionContext context) {
// Kick the clock back to before the earliest date that we set the clock to.
clock.setTo(DateTime.parse("2005-03-03T22:00:00.000Z"));
}
}
} }

View file

@ -70,16 +70,23 @@ import google.registry.model.registry.Registry;
import google.registry.model.reporting.DomainTransactionRecord; import google.registry.model.reporting.DomainTransactionRecord;
import google.registry.model.reporting.DomainTransactionRecord.TransactionReportField; import google.registry.model.reporting.DomainTransactionRecord.TransactionReportField;
import google.registry.model.reporting.HistoryEntry; import google.registry.model.reporting.HistoryEntry;
import google.registry.testing.ReplayExtension;
import java.util.Map; import java.util.Map;
import org.joda.money.Money; import org.joda.money.Money;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
/** Unit tests for {@link DomainRestoreRequestFlow}. */ /** Unit tests for {@link DomainRestoreRequestFlow}. */
class DomainRestoreRequestFlowTest class DomainRestoreRequestFlowTest
extends ResourceFlowTestCase<DomainRestoreRequestFlow, DomainBase> { extends ResourceFlowTestCase<DomainRestoreRequestFlow, DomainBase> {
@Order(value = Order.DEFAULT - 2)
@RegisterExtension
final ReplayExtension replayExtension = ReplayExtension.createWithCompare(clock);
private static final ImmutableMap<String, String> FEE_06_MAP = private static final ImmutableMap<String, String> FEE_06_MAP =
ImmutableMap.of("FEE_VERSION", "0.6", "FEE_NS", "fee", "CURRENCY", "USD"); ImmutableMap.of("FEE_VERSION", "0.6", "FEE_NS", "fee", "CURRENCY", "USD");
private static final ImmutableMap<String, String> FEE_11_MAP = private static final ImmutableMap<String, String> FEE_11_MAP =
@ -99,11 +106,12 @@ class DomainRestoreRequestFlowTest
} }
void persistPendingDeleteDomain(DateTime expirationTime) throws Exception { void persistPendingDeleteDomain(DateTime expirationTime) throws Exception {
DomainBase domain = newDomainBase(getUniqueIdFromCommand()); DomainBase domain = persistResource(newDomainBase(getUniqueIdFromCommand()));
HistoryEntry historyEntry = HistoryEntry historyEntry =
persistResource( persistResource(
new HistoryEntry.Builder() new HistoryEntry.Builder()
.setType(HistoryEntry.Type.DOMAIN_DELETE) .setType(HistoryEntry.Type.DOMAIN_DELETE)
.setModificationTime(clock.nowUtc())
.setParent(domain) .setParent(domain)
.build()); .build());
persistResource( persistResource(
@ -116,7 +124,7 @@ class DomainRestoreRequestFlowTest
GracePeriodStatus.REDEMPTION, GracePeriodStatus.REDEMPTION,
domain.getRepoId(), domain.getRepoId(),
clock.nowUtc().plusDays(1), clock.nowUtc().plusDays(1),
"foo", "TheRegistrar",
null)) null))
.setStatusValues(ImmutableSet.of(StatusValue.PENDING_DELETE)) .setStatusValues(ImmutableSet.of(StatusValue.PENDING_DELETE))
.setDeletePollMessage( .setDeletePollMessage(

View file

@ -28,7 +28,7 @@
<fee:command name="create"> <fee:command name="create">
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-03T10:00:00.000Z">50.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-03T10:00:00.002Z">50.00</fee:fee>
<fee:date>2010-01-02T13:22:21Z</fee:date> <fee:date>2010-01-02T13:22:21Z</fee:date>
<fee:notAfter>2010-01-03T10:00:00.000Z</fee:notAfter> <fee:notAfter>2010-01-03T10:00:00.000Z</fee:notAfter>
</fee:command> </fee:command>
@ -40,7 +40,7 @@
<fee:command name="create"> <fee:command name="create">
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-03T10:00:00.000Z">50.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-03T10:00:00.002Z">50.00</fee:fee>
<fee:date>2010-01-02T13:22:21Z</fee:date> <fee:date>2010-01-02T13:22:21Z</fee:date>
<fee:notAfter>2010-01-03T10:00:00.000Z</fee:notAfter> <fee:notAfter>2010-01-03T10:00:00.000Z</fee:notAfter>
</fee:command> </fee:command>
@ -52,7 +52,7 @@
<fee:command name="create"> <fee:command name="create">
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-03T10:00:00.000Z">50.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-03T10:00:00.002Z">50.00</fee:fee>
<fee:date>2010-01-02T13:22:21Z</fee:date> <fee:date>2010-01-02T13:22:21Z</fee:date>
<fee:notAfter>2010-01-03T10:00:00.000Z</fee:notAfter> <fee:notAfter>2010-01-03T10:00:00.000Z</fee:notAfter>
</fee:command> </fee:command>

View file

@ -25,7 +25,7 @@
<fee:command>create</fee:command> <fee:command>create</fee:command>
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
</fee:cd> </fee:cd>
<fee:cd xmlns:fee="urn:ietf:params:xml:ns:fee-0.6"> <fee:cd xmlns:fee="urn:ietf:params:xml:ns:fee-0.6">
<fee:name>example3.tld</fee:name> <fee:name>example3.tld</fee:name>
@ -33,7 +33,7 @@
<fee:command>create</fee:command> <fee:command>create</fee:command>
<fee:period unit="y">2</fee:period> <fee:period unit="y">2</fee:period>
<fee:fee description="create">26.00</fee:fee> <fee:fee description="create">26.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
</fee:cd> </fee:cd>
</fee:chkData> </fee:chkData>
</extension> </extension>

View file

@ -28,7 +28,7 @@
<fee:currency>USD</fee:currency> <fee:currency>USD</fee:currency>
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
</fee:cd> </fee:cd>
<fee:cd avail="1"> <fee:cd avail="1">
<fee:object> <fee:object>
@ -38,7 +38,7 @@
<fee:currency>USD</fee:currency> <fee:currency>USD</fee:currency>
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
</fee:cd> </fee:cd>
<fee:cd avail="1"> <fee:cd avail="1">
<fee:object> <fee:object>
@ -48,7 +48,7 @@
<fee:currency>USD</fee:currency> <fee:currency>USD</fee:currency>
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
</fee:cd> </fee:cd>
</fee:chkData> </fee:chkData>
</extension> </extension>

View file

@ -28,7 +28,7 @@
<fee:command name="create"> <fee:command name="create">
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
<fee:notAfter>2010-01-02T10:00:00.000Z</fee:notAfter> <fee:notAfter>2010-01-02T10:00:00.000Z</fee:notAfter>
</fee:command> </fee:command>
</fee:cd> </fee:cd>
@ -39,7 +39,7 @@
<fee:command name="create"> <fee:command name="create">
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
<fee:notAfter>2010-01-02T10:00:00.000Z</fee:notAfter> <fee:notAfter>2010-01-02T10:00:00.000Z</fee:notAfter>
</fee:command> </fee:command>
</fee:cd> </fee:cd>
@ -50,7 +50,7 @@
<fee:command name="create"> <fee:command name="create">
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">13.00</fee:fee> <fee:fee description="create">13.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00</fee:fee> <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00</fee:fee>
<fee:notAfter>2010-01-02T10:00:00.000Z</fee:notAfter> <fee:notAfter>2010-01-02T10:00:00.000Z</fee:notAfter>
</fee:command> </fee:command>
</fee:cd> </fee:cd>

View file

@ -19,7 +19,7 @@
<fee:command>create</fee:command> <fee:command>create</fee:command>
<fee:period unit="y">1</fee:period> <fee:period unit="y">1</fee:period>
<fee:fee description="create">100.00</fee:fee> <fee:fee description="create">100.00</fee:fee>
<fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.000Z">100.00 <fee:fee description="Early Access Period, fee expires: 2010-01-02T10:00:00.002Z">100.00
</fee:fee> </fee:fee>
<fee:class>premium</fee:class> <fee:class>premium</fee:class>
</fee:cd> </fee:cd>