package com.ausregistry.jtoolkit2.se;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import org.junit.Test;
import com.ausregistry.jtoolkit2.EPPDateFormatter;
import com.ausregistry.jtoolkit2.xml.XMLDocument;
import com.ausregistry.jtoolkit2.xml.XMLParser;
public class DomainCreateResponseTest {
private static final XMLParser PARSER = new XMLParser();
@Test
public void testGetName() throws Exception {
final DomainCreateResponse response = new DomainCreateResponse();
final XMLDocument doc = PARSER.parse(getCreateResponseExpectedXml("example.com"));
response.fromXML(doc);
assertEquals("example.com", response.getName());
}
@Test
public void testGetExpiryDate() throws Exception {
final DomainCreateResponse response = new DomainCreateResponse();
final XMLDocument doc = PARSER.parse(getCreateResponseExpectedXml("example.com"));
response.fromXML(doc);
assertEquals(EPPDateFormatter.fromXSDateTime("2001-04-03T22:00:00.0Z"), response.getExpiryDate());
}
@Test
public void testGetCreateDate() throws Exception {
final DomainCreateResponse response = new DomainCreateResponse();
final XMLDocument doc = PARSER.parse(getCreateResponseExpectedXml("example.com"));
response.fromXML(doc);
assertEquals(EPPDateFormatter.fromXSDateTime("1999-04-03T22:00:00.0Z"), response.getCreateDate());
}
@Test
public void testGetCLTRID() throws Exception {
final DomainCreateResponse response = new DomainCreateResponse();
final XMLDocument doc = PARSER.parse(getCreateResponseExpectedXml("example.com"));
response.fromXML(doc);
assertEquals("ABC-12345", response.getCLTRID());
}
@Test
public void testGetIdnName() throws Exception {
final String userForm = "\u0257\u018c\u0661.com";
final String dnsForm = "xn--xha91b83h.com";
final String canonicalForm = "\u0257\u018c1.com";
final DomainCreateResponse response = new DomainCreateResponse();
final DomainIdnaResponseExtension idnaExtension =
new DomainIdnaResponseExtension(ResponseExtension.CREATE);
final XMLDocument doc =
PARSER.parse(getCreateResponseExpectedXml(dnsForm, true, userForm, canonicalForm,
null, null));
response.registerExtension(idnaExtension);
response.fromXML(doc);
assertEquals(dnsForm, response.getName());
assertEquals(userForm, idnaExtension.getUserFormName());
assertEquals(canonicalForm, idnaExtension.getCanonicalForm());
assertEquals("test", idnaExtension.getLanguage());
}
@Test
public void testGetNoIdn() throws Exception {
final String domainName = "xn--xha91b83h.com";
final DomainCreateResponse response = new DomainCreateResponse();
final DomainIdnaResponseExtension re =
new DomainIdnaResponseExtension(ResponseExtension.CREATE);
final XMLDocument doc =
PARSER.parse(getCreateResponseExpectedXml(domainName));
response.registerExtension(re);
response.fromXML(doc);
assertEquals(domainName, response.getName());
assertFalse("IDN extension should not have been initialised", re.isInitialised());
}
@Test
public void testGetVariants() throws Exception {
final String dnsForm = "xn--xha91b83h.com";
final String variantUserForm = "\u0257\u015c\u0661.com";
final String variantDnsForm = "xn--lga31c50h.com";
final DomainCreateResponse response = new DomainCreateResponse();
final DomainVariantResponseExtension variantsExtension =
new DomainVariantResponseExtension(ResponseExtension.INFO);
final XMLDocument doc =
PARSER.parse(getCreateResponseExpectedXml(dnsForm, variantUserForm, variantDnsForm));
response.registerExtension(variantsExtension);
response.fromXML(doc);
assertEquals(dnsForm, response.getName());
assertTrue("Variant extension should have been initialised",
variantsExtension.isInitialised());
final ArrayList<IdnaDomainVariant> variantList = variantsExtension.getVariants();
assertEquals("Incorrect number of variants returned", 1, variantList.size());
assertEquals(variantDnsForm, variantList.get(0).getName());
assertEquals(variantUserForm, variantList.get(0).getUserForm());
}
@Test
public void testGetNoVariants() throws Exception {
final String domainName = "xn--xha91b83h.com";
final DomainCreateResponse response = new DomainCreateResponse();
final DomainVariantResponseExtension variantsExtension =
new DomainVariantResponseExtension(ResponseExtension.CREATE);
final XMLDocument doc = PARSER.parse(getCreateResponseExpectedXml(domainName));
response.registerExtension(variantsExtension);
response.fromXML(doc);
assertEquals(domainName, response.getName());
assertFalse("Variants should not have been initialised", variantsExtension.isInitialised());
}
@Test
public void testLdhOnlyGetName() throws Exception {
final DomainCreateResponse response = new DomainCreateResponse();
final DomainIdnaResponseExtension re = new DomainIdnaResponseExtension(ResponseExtension.CREATE);
final XMLDocument doc = PARSER.parse(getCreateResponseExpectedXml("example.com", true, "example.com", "example.com", null, null));
response.registerExtension(re);
response.fromXML(doc);
assertEquals("example.com", response.getName());
assertEquals("example.com", re.getUserFormName());
assertEquals("example.com", re.getCanonicalForm());
}
private static String getCreateResponseExpectedXml(final String domainName,
final boolean isIdn, final String userForm, final String canonicalForm,
final String variantUserForm, final String variantDnsForm) {
final StringBuilder result = new StringBuilder();
result.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
result.append("<epp xmlns=\"urn:ietf:params:xml:ns:epp-1.0\"");
result.append( " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
result.append( " xsi:schemaLocation=\"urn:ietf:params:xml:ns:epp-1.0 epp-1.0.xsd\">");
result.append( "<response>");
result.append( "<result code=\"1000\">");
result.append( "<msg>Command completed successfully</msg>");
result.append( "</result>");
result.append( "<resData>");
result.append( "<domain:creData xmlns:domain=\"urn:ietf:params:xml:ns:domain-1.0\"");
result.append( " xsi:schemaLocation=\"urn:ietf:params:xml:ns:domain-1.0 domain-1.0.xsd\">");
result.append( "<domain:name>" + domainName + "</domain:name>");
result.append( "<domain:crDate>1999-04-03T22:00:00.0Z</domain:crDate>");
result.append( "<domain:exDate>2001-04-03T22:00:00.0Z</domain:exDate>");
result.append( "</domain:creData>");
result.append( "</resData>");
if (isIdn || variantDnsForm != null) {
result.append("<extension>");
if (isIdn) {
result.append("<creData xmlns=\"urn:X-ar:params:xml:ns:idnadomain-1.0\"");
result.append(" xsi:schemaLocation=\"urn:X-ar:params:xml:ns:idnadomain-1.0 idnadomain-1.0.xsd\">");
result.append("<userForm language=\"test\">" + userForm + "</userForm>");
result.append("<canonicalForm>" + canonicalForm + "</canonicalForm>");
result.append("</creData>");
}
if (variantDnsForm != null && variantUserForm != null) {
result.append("<infData xmlns=\"urn:X-ar:params:xml:ns:variant-1.0\"");
result.append(" xsi:schemaLocation=\"urn:X-ar:params:xml:ns:variant-1.0 variant-1.0.xsd\">");
result.append("<variant userForm=\"" + variantUserForm + "\">" + variantDnsForm + "</variant>");
result.append("</infData>");
}
result.append("</extension>");
}
result.append( "<trID>");
result.append( "<clTRID>ABC-12345</clTRID>");
result.append( "<svTRID>54321-XYZ</svTRID>");
result.append( "</trID>");
result.append( "</response>");
result.append("</epp>");
return result.toString();
}
private static String getCreateResponseExpectedXml(final String domainName) {
return getCreateResponseExpectedXml(domainName, domainName, false);
}
private static String getCreateResponseExpectedXml(final String domainName, final String dnsForm,
final boolean isIdn) {
return getCreateResponseExpectedXml(dnsForm, isIdn, domainName, null, null, null);
}
private static String getCreateResponseExpectedXml(final String domainName,
final String variantUserForm, final String variantDnsForm) {
return getCreateResponseExpectedXml(domainName, false, null, null, variantUserForm,
variantDnsForm);
}
}