diff --git a/core/src/main/java/google/registry/model/domain/fee06/FeeCheckResponseExtensionV06.java b/core/src/main/java/google/registry/model/domain/fee06/FeeCheckResponseExtensionV06.java index 79de7cd7040..da0d218772c 100644 --- a/core/src/main/java/google/registry/model/domain/fee06/FeeCheckResponseExtensionV06.java +++ b/core/src/main/java/google/registry/model/domain/fee06/FeeCheckResponseExtensionV06.java @@ -44,8 +44,9 @@ public ImmutableList getItems() { return items; } - static FeeCheckResponseExtensionV06 - create(ImmutableList items) { + @VisibleForTesting + public static FeeCheckResponseExtensionV06 create( + ImmutableList items) { FeeCheckResponseExtensionV06 instance = new FeeCheckResponseExtensionV06(); instance.items = items; return instance; diff --git a/core/src/main/java/google/registry/model/domain/fee06/package-info.java b/core/src/main/java/google/registry/model/domain/fee06/package-info.java index 770e685c1a8..cea2b8ca22a 100644 --- a/core/src/main/java/google/registry/model/domain/fee06/package-info.java +++ b/core/src/main/java/google/registry/model/domain/fee06/package-info.java @@ -14,7 +14,7 @@ @XmlSchema( namespace = "urn:ietf:params:xml:ns:fee-0.6", - xmlns = @XmlNs(prefix = "fee", namespaceURI = "urn:ietf:params:xml:ns:fee-0.6"), + xmlns = @XmlNs(prefix = "fee06", namespaceURI = "urn:ietf:params:xml:ns:fee-0.6"), elementFormDefault = XmlNsForm.QUALIFIED) @XmlAccessorType(XmlAccessType.FIELD) @XmlJavaTypeAdapter(CurrencyUnitAdapter.class) diff --git a/core/src/main/java/google/registry/model/domain/fee11/FeeCheckResponseExtensionV11.java b/core/src/main/java/google/registry/model/domain/fee11/FeeCheckResponseExtensionV11.java index 75f5f9819aa..7f301b082a8 100644 --- a/core/src/main/java/google/registry/model/domain/fee11/FeeCheckResponseExtensionV11.java +++ b/core/src/main/java/google/registry/model/domain/fee11/FeeCheckResponseExtensionV11.java @@ -44,8 +44,9 @@ public ImmutableList getItems() { return items; } - static FeeCheckResponseExtensionV11 - create(ImmutableList items) { + @VisibleForTesting + public static FeeCheckResponseExtensionV11 create( + ImmutableList items) { FeeCheckResponseExtensionV11 instance = new FeeCheckResponseExtensionV11(); instance.items = items; return instance; diff --git a/core/src/main/java/google/registry/model/domain/fee12/FeeCheckResponseExtensionV12.java b/core/src/main/java/google/registry/model/domain/fee12/FeeCheckResponseExtensionV12.java index e627ccd1f60..2f6c41ce6c4 100644 --- a/core/src/main/java/google/registry/model/domain/fee12/FeeCheckResponseExtensionV12.java +++ b/core/src/main/java/google/registry/model/domain/fee12/FeeCheckResponseExtensionV12.java @@ -49,8 +49,9 @@ public ImmutableList getItems() { return items; } - static FeeCheckResponseExtensionV12 - create(CurrencyUnit currency, ImmutableList items) { + @VisibleForTesting + public static FeeCheckResponseExtensionV12 create( + CurrencyUnit currency, ImmutableList items) { FeeCheckResponseExtensionV12 instance = new FeeCheckResponseExtensionV12(); instance.currency = currency; instance.items = items; diff --git a/core/src/main/java/google/registry/model/domain/feestdv1/FeeCheckResponseExtensionStdV1.java b/core/src/main/java/google/registry/model/domain/feestdv1/FeeCheckResponseExtensionStdV1.java index d28b3796d46..faca13a4c29 100644 --- a/core/src/main/java/google/registry/model/domain/feestdv1/FeeCheckResponseExtensionStdV1.java +++ b/core/src/main/java/google/registry/model/domain/feestdv1/FeeCheckResponseExtensionStdV1.java @@ -49,7 +49,8 @@ public ImmutableList getItems() { return items; } - static FeeCheckResponseExtensionStdV1 create( + @VisibleForTesting + public static FeeCheckResponseExtensionStdV1 create( CurrencyUnit currency, ImmutableList items) { FeeCheckResponseExtensionStdV1 instance = new FeeCheckResponseExtensionStdV1(); instance.currency = currency; diff --git a/core/src/main/java/google/registry/model/domain/feestdv1/package-info.java b/core/src/main/java/google/registry/model/domain/feestdv1/package-info.java index b99a8baea6c..57211c209b0 100644 --- a/core/src/main/java/google/registry/model/domain/feestdv1/package-info.java +++ b/core/src/main/java/google/registry/model/domain/feestdv1/package-info.java @@ -14,7 +14,7 @@ @XmlSchema( namespace = "urn:ietf:params:xml:ns:epp:fee-1.0", - xmlns = @XmlNs(prefix = "fee_1_00", namespaceURI = "urn:ietf:params:xml:ns:epp:fee-1.0"), + xmlns = @XmlNs(prefix = "fee", namespaceURI = "urn:ietf:params:xml:ns:epp:fee-1.0"), elementFormDefault = XmlNsForm.QUALIFIED) @XmlAccessorType(XmlAccessType.FIELD) @XmlJavaTypeAdapters({ diff --git a/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java b/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java index daddc745b95..c681df0de78 100644 --- a/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java +++ b/core/src/test/java/google/registry/flows/domain/DomainCreateFlowTest.java @@ -64,6 +64,7 @@ import static google.registry.testing.EppExceptionSubject.assertAboutEppExceptions; import static google.registry.util.DateTimeUtils.END_OF_TIME; import static google.registry.util.DateTimeUtils.START_OF_TIME; +import static google.registry.xml.XmlTestUtils.assertXmlEquals; import static org.joda.money.CurrencyUnit.JPY; import static org.joda.money.CurrencyUnit.USD; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -2543,8 +2544,9 @@ void testFailure_blockedByBsa() throws Exception { .setResult(thrown.getResult()) .build()), ValidationMode.STRICT); - assertThat(new String(responseXmlBytes, StandardCharsets.UTF_8)) - .isEqualTo(loadFile("domain_create_blocked_by_bsa.xml")); + assertXmlEquals( + new String(responseXmlBytes, StandardCharsets.UTF_8), + loadFile("domain_create_blocked_by_bsa.xml")); } @Test @@ -2577,8 +2579,9 @@ void testFailure_blockedByBsa_hasWrongToken() throws Exception { .setResult(thrown.getResult()) .build()), ValidationMode.STRICT); - assertThat(new String(responseXmlBytes, StandardCharsets.UTF_8)) - .isEqualTo(loadFile("domain_create_blocked_by_bsa.xml")); + assertXmlEquals( + new String(responseXmlBytes, StandardCharsets.UTF_8), + loadFile("domain_create_blocked_by_bsa.xml")); } @Test diff --git a/core/src/test/java/google/registry/model/eppcommon/EppXmlTransformerTest.java b/core/src/test/java/google/registry/model/eppcommon/EppXmlTransformerTest.java index 5e10fb7d5f9..8118b4f8d53 100644 --- a/core/src/test/java/google/registry/model/eppcommon/EppXmlTransformerTest.java +++ b/core/src/test/java/google/registry/model/eppcommon/EppXmlTransformerTest.java @@ -15,13 +15,36 @@ package google.registry.model.eppcommon; import static com.google.common.truth.Truth.assertThat; +import static google.registry.model.eppcommon.EppXmlTransformer.marshal; import static google.registry.model.eppcommon.EppXmlTransformer.unmarshal; import static google.registry.testing.TestDataHelper.loadBytes; +import static java.nio.charset.StandardCharsets.UTF_8; import static org.junit.jupiter.api.Assertions.assertThrows; +import com.google.common.collect.ImmutableList; +import google.registry.model.domain.Period; +import google.registry.model.domain.fee.FeeCheckResponseExtension; +import google.registry.model.domain.fee.FeeCheckResponseExtensionItem; +import google.registry.model.domain.fee.FeeQueryCommandExtensionItem; +import google.registry.model.domain.fee06.FeeCheckResponseExtensionItemV06; +import google.registry.model.domain.fee06.FeeCheckResponseExtensionV06; +import google.registry.model.domain.fee11.FeeCheckResponseExtensionItemV11; +import google.registry.model.domain.fee11.FeeCheckResponseExtensionV11; +import google.registry.model.domain.fee12.FeeCheckResponseExtensionItemV12; +import google.registry.model.domain.fee12.FeeCheckResponseExtensionV12; +import google.registry.model.domain.feestdv1.FeeCheckResponseExtensionItemStdV1; +import google.registry.model.domain.feestdv1.FeeCheckResponseExtensionStdV1; import google.registry.model.eppinput.EppInput; import google.registry.model.eppoutput.EppOutput; +import google.registry.model.eppoutput.EppResponse; +import google.registry.model.eppoutput.Result; +import google.registry.xml.ValidationMode; +import java.util.stream.Stream; +import org.joda.money.CurrencyUnit; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; /** Tests for {@link EppXmlTransformer}. */ class EppXmlTransformerTest { @@ -38,4 +61,66 @@ void testUnmarshalingWrongClassThrows() { ClassCastException.class, () -> unmarshal(EppOutput.class, loadBytes(getClass(), "contact_info.xml").read())); } + + @ParameterizedTest + @MethodSource("provideFeeTestParams") + void testFeeXmlNamespaceTagLiteral( + String tag, FeeCheckResponseExtension feeCheckResponseExtension) throws Exception { + var eppOutput = + EppOutput.create( + new EppResponse.Builder() + .setTrid(Trid.create("clTrid", "svrTrid")) + .setResultFromCode(Result.Code.SUCCESS) + .setOnlyExtension(feeCheckResponseExtension) + .build()); + var xmlOutput = new String(marshal(eppOutput, ValidationMode.STRICT), UTF_8); + String expected = String.format("<%s:chkData>", tag); + assertThat(xmlOutput).contains(expected); + } + + @SuppressWarnings("unused") + private static Stream provideFeeTestParams() { + return Stream.of( + Arguments.of( + "fee06", + FeeCheckResponseExtensionV06.create( + ImmutableList.of( + createCannedExtensionItem( + FeeCheckResponseExtensionItemV06.class, + new FeeCheckResponseExtensionItemV06.Builder()))), + Arguments.of( + "fee11", + FeeCheckResponseExtensionV11.create( + ImmutableList.of( + createCannedExtensionItem( + FeeCheckResponseExtensionItemV11.class, + new FeeCheckResponseExtensionItemV11.Builder()))))), + Arguments.of( + "fee12", + FeeCheckResponseExtensionV12.create( + CurrencyUnit.USD, + ImmutableList.of( + createCannedExtensionItem( + FeeCheckResponseExtensionItemV12.class, + new FeeCheckResponseExtensionItemV12.Builder())))), + Arguments.of( + "fee", + FeeCheckResponseExtensionStdV1.create( + CurrencyUnit.USD, + ImmutableList.of( + createCannedExtensionItem( + FeeCheckResponseExtensionItemStdV1.class, + new FeeCheckResponseExtensionItemStdV1.Builder()))))); + } + + private static T createCannedExtensionItem( + Class itemType, FeeCheckResponseExtensionItem.Builder builder) { + return itemType.cast( + builder + .setCommand(FeeQueryCommandExtensionItem.CommandName.CREATE, null, null) + .setDomainNameIfSupported("example.tld") + .setCurrencyIfSupported(CurrencyUnit.USD) + .setPeriod(Period.create(1, Period.Unit.YEARS)) + .build()); + } }