package com.ausregistry.jtoolkit2.tmdb.xml; import static com.ausregistry.jtoolkit2.test.infrastructure.ToolkitMatchers.isNodeForXml; import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.powermock.api.mockito.PowerMockito.whenNew; import javax.xml.parsers.DocumentBuilderFactory; import java.io.ByteArrayInputStream; import com.ausregistry.jtoolkit2.tmdb.model.TmAddress; import com.ausregistry.jtoolkit2.tmdb.model.TmHolder; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.w3c.dom.Node; @RunWith(PowerMockRunner.class) @PrepareForTest({TmHolderXmlParser.class}) public class TmHolderXmlParserTest { @Mock private TmHolder mockTmHolder; private TmHolderXmlParser tmHolderXmlParser; @Before public void setUp() throws Exception { tmHolderXmlParser = new TmHolderXmlParser(); whenNew(TmHolder.class).withNoArguments().thenReturn(mockTmHolder); } @Test public void shouldParseEntitlementCorrectly() throws Exception { String holderXml = "<tmNotice:holder entitlement=\"owner\" />"; TmHolder tmHolder = tmHolderXmlParser.parse(nodeForString(holderXml)); assertThat(tmHolder, sameInstance(mockTmHolder)); verify(mockTmHolder).setEntitlement("owner"); } @Test public void shouldParseNameCorrectly() throws Exception { String holderXml = "<tmNotice:holder entitlement=\"owner\">" + "<tmNotice:name>Example Name One</tmNotice:name>" + "</tmNotice:holder>"; tmHolderXmlParser.parse(nodeForString(holderXml)); verify(mockTmHolder).setName("Example Name One"); } @Test public void shouldParseOrganisationCorrectly() throws Exception { String holderXml = "<tmNotice:holder entitlement=\"owner\">" + "<tmNotice:org>Example Organisation One</tmNotice:org>" + "</tmNotice:holder>"; tmHolderXmlParser.parse(nodeForString(holderXml)); verify(mockTmHolder).setOrganisation("Example Organisation One"); } @Test public void shouldParseEmailCorrectly() throws Exception { String holderXml = "<tmNotice:holder entitlement=\"owner\">" + "<tmNotice:email>Example@Email.One</tmNotice:email>" + "</tmNotice:holder>"; tmHolderXmlParser.parse(nodeForString(holderXml)); verify(mockTmHolder).setEmail("Example@Email.One"); } @Test public void shouldParseVoiceCorrectly() throws Exception { String holderXml = "<tmNotice:holder entitlement=\"owner\">" + "<tmNotice:voice x=\"4321\">+1.7035555555</tmNotice:voice>" + "</tmNotice:holder>"; tmHolderXmlParser.parse(nodeForString(holderXml)); verify(mockTmHolder).setVoice("+1.7035555555"); verify(mockTmHolder).setVoiceExtension("4321"); } @Test public void shouldParseFaxCorrectly() throws Exception { String holderXml = "<tmNotice:holder entitlement=\"owner\">" + "<tmNotice:fax x=\"4321\">+1.7035555555</tmNotice:fax>" + "</tmNotice:holder>"; tmHolderXmlParser.parse(nodeForString(holderXml)); verify(mockTmHolder).setFax("+1.7035555555"); verify(mockTmHolder).setFaxExtension("4321"); } @Test public void shouldParseAddressCorrectly() throws Exception { String holderXml = "<tmNotice:holder entitlement=\"owner\">" + "<tmNotice:addr />" + "</tmNotice:holder>"; TmAddressXmlParser mockTmAddressXmlParser = mock(TmAddressXmlParser.class); whenNew(TmAddressXmlParser.class).withNoArguments().thenReturn(mockTmAddressXmlParser); TmAddress mockTmAddress = mock(TmAddress.class); when(mockTmAddressXmlParser.parse(isNodeForXml("<tmNotice:addr />"))).thenReturn(mockTmAddress); tmHolderXmlParser.parse(nodeForString(holderXml)); verify(mockTmHolder).setAddress(mockTmAddress); } private Node nodeForString(String xmlFragment) throws Exception { return DocumentBuilderFactory .newInstance() .newDocumentBuilder() .parse(new ByteArrayInputStream(xmlFragment.getBytes())) .getDocumentElement(); } }