Statically import Truth.assertThat() in tests (#2395)

This also involved breaking out an improperly done assertThat() helper overload
method for JsonObjects into a proper Subject that doesn't further overload
assertThat().
This commit is contained in:
Ben McIlwain
2024-04-09 16:27:26 +00:00
committed by GitHub
parent 4f1ca920a7
commit 2df583df1a
19 changed files with 497 additions and 343 deletions
@@ -28,7 +28,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import com.google.common.truth.Truth;
import google.registry.keyring.api.Keyring; import google.registry.keyring.api.Keyring;
import google.registry.request.UrlConnectionService; import google.registry.request.UrlConnectionService;
import google.registry.testing.FakeClock; import google.registry.testing.FakeClock;
@@ -117,8 +116,7 @@ class BsaCredentialTest {
void fetchNewAuthToken_whenStatusIsNotOK_throwsRetriableException() throws Exception { void fetchNewAuthToken_whenStatusIsNotOK_throwsRetriableException() throws Exception {
setupHttp(); setupHttp();
when(connection.getResponseCode()).thenReturn(202); when(connection.getResponseCode()).thenReturn(202);
Truth.assertThat( assertThat(assertThrows(BsaException.class, () -> credential.getAuthToken()).isRetriable())
assertThrows(BsaException.class, () -> credential.getAuthToken()).isRetriable())
.isTrue(); .isTrue();
} }
@@ -14,6 +14,7 @@
package google.registry.flows; package google.registry.flows;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.model.EppResourceUtils.loadByForeignKey; import static google.registry.model.EppResourceUtils.loadByForeignKey;
import static google.registry.model.eppoutput.Result.Code.SUCCESS; import static google.registry.model.eppoutput.Result.Code.SUCCESS;
import static google.registry.model.eppoutput.Result.Code.SUCCESS_AND_CLOSE; import static google.registry.model.eppoutput.Result.Code.SUCCESS_AND_CLOSE;
@@ -35,7 +36,6 @@ import static org.joda.money.CurrencyUnit.USD;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSortedMap; import com.google.common.collect.ImmutableSortedMap;
import com.google.common.collect.Ordering; import com.google.common.collect.Ordering;
import com.google.common.truth.Truth;
import com.google.re2j.Matcher; import com.google.re2j.Matcher;
import com.google.re2j.Pattern; import com.google.re2j.Pattern;
import google.registry.model.billing.BillingBase.Reason; import google.registry.model.billing.BillingBase.Reason;
@@ -494,8 +494,7 @@ class EppLifecycleDomainTest extends EppTestCase {
// Make sure that in the future, the domain expiration is unchanged after deletion // Make sure that in the future, the domain expiration is unchanged after deletion
Domain clonedDomain = domain.cloneProjectedAtTime(deleteTime.plusYears(5)); Domain clonedDomain = domain.cloneProjectedAtTime(deleteTime.plusYears(5));
Truth.assertThat(clonedDomain.getRegistrationExpirationTime()) assertThat(clonedDomain.getRegistrationExpirationTime()).isEqualTo(createTime.plusYears(2));
.isEqualTo(createTime.plusYears(2));
} }
@Test @Test
@@ -51,7 +51,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet; 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.truth.Truth;
import google.registry.flows.EppException; import google.registry.flows.EppException;
import google.registry.flows.EppRequestSource; import google.registry.flows.EppRequestSource;
import google.registry.flows.FlowUtils.NotLoggedInException; import google.registry.flows.FlowUtils.NotLoggedInException;
@@ -1348,7 +1347,7 @@ class DomainRenewFlowTest extends ResourceFlowTestCase<DomainRenewFlow, Domain>
// We still need to verify that the bulk token is removed as it's not being tested as a part of // We still need to verify that the bulk token is removed as it's not being tested as a part of
// doSuccessfulTest // doSuccessfulTest
Domain domain = reloadResourceByForeignKey(); Domain domain = reloadResourceByForeignKey();
Truth.assertThat(domain.getCurrentBulkToken()).isEmpty(); assertThat(domain.getCurrentBulkToken()).isEmpty();
} }
@Test @Test
@@ -14,11 +14,11 @@
package google.registry.model.console; package google.registry.model.console;
import static com.google.common.truth.Truth.assertThat;
import static google.registry.model.ImmutableObjectSubject.assertAboutImmutableObjects; import static google.registry.model.ImmutableObjectSubject.assertAboutImmutableObjects;
import static google.registry.persistence.transaction.TransactionManagerFactory.tm; import static google.registry.persistence.transaction.TransactionManagerFactory.tm;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
import com.google.common.truth.Truth;
import google.registry.model.EntityTestCase; import google.registry.model.EntityTestCase;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -57,10 +57,10 @@ public class UserDaoTest extends EntityTestCase {
UserDao.saveUser(user); UserDao.saveUser(user);
User fromDb = UserDao.loadUser("email@email.com").get(); User fromDb = UserDao.loadUser("email@email.com").get();
// nonexistent one should never exist // nonexistent one should never exist
Truth.assertThat(UserDao.loadUser("nonexistent@email.com")).isEmpty(); assertThat(UserDao.loadUser("nonexistent@email.com")).isEmpty();
// now try deleting the one that does exist // now try deleting the one that does exist
tm().transact(() -> tm().delete(fromDb)); tm().transact(() -> tm().delete(fromDb));
Truth.assertThat(UserDao.loadUser("email@email.com")).isEmpty(); assertThat(UserDao.loadUser("email@email.com")).isEmpty();
} }
@Test @Test
@@ -22,7 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.truth.Truth;
import google.registry.model.ImmutableObject; import google.registry.model.ImmutableObject;
import google.registry.persistence.VKey; import google.registry.persistence.VKey;
import google.registry.persistence.transaction.JpaTestExtensions.JpaUnitTestExtension; import google.registry.persistence.transaction.JpaTestExtensions.JpaUnitTestExtension;
@@ -328,10 +327,10 @@ public class TransactionManagerTest {
@Test @Test
void loadSingleton_returnsValue_orEmpty() { void loadSingleton_returnsValue_orEmpty() {
assertEntityNotExist(theEntity); assertEntityNotExist(theEntity);
Truth.assertThat(tm().transact(() -> tm().loadSingleton(TestEntity.class))).isEmpty(); assertThat(tm().transact(() -> tm().loadSingleton(TestEntity.class))).isEmpty();
tm().transact(() -> tm().insert(theEntity)); tm().transact(() -> tm().insert(theEntity));
Truth.assertThat(tm().transact(() -> tm().loadSingleton(TestEntity.class))).hasValue(theEntity); assertThat(tm().transact(() -> tm().loadSingleton(TestEntity.class))).hasValue(theEntity);
} }
@Test @Test
@@ -15,7 +15,6 @@
package google.registry.rdap; package google.registry.rdap;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static google.registry.rdap.RdapTestHelper.assertThat;
import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.createTld;
import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.testing.DatabaseHelper.persistResource;
import static google.registry.testing.DatabaseHelper.persistSimpleResources; import static google.registry.testing.DatabaseHelper.persistSimpleResources;
@@ -24,6 +23,7 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeDomain;
import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry; import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs;
import static google.registry.testing.GsonSubject.assertAboutJson;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
@@ -221,7 +221,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
} }
private void assertProperResponseForCatLol(String queryString, String expectedOutputFile) { private void assertProperResponseForCatLol(String queryString, String expectedOutputFile) {
assertThat(generateActualJson(queryString)) assertAboutJson()
.that(generateActualJson(queryString))
.isEqualTo( .isEqualTo(
addBoilerplate( addBoilerplate(
jsonFileBuilder() jsonFileBuilder()
@@ -238,7 +239,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
@Test @Test
void testInvalidDomain_returns400() { void testInvalidDomain_returns400() {
assertThat(generateActualJson("invalid/domain/name")) assertAboutJson()
.that(generateActualJson("invalid/domain/name"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"invalid/domain/name is not a valid domain name: Domain names can only contain a-z," "invalid/domain/name is not a valid domain name: Domain names can only contain a-z,"
@@ -249,7 +251,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
@Test @Test
void testUnknownDomain_returns400() { void testUnknownDomain_returns400() {
assertThat(generateActualJson("missingdomain.com")) assertAboutJson()
.that(generateActualJson("missingdomain.com"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"missingdomain.com is not a valid domain name: Domain name is under tld com which" "missingdomain.com is not a valid domain name: Domain name is under tld com which"
@@ -299,7 +302,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
@Test @Test
void testIdnDomain_works() { void testIdnDomain_works() {
login("idnregistrar"); login("idnregistrar");
assertThat(generateActualJson("cat.みんな")) assertAboutJson()
.that(generateActualJson("cat.みんな"))
.isEqualTo( .isEqualTo(
addBoilerplate( addBoilerplate(
jsonFileBuilder() jsonFileBuilder()
@@ -317,7 +321,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
@Test @Test
void testIdnDomainWithPercentEncoding_works() { void testIdnDomainWithPercentEncoding_works() {
login("idnregistrar"); login("idnregistrar");
assertThat(generateActualJson("cat.%E3%81%BF%E3%82%93%E3%81%AA")) assertAboutJson()
.that(generateActualJson("cat.%E3%81%BF%E3%82%93%E3%81%AA"))
.isEqualTo( .isEqualTo(
addBoilerplate( addBoilerplate(
jsonFileBuilder() jsonFileBuilder()
@@ -335,7 +340,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
@Test @Test
void testPunycodeDomain_works() { void testPunycodeDomain_works() {
login("idnregistrar"); login("idnregistrar");
assertThat(generateActualJson("cat.xn--q9jyb4c")) assertAboutJson()
.that(generateActualJson("cat.xn--q9jyb4c"))
.isEqualTo( .isEqualTo(
addBoilerplate( addBoilerplate(
jsonFileBuilder() jsonFileBuilder()
@@ -353,7 +359,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
@Test @Test
void testMultilevelDomain_works() { void testMultilevelDomain_works() {
login("1tldregistrar"); login("1tldregistrar");
assertThat(generateActualJson("cat.1.tld")) assertAboutJson()
.that(generateActualJson("cat.1.tld"))
.isEqualTo( .isEqualTo(
addBoilerplate( addBoilerplate(
jsonFileBuilder() jsonFileBuilder()
@@ -379,7 +386,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
@Test @Test
void testDeletedDomain_notFound() { void testDeletedDomain_notFound() {
assertThat(generateActualJson("dodo.lol")) assertAboutJson()
.that(generateActualJson("dodo.lol"))
.isEqualTo(generateExpectedJsonError("dodo.lol not found", 404)); .isEqualTo(generateExpectedJsonError("dodo.lol not found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
} }
@@ -410,7 +418,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
void testDeletedDomain_works_loggedInAsCorrectRegistrar() { void testDeletedDomain_works_loggedInAsCorrectRegistrar() {
login("evilregistrar"); login("evilregistrar");
action.includeDeletedParam = Optional.of(true); action.includeDeletedParam = Optional.of(true);
assertThat(generateActualJson("dodo.lol")) assertAboutJson()
.that(generateActualJson("dodo.lol"))
.isEqualTo( .isEqualTo(
addBoilerplate( addBoilerplate(
jsonFileBuilder() jsonFileBuilder()
@@ -429,7 +438,8 @@ class RdapDomainActionTest extends RdapActionBaseTestCase<RdapDomainAction> {
void testDeletedDomain_works_loggedInAsAdmin() { void testDeletedDomain_works_loggedInAsAdmin() {
loginAsAdmin(); loginAsAdmin();
action.includeDeletedParam = Optional.of(true); action.includeDeletedParam = Optional.of(true);
assertThat(generateActualJson("dodo.lol")) assertAboutJson()
.that(generateActualJson("dodo.lol"))
.isEqualTo( .isEqualTo(
addBoilerplate( addBoilerplate(
jsonFileBuilder() jsonFileBuilder()
@@ -15,7 +15,6 @@
package google.registry.rdap; package google.registry.rdap;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static google.registry.rdap.RdapTestHelper.assertThat;
import static google.registry.rdap.RdapTestHelper.parseJsonObject; import static google.registry.rdap.RdapTestHelper.parseJsonObject;
import static google.registry.request.Action.Method.POST; import static google.registry.request.Action.Method.POST;
import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.createTld;
@@ -27,6 +26,7 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeDomain;
import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry; import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs;
import static google.registry.testing.GsonSubject.assertAboutJson;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableListMultimap;
@@ -481,7 +481,9 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
private void runSuccessfulTest(RequestType requestType, String queryString, JsonObject expected) { private void runSuccessfulTest(RequestType requestType, String queryString, JsonObject expected) {
rememberWildcardType(queryString); rememberWildcardType(queryString);
assertThat(generateActualJson(requestType, queryString)).isEqualTo(wrapInSearchReply(expected)); assertAboutJson()
.that(generateActualJson(requestType, queryString))
.isEqualTo(wrapInSearchReply(expected));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@@ -514,7 +516,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
String nextQuery, String nextQuery,
String filename) { String filename) {
rememberWildcardType(queryString); rememberWildcardType(queryString);
assertThat(generateActualJson(requestType, queryString)) assertAboutJson()
.that(generateActualJson(requestType, queryString))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("domain1.lol", domainRoid1) .addDomain("domain1.lol", domainRoid1)
@@ -528,7 +531,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
private void runNotFoundTest(RequestType requestType, String queryString, String errorMessage) { private void runNotFoundTest(RequestType requestType, String queryString, String errorMessage) {
rememberWildcardType(queryString); rememberWildcardType(queryString);
assertThat(generateActualJson(requestType, queryString)) assertAboutJson()
.that(generateActualJson(requestType, queryString))
.isEqualTo(generateExpectedJsonError(errorMessage, 404)); .isEqualTo(generateExpectedJsonError(errorMessage, 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
} }
@@ -645,7 +649,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testInvalidRequest_rejected() { void testInvalidRequest_rejected() {
assertThat(generateActualJson(RequestType.NONE, null)) assertAboutJson()
.that(generateActualJson(RequestType.NONE, null))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"You must specify either name=XXXX, nsLdhName=YYYY or nsIp=ZZZZ", 400)); "You must specify either name=XXXX, nsLdhName=YYYY or nsIp=ZZZZ", 400));
@@ -655,7 +660,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testInvalidWildcard_rejected() { void testInvalidWildcard_rejected() {
assertThat(generateActualJson(RequestType.NAME, "exam*ple")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "exam*ple"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Query can only have a single wildcard, and it must be at the end of a label, but" "Query can only have a single wildcard, and it must be at the end of a label, but"
@@ -667,7 +673,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testMultipleWildcards_rejected() { void testMultipleWildcards_rejected() {
assertThat(generateActualJson(RequestType.NAME, "*.*")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "*.*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Query can only have a single wildcard, and it must be at the end of a label, but" "Query can only have a single wildcard, and it must be at the end of a label, but"
@@ -680,7 +687,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testNoCharactersToMatch_rejected() { void testNoCharactersToMatch_rejected() {
rememberWildcardType("*"); rememberWildcardType("*");
assertThat(generateActualJson(RequestType.NAME, "*")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Initial search string is required for wildcard domain searches without a TLD" "Initial search string is required for wildcard domain searches without a TLD"
@@ -693,7 +701,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testFewerThanTwoCharactersToMatch_rejected() { void testFewerThanTwoCharactersToMatch_rejected() {
rememberWildcardType("a*"); rememberWildcardType("a*");
assertThat(generateActualJson(RequestType.NAME, "a*")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "a*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Initial search string must be at least 2 characters for wildcard domain searches" "Initial search string must be at least 2 characters for wildcard domain searches"
@@ -846,7 +855,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testDomainMatch_catstar_lol_found_sql() { void testDomainMatch_catstar_lol_found_sql() {
rememberWildcardType("cat*.lol"); rememberWildcardType("cat*.lol");
assertThat(generateActualJson(RequestType.NAME, "cat*.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "cat*.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql()); .isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L)); verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L));
@@ -855,7 +865,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testDomainMatch_cstar_lol_found_sql() { void testDomainMatch_cstar_lol_found_sql() {
rememberWildcardType("c*.lol"); rememberWildcardType("c*.lol");
assertThat(generateActualJson(RequestType.NAME, "c*.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "c*.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql()); .isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L)); verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L));
@@ -870,7 +881,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testDomainMatch_star_lol_found_sql() { void testDomainMatch_star_lol_found_sql() {
rememberWildcardType("*.lol"); rememberWildcardType("*.lol");
assertThat(generateActualJson(RequestType.NAME, "*.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "*.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql()); .isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L)); verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L));
@@ -880,7 +892,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
void testDomainMatch_star_lol_found_sameRegistrarRequested_sql() { void testDomainMatch_star_lol_found_sameRegistrarRequested_sql() {
action.registrarParam = Optional.of("evilregistrar"); action.registrarParam = Optional.of("evilregistrar");
rememberWildcardType("*.lol"); rememberWildcardType("*.lol");
assertThat(generateActualJson(RequestType.NAME, "*.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "*.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql()); .isEqualTo(generateExpectedJsonForTwoDomainsCatStarReplySql());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L)); verifyMetrics(SearchType.BY_DOMAIN_NAME, Optional.of(2L));
@@ -897,7 +910,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testDomainMatch_cat_star_found_sql() { void testDomainMatch_cat_star_found_sql() {
rememberWildcardType("cat.*"); rememberWildcardType("cat.*");
assertThat(generateActualJson(RequestType.NAME, "cat.*")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "cat.*"))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("cat.1.test", "39-1_TEST") .addDomain("cat.1.test", "39-1_TEST")
@@ -934,7 +948,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testDomainMatch_catstar_found_sql() { void testDomainMatch_catstar_found_sql() {
rememberWildcardType("cat*"); rememberWildcardType("cat*");
assertThat(generateActualJson(RequestType.NAME, "cat*")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "cat*"))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("cat.1.test", "39-1_TEST") .addDomain("cat.1.test", "39-1_TEST")
@@ -1058,7 +1073,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
// our way through all of them. // our way through all of them.
createManyDomainsAndHosts(4, 50, 2); createManyDomainsAndHosts(4, 50, 2);
rememberWildcardType("domain*.lol"); rememberWildcardType("domain*.lol");
assertThat(generateActualJson(RequestType.NAME, "domain*.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "domain*.lol"))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("domain100.lol", "AC-LOL") .addDomain("domain100.lol", "AC-LOL")
@@ -1106,7 +1122,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
void testDomainMatch_tldSearchOrderedProperly_sql() { void testDomainMatch_tldSearchOrderedProperly_sql() {
createManyDomainsAndHosts(4, 1, 2); createManyDomainsAndHosts(4, 1, 2);
rememberWildcardType("*.lol"); rememberWildcardType("*.lol");
assertThat(generateActualJson(RequestType.NAME, "*.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "*.lol"))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("cat.lol", "C-LOL") .addDomain("cat.lol", "C-LOL")
@@ -1139,7 +1156,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
void testDomainMatch_truncatedResultsAfterMultipleChunks_sql() { void testDomainMatch_truncatedResultsAfterMultipleChunks_sql() {
createManyDomainsAndHosts(5, 6, 2); createManyDomainsAndHosts(5, 6, 2);
rememberWildcardType("domain*.lol"); rememberWildcardType("domain*.lol");
assertThat(generateActualJson(RequestType.NAME, "domain*.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NAME, "domain*.lol"))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("domain12.lol", "5A-LOL") .addDomain("domain12.lol", "5A-LOL")
@@ -1197,7 +1215,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testNameserverMatch_foundMultiple() { void testNameserverMatch_foundMultiple() {
rememberWildcardType("ns1.cat.lol"); rememberWildcardType("ns1.cat.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "ns1.cat.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "ns1.cat.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 1); verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 1);
@@ -1207,7 +1226,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
void testNameserverMatch_foundMultiple_sameRegistrarRequested() { void testNameserverMatch_foundMultiple_sameRegistrarRequested() {
action.registrarParam = Optional.of("TheRegistrar"); action.registrarParam = Optional.of("TheRegistrar");
rememberWildcardType("ns1.cat.lol"); rememberWildcardType("ns1.cat.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "ns1.cat.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "ns1.cat.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 1); verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 1);
@@ -1251,7 +1271,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testNameserverMatchWithNoPrefixAndDomainSuffix_found() { void testNameserverMatchWithNoPrefixAndDomainSuffix_found() {
rememberWildcardType("*.cat.lol"); rememberWildcardType("*.cat.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "*.cat.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "*.cat.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2); verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2);
@@ -1260,7 +1281,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testNameserverMatchWithOneCharacterPrefixAndDomainSuffix_found() { void testNameserverMatchWithOneCharacterPrefixAndDomainSuffix_found() {
rememberWildcardType("n*.cat.lol"); rememberWildcardType("n*.cat.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "n*.cat.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "n*.cat.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2); verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2);
@@ -1270,7 +1292,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
void testNameserverMatchWithOneCharacterPrefixAndDomainSuffix_found_sameRegistrarRequested() { void testNameserverMatchWithOneCharacterPrefixAndDomainSuffix_found_sameRegistrarRequested() {
action.registrarParam = Optional.of("TheRegistrar"); action.registrarParam = Optional.of("TheRegistrar");
rememberWildcardType("n*.cat.lol"); rememberWildcardType("n*.cat.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "n*.cat.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "n*.cat.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2); verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2);
@@ -1286,7 +1309,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testNameserverMatchWithTwoCharacterPrefixAndDomainSuffix_found() { void testNameserverMatchWithTwoCharacterPrefixAndDomainSuffix_found() {
rememberWildcardType("ns*.cat.lol"); rememberWildcardType("ns*.cat.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "ns*.cat.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "ns*.cat.lol"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2); verifyMetrics(SearchType.BY_NAMESERVER_NAME, 2, 2);
@@ -1563,7 +1587,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
// not trigger the truncation warning because all the domains will be duplicates. // not trigger the truncation warning because all the domains will be duplicates.
createManyDomainsAndHosts(4, 1, 36); createManyDomainsAndHosts(4, 1, 36);
rememberWildcardType("ns*.domain1.lol"); rememberWildcardType("ns*.domain1.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "ns*.domain1.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "ns*.domain1.lol"))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("domain1.lol", "8F-LOL") .addDomain("domain1.lol", "8F-LOL")
@@ -1579,7 +1604,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
void testNameserverMatch_incompleteResultsSet() { void testNameserverMatch_incompleteResultsSet() {
createManyDomainsAndHosts(2, 1, 41); createManyDomainsAndHosts(2, 1, 41);
rememberWildcardType("ns*.domain1.lol"); rememberWildcardType("ns*.domain1.lol");
assertThat(generateActualJson(RequestType.NS_LDH_NAME, "ns*.domain1.lol")) assertAboutJson()
.that(generateActualJson(RequestType.NS_LDH_NAME, "ns*.domain1.lol"))
.isEqualTo( .isEqualTo(
jsonFileBuilder() jsonFileBuilder()
.addDomain("domain1.lol", "97-LOL") .addDomain("domain1.lol", "97-LOL")
@@ -1621,7 +1647,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
@Test @Test
void testAddressMatchV4Address_foundMultiple() { void testAddressMatchV4Address_foundMultiple() {
rememberWildcardType("1.2.3.4"); rememberWildcardType("1.2.3.4");
assertThat(generateActualJson(RequestType.NS_IP, "1.2.3.4")) assertAboutJson()
.that(generateActualJson(RequestType.NS_IP, "1.2.3.4"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_ADDRESS, 2, 1); verifyMetrics(SearchType.BY_NAMESERVER_ADDRESS, 2, 1);
@@ -1631,7 +1658,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
void testAddressMatchV4Address_foundMultiple_sameRegistrarRequested() { void testAddressMatchV4Address_foundMultiple_sameRegistrarRequested() {
action.registrarParam = Optional.of("TheRegistrar"); action.registrarParam = Optional.of("TheRegistrar");
rememberWildcardType("1.2.3.4"); rememberWildcardType("1.2.3.4");
assertThat(generateActualJson(RequestType.NS_IP, "1.2.3.4")) assertAboutJson()
.that(generateActualJson(RequestType.NS_IP, "1.2.3.4"))
.isEqualTo(generateExpectedJsonForTwoDomainsNsReply()); .isEqualTo(generateExpectedJsonForTwoDomainsNsReply());
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(SearchType.BY_NAMESERVER_ADDRESS, 2, 1); verifyMetrics(SearchType.BY_NAMESERVER_ADDRESS, 2, 1);
@@ -1711,7 +1739,8 @@ class RdapDomainSearchActionTest extends RdapSearchActionTestCase<RdapDomainSear
login("evilregistrar"); login("evilregistrar");
persistDomainAsDeleted(domainCatExample, clock.nowUtc().minusDays(1)); persistDomainAsDeleted(domainCatExample, clock.nowUtc().minusDays(1));
rememberWildcardType("1.2.3.4"); rememberWildcardType("1.2.3.4");
assertThat(generateActualJson(RequestType.NS_IP, "1.2.3.4")) assertAboutJson()
.that(generateActualJson(RequestType.NS_IP, "1.2.3.4"))
.isEqualTo( .isEqualTo(
wrapInSearchReply( wrapInSearchReply(
jsonFileBuilder() jsonFileBuilder()
@@ -15,7 +15,6 @@
package google.registry.rdap; package google.registry.rdap;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static google.registry.rdap.RdapTestHelper.assertThat;
import static google.registry.rdap.RdapTestHelper.loadJsonFile; import static google.registry.rdap.RdapTestHelper.loadJsonFile;
import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.createTld;
import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.testing.DatabaseHelper.persistResource;
@@ -25,6 +24,7 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeDomain;
import static google.registry.testing.FullFieldsTestEntityHelper.makeHost; import static google.registry.testing.FullFieldsTestEntityHelper.makeHost;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs;
import static google.registry.testing.GsonSubject.assertAboutJson;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@@ -170,7 +170,8 @@ class RdapEntityActionTest extends RdapActionBaseTestCase<RdapEntityAction> {
String rdapStatus, String rdapStatus,
String address, String address,
String fileName) { String fileName) {
assertThat(generateActualJson(handleQuery)) assertAboutJson()
.that(generateActualJson(handleQuery))
.isEqualTo( .isEqualTo(
generateExpectedJsonWithTopLevelEntries( generateExpectedJsonWithTopLevelEntries(
handleQuery, fullName, rdapStatus, address, fileName)); handleQuery, fullName, rdapStatus, address, fileName));
@@ -178,7 +179,8 @@ class RdapEntityActionTest extends RdapActionBaseTestCase<RdapEntityAction> {
} }
private void runNotFoundTest(String handleQuery) { private void runNotFoundTest(String handleQuery) {
assertThat(generateActualJson(handleQuery)) assertAboutJson()
.that(generateActualJson(handleQuery))
.isEqualTo(generateExpectedJsonError(handleQuery + " not found", 404)); .isEqualTo(generateExpectedJsonError(handleQuery + " not found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
} }
@@ -305,7 +307,8 @@ class RdapEntityActionTest extends RdapActionBaseTestCase<RdapEntityAction> {
@Test @Test
void testRegistrarByName_found() { void testRegistrarByName_found() {
assertThat(generateActualJson("IDN%20Registrar")) assertAboutJson()
.that(generateActualJson("IDN%20Registrar"))
.isEqualTo( .isEqualTo(
generateExpectedJsonWithTopLevelEntries( generateExpectedJsonWithTopLevelEntries(
"102", "IDN Registrar", "active", null, "rdap_registrar.json")); "102", "IDN Registrar", "active", null, "rdap_registrar.json"));
@@ -364,9 +367,11 @@ class RdapEntityActionTest extends RdapActionBaseTestCase<RdapEntityAction> {
@Test @Test
void testQueryParameter_ignored() { void testQueryParameter_ignored() {
login("evilregistrar"); login("evilregistrar");
assertThat(generateActualJson(techContact.getRepoId() + "?key=value")).isEqualTo( assertAboutJson()
generateExpectedJsonWithTopLevelEntries( .that(generateActualJson(techContact.getRepoId() + "?key=value"))
techContact.getRepoId(), "rdap_associated_contact.json")); .isEqualTo(
generateExpectedJsonWithTopLevelEntries(
techContact.getRepoId(), "rdap_associated_contact.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@@ -15,7 +15,6 @@
package google.registry.rdap; package google.registry.rdap;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static google.registry.rdap.RdapTestHelper.assertThat;
import static google.registry.rdap.RdapTestHelper.loadJsonFile; import static google.registry.rdap.RdapTestHelper.loadJsonFile;
import static google.registry.rdap.RdapTestHelper.parseJsonObject; import static google.registry.rdap.RdapTestHelper.parseJsonObject;
import static google.registry.request.Action.Method.GET; import static google.registry.request.Action.Method.GET;
@@ -27,6 +26,7 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistD
import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry; import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs;
import static google.registry.testing.GsonSubject.assertAboutJson;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableListMultimap;
@@ -285,14 +285,16 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Nullable String address, @Nullable String address,
String fileName) { String fileName) {
rememberWildcardType(queryString); rememberWildcardType(queryString);
assertThat(generateActualJsonWithFullName(queryString)) assertAboutJson()
.that(generateActualJsonWithFullName(queryString))
.isEqualTo(generateExpectedJsonForEntity(handle, fullName, status, address, fileName)); .isEqualTo(generateExpectedJsonForEntity(handle, fullName, status, address, fileName));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
private void runNotFoundNameTest(String queryString) { private void runNotFoundNameTest(String queryString) {
rememberWildcardType(queryString); rememberWildcardType(queryString);
assertThat(generateActualJsonWithFullName(queryString)) assertAboutJson()
.that(generateActualJsonWithFullName(queryString))
.isEqualTo(generateExpectedJsonError("No entities found", 404)); .isEqualTo(generateExpectedJsonError("No entities found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
} }
@@ -323,14 +325,16 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Nullable String address, @Nullable String address,
String fileName) { String fileName) {
rememberWildcardType(queryString); rememberWildcardType(queryString);
assertThat(generateActualJsonWithHandle(queryString)) assertAboutJson()
.that(generateActualJsonWithHandle(queryString))
.isEqualTo(generateExpectedJsonForEntity(handle, fullName, status, address, fileName)); .isEqualTo(generateExpectedJsonForEntity(handle, fullName, status, address, fileName));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
private void runNotFoundHandleTest(String queryString) { private void runNotFoundHandleTest(String queryString) {
rememberWildcardType(queryString); rememberWildcardType(queryString);
assertThat(generateActualJsonWithHandle(queryString)) assertAboutJson()
.that(generateActualJsonWithHandle(queryString))
.isEqualTo(generateExpectedJsonError("No entities found", 404)); .isEqualTo(generateExpectedJsonError("No entities found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
} }
@@ -393,17 +397,18 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Test @Test
void testInvalidRequest_rejected() { void testInvalidRequest_rejected() {
action.run(); action.run();
assertThat(parseJsonObject(response.getPayload())) assertAboutJson()
.that(parseJsonObject(response.getPayload()))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError("You must specify either fn=XXXX or handle=YYYY", 400));
"You must specify either fn=XXXX or handle=YYYY", 400));
assertThat(response.getStatus()).isEqualTo(400); assertThat(response.getStatus()).isEqualTo(400);
verifyErrorMetrics(Optional.empty(), 400); verifyErrorMetrics(Optional.empty(), 400);
} }
@Test @Test
void testNameMatch_suffixRejected() { void testNameMatch_suffixRejected() {
assertThat(generateActualJsonWithFullName("exam*ple")) assertAboutJson()
.that(generateActualJsonWithFullName("exam*ple"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Query can only have a single wildcard, and it must be at the end of the query," "Query can only have a single wildcard, and it must be at the end of the query,"
@@ -415,7 +420,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Test @Test
void testHandleMatch_suffixRejected() { void testHandleMatch_suffixRejected() {
assertThat(generateActualJsonWithHandle("exam*ple")) assertAboutJson()
.that(generateActualJsonWithHandle("exam*ple"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Query can only have a single wildcard, and it must be at the end of the query," "Query can only have a single wildcard, and it must be at the end of the query,"
@@ -427,7 +433,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Test @Test
void testMultipleWildcards_rejected() { void testMultipleWildcards_rejected() {
assertThat(generateActualJsonWithHandle("*.*")) assertAboutJson()
.that(generateActualJsonWithHandle("*.*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Query can only have a single wildcard, and it must be at the end of the query," "Query can only have a single wildcard, and it must be at the end of the query,"
@@ -440,11 +447,10 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Test @Test
void testNoCharactersToMatch_rejected() { void testNoCharactersToMatch_rejected() {
rememberWildcardType("*"); rememberWildcardType("*");
assertThat(generateActualJsonWithHandle("*")) assertAboutJson()
.that(generateActualJsonWithHandle("*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError("Initial search string must be at least 2 characters", 422));
"Initial search string must be at least 2 characters",
422));
assertThat(response.getStatus()).isEqualTo(422); assertThat(response.getStatus()).isEqualTo(422);
verifyErrorMetrics(Optional.empty(), 422); verifyErrorMetrics(Optional.empty(), 422);
} }
@@ -452,11 +458,10 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Test @Test
void testFewerThanTwoCharactersToMatch_rejected() { void testFewerThanTwoCharactersToMatch_rejected() {
rememberWildcardType("a*"); rememberWildcardType("a*");
assertThat(generateActualJsonWithHandle("a*")) assertAboutJson()
.that(generateActualJsonWithHandle("a*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError("Initial search string must be at least 2 characters", 422));
"Initial search string must be at least 2 characters",
422));
assertThat(response.getStatus()).isEqualTo(422); assertThat(response.getStatus()).isEqualTo(422);
verifyErrorMetrics(Optional.empty(), 422); verifyErrorMetrics(Optional.empty(), 422);
} }
@@ -464,11 +469,11 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
@Test @Test
void testInvalidSubtype_rejected() { void testInvalidSubtype_rejected() {
action.subtypeParam = Optional.of("Space Aliens"); action.subtypeParam = Optional.of("Space Aliens");
assertThat(generateActualJsonWithFullName("Blinky (赤ベイ)")) assertAboutJson()
.that(generateActualJsonWithFullName("Blinky (赤ベイ)"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Subtype parameter must specify contacts, registrars or all", "Subtype parameter must specify contacts, registrars or all", 400));
400));
assertThat(response.getStatus()).isEqualTo(400); assertThat(response.getStatus()).isEqualTo(400);
metricSearchType = SearchType.NONE; // Error occurs before search type is set. metricSearchType = SearchType.NONE; // Error occurs before search type is set.
verifyErrorMetrics(Optional.empty(), 400); verifyErrorMetrics(Optional.empty(), 400);
@@ -569,7 +574,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
void testNameMatchContact_found_wildcardBoth() { void testNameMatchContact_found_wildcardBoth() {
login("2-RegistrarTest"); login("2-RegistrarTest");
rememberWildcardType("Blin*"); rememberWildcardType("Blin*");
assertThat(generateActualJsonWithFullName("Blin*")) assertAboutJson()
.that(generateActualJsonWithFullName("Blin*"))
.isEqualTo(generateExpectedJson("rdap_multiple_contacts2.json")); .isEqualTo(generateExpectedJson("rdap_multiple_contacts2.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(2); verifyMetrics(2);
@@ -661,7 +667,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
createManyContactsAndRegistrars(4, 0, registrarTest); createManyContactsAndRegistrars(4, 0, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
// JsonObject foo = generateActualJsonWithFullName("Entity *"); // JsonObject foo = generateActualJsonWithFullName("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo(generateExpectedJson("rdap_nontruncated_contacts.json")); .isEqualTo(generateExpectedJson("rdap_nontruncated_contacts.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(4); verifyMetrics(4);
@@ -672,7 +679,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
login("2-RegistrarTest"); login("2-RegistrarTest");
createManyContactsAndRegistrars(5, 0, registrarTest); createManyContactsAndRegistrars(5, 0, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo( .isEqualTo(
generateExpectedJson( generateExpectedJson(
"fn=Entity+*&cursor=YzpFbnRpdHkgNA%3D%3D", "rdap_truncated_contacts.json")); "fn=Entity+*&cursor=YzpFbnRpdHkgNA%3D%3D", "rdap_truncated_contacts.json"));
@@ -685,7 +693,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
login("2-RegistrarTest"); login("2-RegistrarTest");
createManyContactsAndRegistrars(9, 0, registrarTest); createManyContactsAndRegistrars(9, 0, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo( .isEqualTo(
generateExpectedJson( generateExpectedJson(
"fn=Entity+*&cursor=YzpFbnRpdHkgNA%3D%3D", "rdap_truncated_contacts.json")); "fn=Entity+*&cursor=YzpFbnRpdHkgNA%3D%3D", "rdap_truncated_contacts.json"));
@@ -717,7 +726,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
void testNameMatchRegistrars_nonTruncated() { void testNameMatchRegistrars_nonTruncated() {
createManyContactsAndRegistrars(0, 4, registrarTest); createManyContactsAndRegistrars(0, 4, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo(generateExpectedJson("rdap_nontruncated_registrars.json")); .isEqualTo(generateExpectedJson("rdap_nontruncated_registrars.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(0); verifyMetrics(0);
@@ -727,7 +737,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
void testNameMatchRegistrars_truncated() { void testNameMatchRegistrars_truncated() {
createManyContactsAndRegistrars(0, 5, registrarTest); createManyContactsAndRegistrars(0, 5, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo( .isEqualTo(
generateExpectedJson( generateExpectedJson(
"fn=Entity+*&cursor=cjpFbnRpdHkgNA%3D%3D", "rdap_truncated_registrars.json")); "fn=Entity+*&cursor=cjpFbnRpdHkgNA%3D%3D", "rdap_truncated_registrars.json"));
@@ -739,7 +750,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
void testNameMatchRegistrars_reallyTruncated() { void testNameMatchRegistrars_reallyTruncated() {
createManyContactsAndRegistrars(0, 9, registrarTest); createManyContactsAndRegistrars(0, 9, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo( .isEqualTo(
generateExpectedJson( generateExpectedJson(
"fn=Entity+*&cursor=cjpFbnRpdHkgNA%3D%3D", "rdap_truncated_registrars.json")); "fn=Entity+*&cursor=cjpFbnRpdHkgNA%3D%3D", "rdap_truncated_registrars.json"));
@@ -800,7 +812,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
login("2-RegistrarTest"); login("2-RegistrarTest");
createManyContactsAndRegistrars(3, 3, registrarTest); createManyContactsAndRegistrars(3, 3, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo( .isEqualTo(
generateExpectedJson( generateExpectedJson(
"fn=Entity+*&cursor=cjpFbnRpdHkgNA%3D%3D", "rdap_truncated_mixed_entities.json")); "fn=Entity+*&cursor=cjpFbnRpdHkgNA%3D%3D", "rdap_truncated_mixed_entities.json"));
@@ -830,7 +843,8 @@ class RdapEntitySearchActionTest extends RdapSearchActionTestCase<RdapEntitySear
action.subtypeParam = Optional.of("contacts"); action.subtypeParam = Optional.of("contacts");
createManyContactsAndRegistrars(4, 4, registrarTest); createManyContactsAndRegistrars(4, 4, registrarTest);
rememberWildcardType("Entity *"); rememberWildcardType("Entity *");
assertThat(generateActualJsonWithFullName("Entity *")) assertAboutJson()
.that(generateActualJsonWithFullName("Entity *"))
.isEqualTo(generateExpectedJson("rdap_nontruncated_contacts.json")); .isEqualTo(generateExpectedJson("rdap_nontruncated_contacts.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(4); verifyMetrics(4);
@@ -16,7 +16,6 @@ package google.registry.rdap;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static google.registry.rdap.RdapDataStructures.EventAction.TRANSFER; import static google.registry.rdap.RdapDataStructures.EventAction.TRANSFER;
import static google.registry.rdap.RdapTestHelper.assertThat;
import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.createTld;
import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.testing.DatabaseHelper.persistResource;
import static google.registry.testing.DatabaseHelper.persistSimpleResources; import static google.registry.testing.DatabaseHelper.persistSimpleResources;
@@ -24,6 +23,7 @@ import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistH
import static google.registry.testing.FullFieldsTestEntityHelper.makeDomain; import static google.registry.testing.FullFieldsTestEntityHelper.makeDomain;
import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry; import static google.registry.testing.FullFieldsTestEntityHelper.makeHistoryEntry;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
import static google.registry.testing.GsonSubject.assertAboutJson;
import static google.registry.testing.TestDataHelper.loadFile; import static google.registry.testing.TestDataHelper.loadFile;
import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
@@ -299,57 +299,65 @@ class RdapJsonFormatterTest {
@Test @Test
void testRegistrar() { void testRegistrar() {
assertThat(rdapJsonFormatter.createRdapRegistrarEntity(registrar, OutputDataType.FULL).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapRegistrarEntity(registrar, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_registrar.json")); .isEqualTo(loadJson("rdapjson_registrar.json"));
} }
@Test @Test
void testRegistrar_summary() { void testRegistrar_summary() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter.createRdapRegistrarEntity(registrar, OutputDataType.SUMMARY).toJson()) rdapJsonFormatter.createRdapRegistrarEntity(registrar, OutputDataType.SUMMARY).toJson())
.isEqualTo(loadJson("rdapjson_registrar_summary.json")); .isEqualTo(loadJson("rdapjson_registrar_summary.json"));
} }
@Test @Test
void testHost_ipv4() { void testHost_ipv4() {
assertThat(rdapJsonFormatter.createRdapNameserver(hostIpv4, OutputDataType.FULL).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapNameserver(hostIpv4, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_host_ipv4.json")); .isEqualTo(loadJson("rdapjson_host_ipv4.json"));
} }
@Test @Test
void testHost_ipv6() { void testHost_ipv6() {
assertThat(rdapJsonFormatter.createRdapNameserver(hostIpv6, OutputDataType.FULL).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapNameserver(hostIpv6, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_host_ipv6.json")); .isEqualTo(loadJson("rdapjson_host_ipv6.json"));
} }
@Test @Test
void testHost_both() { void testHost_both() {
assertThat(rdapJsonFormatter.createRdapNameserver(hostBoth, OutputDataType.FULL).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapNameserver(hostBoth, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_host_both.json")); .isEqualTo(loadJson("rdapjson_host_both.json"));
} }
@Test @Test
void testHost_both_summary() { void testHost_both_summary() {
assertThat(rdapJsonFormatter.createRdapNameserver(hostBoth, OutputDataType.SUMMARY).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapNameserver(hostBoth, OutputDataType.SUMMARY).toJson())
.isEqualTo(loadJson("rdapjson_host_both_summary.json")); .isEqualTo(loadJson("rdapjson_host_both_summary.json"));
} }
@Test @Test
void testHost_noAddresses() { void testHost_noAddresses() {
assertThat( assertAboutJson()
rdapJsonFormatter.createRdapNameserver(hostNoAddresses, OutputDataType.FULL).toJson()) .that(rdapJsonFormatter.createRdapNameserver(hostNoAddresses, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_host_no_addresses.json")); .isEqualTo(loadJson("rdapjson_host_no_addresses.json"));
} }
@Test @Test
void testHost_notLinked() { void testHost_notLinked() {
assertThat(rdapJsonFormatter.createRdapNameserver(hostNotLinked, OutputDataType.FULL).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapNameserver(hostNotLinked, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_host_not_linked.json")); .isEqualTo(loadJson("rdapjson_host_not_linked.json"));
} }
@Test @Test
void testHost_superordinateHasPendingTransfer() { void testHost_superordinateHasPendingTransfer() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapNameserver(hostSuperordinatePendingTransfer, OutputDataType.FULL) .createRdapNameserver(hostSuperordinatePendingTransfer, OutputDataType.FULL)
.toJson()) .toJson())
@@ -358,7 +366,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testRegistrant() { void testRegistrant() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity( .createRdapContactEntity(
contactRegistrant, contactRegistrant,
@@ -370,7 +379,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testRegistrant_summary() { void testRegistrant_summary() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity( .createRdapContactEntity(
contactRegistrant, contactRegistrant,
@@ -383,7 +393,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testRegistrant_loggedOut() { void testRegistrant_loggedOut() {
rdapJsonFormatter.rdapAuthorization = RdapAuthorization.PUBLIC_AUTHORIZATION; rdapJsonFormatter.rdapAuthorization = RdapAuthorization.PUBLIC_AUTHORIZATION;
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity( .createRdapContactEntity(
contactRegistrant, contactRegistrant,
@@ -402,7 +413,8 @@ class RdapJsonFormatterTest {
rdapJsonFormatter.fullServletPath = rdapJsonFormatter.fullServletPath =
rdapJsonFormatter.fullServletPath.substring( rdapJsonFormatter.fullServletPath.substring(
0, rdapJsonFormatter.fullServletPath.length() - 1); 0, rdapJsonFormatter.fullServletPath.length() - 1);
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity( .createRdapContactEntity(
contactRegistrant, contactRegistrant,
@@ -414,7 +426,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testAdmin() { void testAdmin() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity( .createRdapContactEntity(
contactAdmin, ImmutableSet.of(RdapEntity.Role.ADMIN), OutputDataType.FULL) contactAdmin, ImmutableSet.of(RdapEntity.Role.ADMIN), OutputDataType.FULL)
@@ -424,7 +437,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testTech() { void testTech() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity( .createRdapContactEntity(
contactTech, ImmutableSet.of(RdapEntity.Role.TECH), OutputDataType.FULL) contactTech, ImmutableSet.of(RdapEntity.Role.TECH), OutputDataType.FULL)
@@ -434,7 +448,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testRolelessContact() { void testRolelessContact() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity(contactTech, ImmutableSet.of(), OutputDataType.FULL) .createRdapContactEntity(contactTech, ImmutableSet.of(), OutputDataType.FULL)
.toJson()) .toJson())
@@ -443,7 +458,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testUnlinkedContact() { void testUnlinkedContact() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapContactEntity(contactNotLinked, ImmutableSet.of(), OutputDataType.FULL) .createRdapContactEntity(contactNotLinked, ImmutableSet.of(), OutputDataType.FULL)
.toJson()) .toJson())
@@ -452,13 +468,15 @@ class RdapJsonFormatterTest {
@Test @Test
void testDomain_full() { void testDomain_full() {
assertThat(rdapJsonFormatter.createRdapDomain(domainFull, OutputDataType.FULL).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapDomain(domainFull, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_domain_full.json")); .isEqualTo(loadJson("rdapjson_domain_full.json"));
} }
@Test @Test
void testDomain_summary() { void testDomain_summary() {
assertThat(rdapJsonFormatter.createRdapDomain(domainFull, OutputDataType.SUMMARY).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapDomain(domainFull, OutputDataType.SUMMARY).toJson())
.isEqualTo(loadJson("rdapjson_domain_summary.json")); .isEqualTo(loadJson("rdapjson_domain_summary.json"));
} }
@@ -476,13 +494,15 @@ class RdapJsonFormatterTest {
@Test @Test
void testDomain_logged_out() { void testDomain_logged_out() {
rdapJsonFormatter.rdapAuthorization = RdapAuthorization.PUBLIC_AUTHORIZATION; rdapJsonFormatter.rdapAuthorization = RdapAuthorization.PUBLIC_AUTHORIZATION;
assertThat(rdapJsonFormatter.createRdapDomain(domainFull, OutputDataType.FULL).toJson()) assertAboutJson()
.that(rdapJsonFormatter.createRdapDomain(domainFull, OutputDataType.FULL).toJson())
.isEqualTo(loadJson("rdapjson_domain_logged_out.json")); .isEqualTo(loadJson("rdapjson_domain_logged_out.json"));
} }
@Test @Test
void testDomain_noNameserversNoTransfersMultipleRoleContact() { void testDomain_noNameserversNoTransfersMultipleRoleContact() {
assertThat( assertAboutJson()
.that(
rdapJsonFormatter rdapJsonFormatter
.createRdapDomain(domainNoNameserversNoTransfers, OutputDataType.FULL) .createRdapDomain(domainNoNameserversNoTransfers, OutputDataType.FULL)
.toJson()) .toJson())
@@ -491,7 +511,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testError() { void testError() {
assertThat( assertAboutJson()
.that(
RdapObjectClasses.ErrorResponse.create( RdapObjectClasses.ErrorResponse.create(
SC_BAD_REQUEST, "Invalid Domain Name", "Not a valid domain name") SC_BAD_REQUEST, "Invalid Domain Name", "Not a valid domain name")
.toJson()) .toJson())
@@ -500,7 +521,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testTopLevel() { void testTopLevel() {
assertThat( assertAboutJson()
.that(
TopLevelReplyObject.create( TopLevelReplyObject.create(
new ReplyPayloadBase(BoilerplateType.OTHER) { new ReplyPayloadBase(BoilerplateType.OTHER) {
@JsonableElement public static final String key = "value"; @JsonableElement public static final String key = "value";
@@ -512,7 +534,8 @@ class RdapJsonFormatterTest {
@Test @Test
void testTopLevel_domain() { void testTopLevel_domain() {
assertThat( assertAboutJson()
.that(
TopLevelReplyObject.create( TopLevelReplyObject.create(
new ReplyPayloadBase(BoilerplateType.DOMAIN) { new ReplyPayloadBase(BoilerplateType.DOMAIN) {
@JsonableElement public static final String key = "value"; @JsonableElement public static final String key = "value";
@@ -15,11 +15,11 @@
package google.registry.rdap; package google.registry.rdap;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static google.registry.rdap.RdapTestHelper.assertThat;
import static google.registry.rdap.RdapTestHelper.loadJsonFile; import static google.registry.rdap.RdapTestHelper.loadJsonFile;
import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.createTld;
import static google.registry.testing.DatabaseHelper.persistResource; import static google.registry.testing.DatabaseHelper.persistResource;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
import static google.registry.testing.GsonSubject.assertAboutJson;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
@@ -105,132 +105,149 @@ class RdapNameserverActionTest extends RdapActionBaseTestCase<RdapNameserverActi
@Test @Test
void testInvalidNameserver_returns400() { void testInvalidNameserver_returns400() {
assertThat(generateActualJson("invalid/host/name")) assertAboutJson()
.that(generateActualJson("invalid/host/name"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"invalid/host/name is not a valid nameserver: Invalid host name", "invalid/host/name is not a valid nameserver: Invalid host name", 400));
400));
assertThat(response.getStatus()).isEqualTo(400); assertThat(response.getStatus()).isEqualTo(400);
} }
@Test @Test
void testUnknownNameserver_returns404() { void testUnknownNameserver_returns404() {
assertThat(generateActualJson("ns1.missing.com")).isEqualTo( assertAboutJson()
generateExpectedJsonError("ns1.missing.com not found", 404)); .that(generateActualJson("ns1.missing.com"))
.isEqualTo(generateExpectedJsonError("ns1.missing.com not found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
} }
@Test @Test
void testValidNameserver_works() { void testValidNameserver_works() {
assertThat(generateActualJson("ns1.cat.lol")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("ns1.cat.lol"))
"ns1.cat.lol", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"HANDLE", "2-ROID", "ns1.cat.lol",
"ADDRESSTYPE", "v4", ImmutableMap.of(
"ADDRESS", "1.2.3.4", "HANDLE", "2-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v4",
"rdap_host.json")); "ADDRESS", "1.2.3.4",
"STATUS", "active"),
"rdap_host.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@Test @Test
void testTrailingDot_getsIgnored() { void testTrailingDot_getsIgnored() {
assertThat(generateActualJson("ns1.cat.lol.")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("ns1.cat.lol."))
"ns1.cat.lol", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"HANDLE", "2-ROID", "ns1.cat.lol",
"ADDRESSTYPE", "v4", ImmutableMap.of(
"ADDRESS", "1.2.3.4", "HANDLE", "2-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v4",
"rdap_host.json")); "ADDRESS", "1.2.3.4",
"STATUS", "active"),
"rdap_host.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@Test @Test
void testUpperCase_getsCanonicalized() { void testUpperCase_getsCanonicalized() {
assertThat(generateActualJson("Ns1.CaT.lOl.")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("Ns1.CaT.lOl."))
"ns1.cat.lol", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"HANDLE", "2-ROID", "ns1.cat.lol",
"ADDRESSTYPE", "v4", ImmutableMap.of(
"ADDRESS", "1.2.3.4", "HANDLE", "2-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v4",
"rdap_host.json")); "ADDRESS", "1.2.3.4",
"STATUS", "active"),
"rdap_host.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@Test @Test
void testQueryParameter_getsIgnored() { void testQueryParameter_getsIgnored() {
assertThat(generateActualJson("ns1.cat.lol?key=value")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("ns1.cat.lol?key=value"))
"ns1.cat.lol", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"HANDLE", "2-ROID", "ns1.cat.lol",
"ADDRESSTYPE", "v4", ImmutableMap.of(
"ADDRESS", "1.2.3.4", "HANDLE", "2-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v4",
"rdap_host.json")); "ADDRESS", "1.2.3.4",
"STATUS", "active"),
"rdap_host.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@Test @Test
void testIdnNameserver_works() { void testIdnNameserver_works() {
assertThat(generateActualJson("ns1.cat.みんな")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("ns1.cat.みんな"))
"ns1.cat.みんな", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"PUNYCODENAME", "ns1.cat.xn--q9jyb4c", "ns1.cat.みんな",
"HANDLE", "5-ROID", ImmutableMap.of(
"ADDRESSTYPE", "v6", "PUNYCODENAME", "ns1.cat.xn--q9jyb4c",
"ADDRESS", "bad:f00d:cafe::15:beef", "HANDLE", "5-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v6",
"rdap_host_unicode.json")); "ADDRESS", "bad:f00d:cafe::15:beef",
"STATUS", "active"),
"rdap_host_unicode.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@Test @Test
void testPunycodeNameserver_works() { void testPunycodeNameserver_works() {
assertThat(generateActualJson("ns1.cat.xn--q9jyb4c")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("ns1.cat.xn--q9jyb4c"))
"ns1.cat.みんな", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"PUNYCODENAME", "ns1.cat.xn--q9jyb4c", "ns1.cat.みんな",
"HANDLE", "5-ROID", ImmutableMap.of(
"ADDRESSTYPE", "v6", "PUNYCODENAME", "ns1.cat.xn--q9jyb4c",
"ADDRESS", "bad:f00d:cafe::15:beef", "HANDLE", "5-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v6",
"rdap_host_unicode.json")); "ADDRESS", "bad:f00d:cafe::15:beef",
"STATUS", "active"),
"rdap_host_unicode.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@Test @Test
void testMultilevelNameserver_works() { void testMultilevelNameserver_works() {
assertThat(generateActualJson("ns1.domain.1.tld")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("ns1.domain.1.tld"))
"ns1.domain.1.tld", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"HANDLE", "8-ROID", "ns1.domain.1.tld",
"ADDRESSTYPE", "v4", ImmutableMap.of(
"ADDRESS", "5.6.7.8", "HANDLE", "8-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v4",
"rdap_host.json")); "ADDRESS", "5.6.7.8",
"STATUS", "active"),
"rdap_host.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@Test @Test
void testExternalNameserver_works() { void testExternalNameserver_works() {
assertThat(generateActualJson("ns1.domain.external")) assertAboutJson()
.isEqualTo(generateExpectedJsonWithTopLevelEntries( .that(generateActualJson("ns1.domain.external"))
"ns1.domain.external", .isEqualTo(
ImmutableMap.of( generateExpectedJsonWithTopLevelEntries(
"HANDLE", "C-ROID", "ns1.domain.external",
"ADDRESSTYPE", "v4", ImmutableMap.of(
"ADDRESS", "9.10.11.12", "HANDLE", "C-ROID",
"STATUS", "active"), "ADDRESSTYPE", "v4",
"rdap_host.json")); "ADDRESS", "9.10.11.12",
"STATUS", "active"),
"rdap_host.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
} }
@@ -267,7 +284,8 @@ class RdapNameserverActionTest extends RdapActionBaseTestCase<RdapNameserverActi
void testDeletedNameserver_found_loggedInAsCorrectRegistrar() { void testDeletedNameserver_found_loggedInAsCorrectRegistrar() {
login("TheRegistrar"); login("TheRegistrar");
action.includeDeletedParam = Optional.of(true); action.includeDeletedParam = Optional.of(true);
assertThat(generateActualJson("nsdeleted.cat.lol")) assertAboutJson()
.that(generateActualJson("nsdeleted.cat.lol"))
.isEqualTo( .isEqualTo(
generateExpectedJsonWithTopLevelEntries( generateExpectedJsonWithTopLevelEntries(
"nsdeleted.cat.lol", "nsdeleted.cat.lol",
@@ -284,7 +302,8 @@ class RdapNameserverActionTest extends RdapActionBaseTestCase<RdapNameserverActi
void testDeletedNameserver_found_loggedInAsAdmin() { void testDeletedNameserver_found_loggedInAsAdmin() {
loginAsAdmin(); loginAsAdmin();
action.includeDeletedParam = Optional.of(true); action.includeDeletedParam = Optional.of(true);
assertThat(generateActualJson("nsdeleted.cat.lol")) assertAboutJson()
.that(generateActualJson("nsdeleted.cat.lol"))
.isEqualTo( .isEqualTo(
generateExpectedJsonWithTopLevelEntries( generateExpectedJsonWithTopLevelEntries(
"nsdeleted.cat.lol", "nsdeleted.cat.lol",
@@ -15,7 +15,6 @@
package google.registry.rdap; package google.registry.rdap;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static google.registry.rdap.RdapTestHelper.assertThat;
import static google.registry.rdap.RdapTestHelper.loadJsonFile; import static google.registry.rdap.RdapTestHelper.loadJsonFile;
import static google.registry.rdap.RdapTestHelper.parseJsonObject; import static google.registry.rdap.RdapTestHelper.parseJsonObject;
import static google.registry.request.Action.Method.GET; import static google.registry.request.Action.Method.GET;
@@ -26,6 +25,7 @@ import static google.registry.testing.DatabaseHelper.persistSimpleResources;
import static google.registry.testing.FullFieldsTestEntityHelper.makeDomain; import static google.registry.testing.FullFieldsTestEntityHelper.makeDomain;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs; import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrarPocs;
import static google.registry.testing.GsonSubject.assertAboutJson;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableListMultimap;
@@ -246,7 +246,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testInvalidRequest_rejected() { void testInvalidRequest_rejected() {
action.run(); action.run();
assertThat(parseJsonObject(response.getPayload())) assertAboutJson()
.that(parseJsonObject(response.getPayload()))
.isEqualTo(generateExpectedJsonError("You must specify either name=XXXX or ip=YYYY", 400)); .isEqualTo(generateExpectedJsonError("You must specify either name=XXXX or ip=YYYY", 400));
assertThat(response.getStatus()).isEqualTo(400); assertThat(response.getStatus()).isEqualTo(400);
verifyErrorMetrics(Optional.empty(), 400); verifyErrorMetrics(Optional.empty(), 400);
@@ -254,7 +255,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testInvalidSuffix_rejected() { void testInvalidSuffix_rejected() {
assertThat(generateActualJsonWithName("exam*ple")) assertAboutJson()
.that(generateActualJsonWithName("exam*ple"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Query can only have a single wildcard, and it must be at the end of a label, but" "Query can only have a single wildcard, and it must be at the end of a label, but"
@@ -267,7 +269,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNonexistentDomainSuffix_unprocessable() { void testNonexistentDomainSuffix_unprocessable() {
assertThat(generateActualJsonWithName("exam*.foo.bar")) assertAboutJson()
.that(generateActualJsonWithName("exam*.foo.bar"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"A suffix after a wildcard in a nameserver lookup must be an in-bailiwick domain", "A suffix after a wildcard in a nameserver lookup must be an in-bailiwick domain",
@@ -278,7 +281,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testMultipleWildcards_rejected() { void testMultipleWildcards_rejected() {
assertThat(generateActualJsonWithName("*.*")) assertAboutJson()
.that(generateActualJsonWithName("*.*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError( generateExpectedJsonError(
"Query can only have a single wildcard, and it must be at the end of a label, but" "Query can only have a single wildcard, and it must be at the end of a label, but"
@@ -291,7 +295,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNoCharactersToMatch_rejected() { void testNoCharactersToMatch_rejected() {
assertThat(generateActualJsonWithName("*")) assertAboutJson()
.that(generateActualJsonWithName("*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError("Initial search string must be at least 2 characters", 422)); generateExpectedJsonError("Initial search string must be at least 2 characters", 422));
assertThat(response.getStatus()).isEqualTo(422); assertThat(response.getStatus()).isEqualTo(422);
@@ -300,7 +305,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testFewerThanTwoCharactersToMatch_rejected() { void testFewerThanTwoCharactersToMatch_rejected() {
assertThat(generateActualJsonWithName("a*")) assertAboutJson()
.that(generateActualJsonWithName("a*"))
.isEqualTo( .isEqualTo(
generateExpectedJsonError("Initial search string must be at least 2 characters", 422)); generateExpectedJsonError("Initial search string must be at least 2 characters", 422));
assertThat(response.getStatus()).isEqualTo(422); assertThat(response.getStatus()).isEqualTo(422);
@@ -309,7 +315,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_ns1_cat_lol_found() { void testNameMatch_ns1_cat_lol_found() {
assertThat(generateActualJsonWithName("ns1.cat.lol")) assertAboutJson()
.that(generateActualJsonWithName("ns1.cat.lol"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns1.cat.lol", null, "2-ROID", "v4", "1.2.3.4", "rdap_host_linked.json")); "ns1.cat.lol", null, "2-ROID", "v4", "1.2.3.4", "rdap_host_linked.json"));
@@ -319,7 +326,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_ns1_cat_lol_foundWithUpperCase() { void testNameMatch_ns1_cat_lol_foundWithUpperCase() {
assertThat(generateActualJsonWithName("Ns1.CaT.lOl")) assertAboutJson()
.that(generateActualJsonWithName("Ns1.CaT.lOl"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns1.cat.lol", null, "2-ROID", "v4", "1.2.3.4", "rdap_host_linked.json")); "ns1.cat.lol", null, "2-ROID", "v4", "1.2.3.4", "rdap_host_linked.json"));
@@ -345,7 +353,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_ns2_cat_lol_found() { void testNameMatch_ns2_cat_lol_found() {
assertThat(generateActualJsonWithName("ns2.cat.lol")) assertAboutJson()
.that(generateActualJsonWithName("ns2.cat.lol"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns2.cat.lol", "ns2.cat.lol",
@@ -368,7 +377,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_ns1_cat_external_found() { void testNameMatch_ns1_cat_external_found() {
assertThat(generateActualJsonWithName("ns1.cat.external")) assertAboutJson()
.that(generateActualJsonWithName("ns1.cat.external"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns1.cat.external", null, "8-ROID", null, null, "rdap_host_external.json")); "ns1.cat.external", null, "8-ROID", null, null, "rdap_host_external.json"));
@@ -378,7 +388,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_ns1_cat_idn_unicode_found() { void testNameMatch_ns1_cat_idn_unicode_found() {
assertThat(generateActualJsonWithName("ns1.cat.みんな")) assertAboutJson()
.that(generateActualJsonWithName("ns1.cat.みんな"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns1.cat.みんな", "ns1.cat.みんな",
@@ -395,7 +406,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_ns1_cat_idn_punycode_found() { void testNameMatch_ns1_cat_idn_punycode_found() {
assertThat(generateActualJsonWithName("ns1.cat.xn--q9jyb4c")) assertAboutJson()
.that(generateActualJsonWithName("ns1.cat.xn--q9jyb4c"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns1.cat.みんな", "ns1.cat.みんな",
@@ -410,7 +422,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_ns1_cat_1_test_found() { void testNameMatch_ns1_cat_1_test_found() {
assertThat(generateActualJsonWithName("ns1.cat.1.test")) assertAboutJson()
.that(generateActualJsonWithName("ns1.cat.1.test"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns1.cat.1.test", null, "E-ROID", "v4", "1.2.3.6", "rdap_host.json")); "ns1.cat.1.test", null, "E-ROID", "v4", "1.2.3.6", "rdap_host.json"));
@@ -502,7 +515,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_nontruncatedResultSet() { void testNameMatch_nontruncatedResultSet() {
createManyHosts(4); createManyHosts(4);
assertThat(generateActualJsonWithName("nsx*.cat.lol")) assertAboutJson()
.that(generateActualJsonWithName("nsx*.cat.lol"))
.isEqualTo(loadJsonFile("rdap_nontruncated_hosts.json")); .isEqualTo(loadJsonFile("rdap_nontruncated_hosts.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(4); verifyMetrics(4);
@@ -511,7 +525,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_truncatedResultSet() { void testNameMatch_truncatedResultSet() {
createManyHosts(5); createManyHosts(5);
assertThat(generateActualJsonWithName("nsx*.cat.lol")) assertAboutJson()
.that(generateActualJsonWithName("nsx*.cat.lol"))
.isEqualTo( .isEqualTo(
loadJsonFile( loadJsonFile(
"rdap_truncated_hosts.json", "QUERY", "name=nsx*.cat.lol&cursor=bnN4NC5jYXQubG9s")); "rdap_truncated_hosts.json", "QUERY", "name=nsx*.cat.lol&cursor=bnN4NC5jYXQubG9s"));
@@ -522,7 +537,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatch_reallyTruncatedResultSet() { void testNameMatch_reallyTruncatedResultSet() {
createManyHosts(9); createManyHosts(9);
assertThat(generateActualJsonWithName("nsx*.cat.lol")) assertAboutJson()
.that(generateActualJsonWithName("nsx*.cat.lol"))
.isEqualTo( .isEqualTo(
loadJsonFile( loadJsonFile(
"rdap_truncated_hosts.json", "QUERY", "name=nsx*.cat.lol&cursor=bnN4NC5jYXQubG9s")); "rdap_truncated_hosts.json", "QUERY", "name=nsx*.cat.lol&cursor=bnN4NC5jYXQubG9s"));
@@ -534,7 +550,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatchDeletedHost_foundTheOtherHost() { void testNameMatchDeletedHost_foundTheOtherHost() {
persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build()); persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
assertThat(generateActualJsonWithName("ns*.cat.lol")) assertAboutJson()
.that(generateActualJsonWithName("ns*.cat.lol"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns2.cat.lol", "ns2.cat.lol",
@@ -550,7 +567,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatchDeletedHost_notFound() { void testNameMatchDeletedHost_notFound() {
persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build()); persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
assertThat(generateActualJsonWithName("ns1.cat.lol")) assertAboutJson()
.that(generateActualJsonWithName("ns1.cat.lol"))
.isEqualTo(generateExpectedJsonError("No nameservers found", 404)); .isEqualTo(generateExpectedJsonError("No nameservers found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
verifyErrorMetrics(); verifyErrorMetrics();
@@ -559,7 +577,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testNameMatchDeletedHostWithWildcard_notFound() { void testNameMatchDeletedHostWithWildcard_notFound() {
persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build()); persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
assertThat(generateActualJsonWithName("cat.lo*")) assertAboutJson()
.that(generateActualJsonWithName("cat.lo*"))
.isEqualTo(generateExpectedJsonError("No nameservers found", 404)); .isEqualTo(generateExpectedJsonError("No nameservers found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
verifyErrorMetrics(); verifyErrorMetrics();
@@ -727,7 +746,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testAddressMatchV4Address_found() { void testAddressMatchV4Address_found() {
assertThat(generateActualJsonWithIp("1.2.3.4")) assertAboutJson()
.that(generateActualJsonWithIp("1.2.3.4"))
.isEqualTo( .isEqualTo(
generateExpectedJsonForNameserver( generateExpectedJsonForNameserver(
"ns1.cat.lol", null, "2-ROID", "v4", "1.2.3.4", "rdap_host_linked.json")); "ns1.cat.lol", null, "2-ROID", "v4", "1.2.3.4", "rdap_host_linked.json"));
@@ -753,7 +773,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testAddressMatchV6Address_foundMultiple() { void testAddressMatchV6Address_foundMultiple() {
assertThat(generateActualJsonWithIp("bad:f00d:cafe::15:beef")) assertAboutJson()
.that(generateActualJsonWithIp("bad:f00d:cafe::15:beef"))
.isEqualTo(loadJsonFile("rdap_multiple_hosts.json")); .isEqualTo(loadJsonFile("rdap_multiple_hosts.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(2); verifyMetrics(2);
@@ -769,7 +790,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testAddressMatchDeletedHost_notFound() { void testAddressMatchDeletedHost_notFound() {
persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build()); persistResource(hostNs1CatLol.asBuilder().setDeletionTime(clock.nowUtc().minusDays(1)).build());
assertThat(generateActualJsonWithIp("1.2.3.4")) assertAboutJson()
.that(generateActualJsonWithIp("1.2.3.4"))
.isEqualTo(generateExpectedJsonError("No nameservers found", 404)); .isEqualTo(generateExpectedJsonError("No nameservers found", 404));
assertThat(response.getStatus()).isEqualTo(404); assertThat(response.getStatus()).isEqualTo(404);
verifyErrorMetrics(); verifyErrorMetrics();
@@ -778,7 +800,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testAddressMatch_nontruncatedResultSet() { void testAddressMatch_nontruncatedResultSet() {
createManyHosts(4); createManyHosts(4);
assertThat(generateActualJsonWithIp("5.5.5.1")) assertAboutJson()
.that(generateActualJsonWithIp("5.5.5.1"))
.isEqualTo(loadJsonFile("rdap_nontruncated_hosts.json")); .isEqualTo(loadJsonFile("rdap_nontruncated_hosts.json"));
assertThat(response.getStatus()).isEqualTo(200); assertThat(response.getStatus()).isEqualTo(200);
verifyMetrics(4); verifyMetrics(4);
@@ -787,7 +810,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testAddressMatch_truncatedResultSet() { void testAddressMatch_truncatedResultSet() {
createManyHosts(5); createManyHosts(5);
assertThat(generateActualJsonWithIp("5.5.5.1")) assertAboutJson()
.that(generateActualJsonWithIp("5.5.5.1"))
.isEqualTo( .isEqualTo(
loadJsonFile( loadJsonFile(
"rdap_truncated_hosts.json", "QUERY", "ip=5.5.5.1&cursor=MTctUk9JRA%3D%3D")); "rdap_truncated_hosts.json", "QUERY", "ip=5.5.5.1&cursor=MTctUk9JRA%3D%3D"));
@@ -798,7 +822,8 @@ class RdapNameserverSearchActionTest extends RdapSearchActionTestCase<RdapNamese
@Test @Test
void testAddressMatch_reallyTruncatedResultSet() { void testAddressMatch_reallyTruncatedResultSet() {
createManyHosts(9); createManyHosts(9);
assertThat(generateActualJsonWithIp("5.5.5.1")) assertAboutJson()
.that(generateActualJsonWithIp("5.5.5.1"))
.isEqualTo( .isEqualTo(
loadJsonFile( loadJsonFile(
"rdap_truncated_hosts.json", "QUERY", "ip=5.5.5.1&cursor=MTctUk9JRA%3D%3D")); "rdap_truncated_hosts.json", "QUERY", "ip=5.5.5.1&cursor=MTctUk9JRA%3D%3D"));
@@ -20,7 +20,6 @@ import static google.registry.testing.TestDataHelper.loadFile;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Sets;
import com.google.common.collect.Streams; import com.google.common.collect.Streams;
import com.google.common.truth.Truth; import com.google.common.truth.Truth;
import com.google.gson.Gson; import com.google.gson.Gson;
@@ -30,7 +29,6 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import google.registry.util.Clock; import google.registry.util.Clock;
import java.util.Map; import java.util.Map;
import java.util.Objects;
/** Test helper methods for RDAP tests. */ /** Test helper methods for RDAP tests. */
class RdapTestHelper { class RdapTestHelper {
@@ -242,82 +240,4 @@ class RdapTestHelper {
return reply; return reply;
} }
/** A small utility class to show nicer "huge JSON" diffs. */
static final class GsonSubject {
private JsonObject actual;
GsonSubject(JsonObject actual) {
this.actual = actual;
}
void isEqualTo(JsonObject expected) {
if (actual.equals(expected)) {
return;
}
StringBuilder difference = new StringBuilder();
difference.append("Actual JSON different than expected:");
diff("", actual, expected, difference);
throw new AssertionError(difference.toString());
}
private String jsonifyAndIndent(JsonElement element) {
String json = GSON.toJson(element);
return json.replaceAll("\n", "\n ");
}
private JsonElement getOrNull(JsonArray jsonArray, int index) {
if (index >= jsonArray.size()) {
return null;
}
return jsonArray.get(index);
}
/** Writes down a human-readable diff between actual and expected into the StringBuilder. */
private void diff(
String name, JsonElement actual, JsonElement expected, StringBuilder builder) {
if (Objects.equals(actual, expected)) {
return;
}
if (actual == null) {
builder.append(String.format("Missing: %s ->%s\n\n", name, jsonifyAndIndent(expected)));
return;
}
if (expected == null) {
builder.append(String.format("Unexpected: %s -> %s\n\n", name, jsonifyAndIndent(actual)));
return;
}
if (actual.isJsonObject() && expected.isJsonObject()) {
// We put the "expected" first in the union so that the "expected" keys will all be first
// and in order
for (String key :
Sets.union(expected.getAsJsonObject().keySet(), actual.getAsJsonObject().keySet())) {
diff(
name + "." + key,
actual.getAsJsonObject().get(key),
expected.getAsJsonObject().get(key),
builder);
}
return;
}
if (actual.isJsonArray() && expected.isJsonArray()) {
int commonSize = Math.max(actual.getAsJsonArray().size(), expected.getAsJsonArray().size());
for (int i = 0; i < commonSize; i++) {
diff(
String.format("%s[%s]", name, i),
getOrNull(actual.getAsJsonArray(), i),
getOrNull(expected.getAsJsonArray(), i),
builder);
}
return;
}
builder.append(
String.format(
"Actual: %s -> %s\nExpected: %s\n\n",
name, jsonifyAndIndent(actual), jsonifyAndIndent(expected)));
}
}
static GsonSubject assertThat(JsonObject actual) {
return new GsonSubject(actual);
}
} }
@@ -28,7 +28,6 @@ import static org.joda.time.DateTimeConstants.TUESDAY;
import static org.joda.time.Duration.standardDays; import static org.joda.time.Duration.standardDays;
import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.truth.Truth;
import google.registry.model.common.Cursor; import google.registry.model.common.Cursor;
import google.registry.model.common.Cursor.CursorType; import google.registry.model.common.Cursor.CursorType;
import google.registry.model.tld.Tld; import google.registry.model.tld.Tld;
@@ -95,7 +94,7 @@ public class PendingDepositCheckerTest {
createTldWithEscrowEnabled("lol"); createTldWithEscrowEnabled("lol");
clock.advanceOneMilli(); clock.advanceOneMilli();
Tld registry = Tld.get("lol"); Tld registry = Tld.get("lol");
Truth.assertThat(loadByKeyIfPresent(Cursor.createScopedVKey(RDE_STAGING, registry))).isEmpty(); assertThat(loadByKeyIfPresent(Cursor.createScopedVKey(RDE_STAGING, registry))).isEmpty();
checker.getTldsAndWatermarksPendingDepositForRdeAndBrda(); checker.getTldsAndWatermarksPendingDepositForRdeAndBrda();
assertThat(loadByKey(Cursor.createScopedVKey(RDE_STAGING, registry)).getCursorTime()) assertThat(loadByKey(Cursor.createScopedVKey(RDE_STAGING, registry)).getCursorTime())
.isEqualTo(DateTime.parse("2000-01-01TZ")); .isEqualTo(DateTime.parse("2000-01-01TZ"));
@@ -122,9 +121,9 @@ public class PendingDepositCheckerTest {
clock.advanceOneMilli(); clock.advanceOneMilli();
setCursor(registry, RDE_STAGING, DateTime.parse("2000-01-02TZ")); // assume rde is already done setCursor(registry, RDE_STAGING, DateTime.parse("2000-01-02TZ")); // assume rde is already done
clock.advanceOneMilli(); clock.advanceOneMilli();
Truth.assertThat(loadByKeyIfPresent(Cursor.createScopedVKey(BRDA, registry))).isEmpty(); assertThat(loadByKeyIfPresent(Cursor.createScopedVKey(BRDA, registry))).isEmpty();
assertThat(checker.getTldsAndWatermarksPendingDepositForRdeAndBrda()).isEmpty(); assertThat(checker.getTldsAndWatermarksPendingDepositForRdeAndBrda()).isEmpty();
Truth.assertThat(loadByKeyIfPresent(Cursor.createScopedVKey(BRDA, registry))).isEmpty(); assertThat(loadByKeyIfPresent(Cursor.createScopedVKey(BRDA, registry))).isEmpty();
} }
@Test @Test
@@ -19,7 +19,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import com.google.common.truth.Truth;
import google.registry.request.HttpException.BadRequestException; import google.registry.request.HttpException.BadRequestException;
import google.registry.testing.FakeClock; import google.registry.testing.FakeClock;
import google.registry.util.Clock; import google.registry.util.Clock;
@@ -45,14 +44,13 @@ class ReportingModuleTest {
@Test @Test
void testEmptyYearMonthParameter_returnsEmptyYearMonthOptional() { void testEmptyYearMonthParameter_returnsEmptyYearMonthOptional() {
when(req.getParameter("yearMonth")).thenReturn(""); when(req.getParameter("yearMonth")).thenReturn("");
Truth.assertThat(ReportingModule.provideYearMonthOptional(req)).isEmpty(); assertThat(ReportingModule.provideYearMonthOptional(req)).isEmpty();
} }
@Test @Test
void testValidYearMonthParameter_returnsThatMonth() { void testValidYearMonthParameter_returnsThatMonth() {
when(req.getParameter("yearMonth")).thenReturn("2017-05"); when(req.getParameter("yearMonth")).thenReturn("2017-05");
Truth.assertThat(ReportingModule.provideYearMonthOptional(req)) assertThat(ReportingModule.provideYearMonthOptional(req)).hasValue(new YearMonth(2017, 5));
.hasValue(new YearMonth(2017, 5));
} }
@Test @Test
@@ -83,13 +81,13 @@ class ReportingModuleTest {
@Test @Test
void testEmptyDateParameter_returnsEmptyDateOptional() { void testEmptyDateParameter_returnsEmptyDateOptional() {
when(req.getParameter("date")).thenReturn(""); when(req.getParameter("date")).thenReturn("");
Truth.assertThat(ReportingModule.provideDateOptional(req)).isEmpty(); assertThat(ReportingModule.provideDateOptional(req)).isEmpty();
} }
@Test @Test
void testValidDateParameter_returnsThatDate() { void testValidDateParameter_returnsThatDate() {
when(req.getParameter("date")).thenReturn("2017-05-13"); when(req.getParameter("date")).thenReturn("2017-05-13");
Truth.assertThat(ReportingModule.provideDateOptional(req)).hasValue(new LocalDate(2017, 5, 13)); assertThat(ReportingModule.provideDateOptional(req)).hasValue(new LocalDate(2017, 5, 13));
} }
@Test @Test
@@ -0,0 +1,118 @@
// Copyright 2017 The Nomulus 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.testing;
import static com.google.common.truth.Truth.assertAbout;
import com.google.common.collect.Sets;
import com.google.common.truth.FailureMetadata;
import com.google.common.truth.SimpleSubjectBuilder;
import com.google.common.truth.Subject;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.util.Objects;
import java.util.Optional;
/** A Truth subject to show nicer "huge JSON" diffs. */
public class GsonSubject extends Subject {
private JsonObject actual;
private static final Gson GSON =
new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
private String customDisplaySubject;
public GsonSubject(FailureMetadata failureMetadata, JsonObject actual) {
super(failureMetadata, actual);
this.actual = actual;
}
@Override
protected String actualCustomStringRepresentation() {
return Optional.ofNullable(customDisplaySubject).orElse(String.valueOf(actual));
}
public GsonSubject withCustomDisplaySubject(String customDisplaySubject) {
this.customDisplaySubject = customDisplaySubject;
return this;
}
private String jsonifyAndIndent(JsonElement element) {
String json = GSON.toJson(element);
return json.replaceAll("\n", "\n ");
}
private JsonElement getOrNull(JsonArray jsonArray, int index) {
if (index >= jsonArray.size()) {
return null;
}
return jsonArray.get(index);
}
/** Writes down a human-readable diff between actual and expected into the StringBuilder. */
private void diff(String name, JsonElement actual, JsonElement expected, StringBuilder builder) {
if (Objects.equals(actual, expected)) {
return;
}
if (actual == null) {
builder.append(String.format("Missing: %s ->%s\n\n", name, jsonifyAndIndent(expected)));
return;
}
if (expected == null) {
builder.append(String.format("Unexpected: %s -> %s\n\n", name, jsonifyAndIndent(actual)));
return;
}
if (actual.isJsonObject() && expected.isJsonObject()) {
// We put the "expected" first in the union so that the "expected" keys will all be first
// and in order
for (String key :
Sets.union(expected.getAsJsonObject().keySet(), actual.getAsJsonObject().keySet())) {
diff(
name + "." + key,
actual.getAsJsonObject().get(key),
expected.getAsJsonObject().get(key),
builder);
}
return;
}
if (actual.isJsonArray() && expected.isJsonArray()) {
int commonSize = Math.max(actual.getAsJsonArray().size(), expected.getAsJsonArray().size());
for (int i = 0; i < commonSize; i++) {
diff(
String.format("%s[%s]", name, i),
getOrNull(actual.getAsJsonArray(), i),
getOrNull(expected.getAsJsonArray(), i),
builder);
}
return;
}
builder.append(
String.format(
"Actual: %s -> %s\nExpected: %s\n\n",
name, jsonifyAndIndent(actual), jsonifyAndIndent(expected)));
}
public static SimpleSubjectBuilder<GsonSubject, JsonObject> assertAboutJson() {
return assertAbout(jsonObject());
}
public static Factory<GsonSubject, JsonObject> jsonObject() {
return GsonSubject::new;
}
}
@@ -14,9 +14,9 @@
package google.registry.tools; package google.registry.tools;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertThrows;
import com.google.common.truth.Truth;
import google.registry.testing.FakeClock; import google.registry.testing.FakeClock;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.DateTimeZone; import org.joda.time.DateTimeZone;
@@ -53,6 +53,6 @@ public class GetEppResourceCommandTest {
@Test @Test
public void readTimestampNotProvided_setToNow_noException() { public void readTimestampNotProvided_setToNow_noException() {
commandUnderTest.run(); commandUnderTest.run();
Truth.assertThat(commandUnderTest.readTimestamp).isEqualTo(clock.nowUtc()); assertThat(commandUnderTest.readTimestamp).isEqualTo(clock.nowUtc());
} }
} }
@@ -20,7 +20,6 @@ import static google.registry.testing.DatabaseHelper.persistResource;
import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertThrows;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.truth.Truth;
import google.registry.model.billing.BillingBase.RenewalPriceBehavior; import google.registry.model.billing.BillingBase.RenewalPriceBehavior;
import google.registry.model.domain.fee.FeeQueryCommandExtensionItem.CommandName; import google.registry.model.domain.fee.FeeQueryCommandExtensionItem.CommandName;
import google.registry.model.domain.token.AllocationToken; import google.registry.model.domain.token.AllocationToken;
@@ -77,10 +76,10 @@ public class UpdateBulkPricingPackageCommandTest
tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123")); tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123"));
assertThat(bulkPricingPackageOptional).isPresent(); assertThat(bulkPricingPackageOptional).isPresent();
BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get(); BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get();
Truth.assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200); assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200);
Truth.assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000); assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000);
Truth.assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000)); assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000));
Truth.assertThat(bulkPricingPackage.getNextBillingDate()) assertThat(bulkPricingPackage.getNextBillingDate())
.isEqualTo(DateTime.parse("2013-03-17T00:00:00Z")); .isEqualTo(DateTime.parse("2013-03-17T00:00:00Z"));
assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty(); assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty();
} }
@@ -108,7 +107,7 @@ public class UpdateBulkPricingPackageCommandTest
"--price=USD 1000.00", "--price=USD 1000.00",
"--next_billing_date=2012-03-17T00:00:00Z", "--next_billing_date=2012-03-17T00:00:00Z",
"nullPackage")); "nullPackage"));
Truth.assertThat(thrown.getMessage()) assertThat(thrown.getMessage())
.isEqualTo("BulkPricingPackage with token nullPackage does not exist"); .isEqualTo("BulkPricingPackage with token nullPackage does not exist");
} }
@@ -125,10 +124,10 @@ public class UpdateBulkPricingPackageCommandTest
tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123")); tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123"));
assertThat(bulkPricingPackageOptional).isPresent(); assertThat(bulkPricingPackageOptional).isPresent();
BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get(); BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get();
Truth.assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(100); assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(100);
Truth.assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000); assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000);
Truth.assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000)); assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000));
Truth.assertThat(bulkPricingPackage.getNextBillingDate()) assertThat(bulkPricingPackage.getNextBillingDate())
.isEqualTo(DateTime.parse("2013-03-17T00:00:00Z")); .isEqualTo(DateTime.parse("2013-03-17T00:00:00Z"));
assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty(); assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty();
} }
@@ -146,10 +145,10 @@ public class UpdateBulkPricingPackageCommandTest
tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123")); tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123"));
assertThat(bulkPricingPackageOptional).isPresent(); assertThat(bulkPricingPackageOptional).isPresent();
BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get(); BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get();
Truth.assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200); assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200);
Truth.assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000); assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000);
Truth.assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000)); assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000));
Truth.assertThat(bulkPricingPackage.getNextBillingDate()) assertThat(bulkPricingPackage.getNextBillingDate())
.isEqualTo(DateTime.parse("2012-11-12T05:00:00Z")); .isEqualTo(DateTime.parse("2012-11-12T05:00:00Z"));
assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty(); assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty();
} }
@@ -167,10 +166,10 @@ public class UpdateBulkPricingPackageCommandTest
tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123")); tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123"));
assertThat(bulkPricingPackageOptional).isPresent(); assertThat(bulkPricingPackageOptional).isPresent();
BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get(); BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get();
Truth.assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200); assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200);
Truth.assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000); assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000);
Truth.assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 1000)); assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 1000));
Truth.assertThat(bulkPricingPackage.getNextBillingDate()) assertThat(bulkPricingPackage.getNextBillingDate())
.isEqualTo(DateTime.parse("2013-03-17T00:00:00Z")); .isEqualTo(DateTime.parse("2013-03-17T00:00:00Z"));
assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty(); assertThat(bulkPricingPackage.getLastNotificationSent()).isEmpty();
} }
@@ -183,12 +182,12 @@ public class UpdateBulkPricingPackageCommandTest
tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123")); tm().transact(() -> BulkPricingPackage.loadByTokenString("abc123"));
assertThat(bulkPricingPackageOptional).isPresent(); assertThat(bulkPricingPackageOptional).isPresent();
BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get(); BulkPricingPackage bulkPricingPackage = bulkPricingPackageOptional.get();
Truth.assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200); assertThat(bulkPricingPackage.getMaxDomains()).isEqualTo(200);
Truth.assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000); assertThat(bulkPricingPackage.getMaxCreates()).isEqualTo(1000);
Truth.assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000)); assertThat(bulkPricingPackage.getBulkPrice()).isEqualTo(Money.of(CurrencyUnit.USD, 2000));
Truth.assertThat(bulkPricingPackage.getNextBillingDate()) assertThat(bulkPricingPackage.getNextBillingDate())
.isEqualTo(DateTime.parse("2012-11-12T05:00:00Z")); .isEqualTo(DateTime.parse("2012-11-12T05:00:00Z"));
Truth.assertThat(bulkPricingPackage.getLastNotificationSent().get()) assertThat(bulkPricingPackage.getLastNotificationSent().get())
.isEqualTo(DateTime.parse("2010-11-12T05:00:00.000Z")); .isEqualTo(DateTime.parse("2010-11-12T05:00:00.000Z"));
} }
} }
@@ -15,6 +15,7 @@
package google.registry.ui.server.registrar; package google.registry.ui.server.registrar;
import static com.google.common.collect.Iterables.getOnlyElement; import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.common.truth.Truth.assertThat;
import static com.google.monitoring.metrics.contrib.LongMetricSubject.assertThat; import static com.google.monitoring.metrics.contrib.LongMetricSubject.assertThat;
import static google.registry.request.auth.AuthenticatedRegistrarAccessor.Role.ADMIN; import static google.registry.request.auth.AuthenticatedRegistrarAccessor.Role.ADMIN;
import static google.registry.request.auth.AuthenticatedRegistrarAccessor.Role.OWNER; import static google.registry.request.auth.AuthenticatedRegistrarAccessor.Role.OWNER;
@@ -32,7 +33,6 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSetMultimap; import com.google.common.collect.ImmutableSetMultimap;
import com.google.common.collect.ImmutableSortedMap; import com.google.common.collect.ImmutableSortedMap;
import com.google.common.truth.Truth;
import google.registry.flows.certs.CertificateChecker; import google.registry.flows.certs.CertificateChecker;
import google.registry.groups.GmailClient; import google.registry.groups.GmailClient;
import google.registry.model.registrar.RegistrarPoc; import google.registry.model.registrar.RegistrarPoc;
@@ -167,7 +167,7 @@ public abstract class RegistrarSettingsActionTestCase {
void verifyNotificationEmailsSent() throws Exception { void verifyNotificationEmailsSent() throws Exception {
ArgumentCaptor<EmailMessage> captor = ArgumentCaptor.forClass(EmailMessage.class); ArgumentCaptor<EmailMessage> captor = ArgumentCaptor.forClass(EmailMessage.class);
verify(gmailClient).sendEmail(captor.capture()); verify(gmailClient).sendEmail(captor.capture());
Truth.assertThat(captor.getValue().recipients()) assertThat(captor.getValue().recipients())
.containsExactly( .containsExactly(
new InternetAddress("notification@test.example"), new InternetAddress("notification@test.example"),
new InternetAddress("notification2@test.example"), new InternetAddress("notification2@test.example"),