package com.ausregistry.jtoolkit2.tmdb.xml; import static org.hamcrest.Matchers.sameInstance; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.verify; 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 org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; 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({TmAddressXmlParser.class}) public class TmAddressXmlParserTest { @Mock private TmAddress mockAddress; private TmAddressXmlParser tmAddressXmlParser = new TmAddressXmlParser(); @Before public void setUp() throws Exception { whenNew(TmAddress.class).withNoArguments().thenReturn(mockAddress); } @Test public void shouldParseStreetsCorrectly() throws Exception { String addressXml = " <tmNotice:addr>" + " <tmNotice:street>123 Example Dr.</tmNotice:street>" + " <tmNotice:street>Suite 100</tmNotice:street>" + "</tmNotice:addr>"; TmAddress address = tmAddressXmlParser.parse(nodeForString(addressXml)); assertThat(address, sameInstance(mockAddress)); InOrder inOrder = inOrder(mockAddress); inOrder.verify(mockAddress).addStreet("123 Example Dr."); inOrder.verify(mockAddress).addStreet("Suite 100"); } @Test public void shouldParseCityCorrectly() throws Exception { String addressXml = " <tmNotice:addr><tmNotice:city>SFO</tmNotice:city></tmNotice:addr>"; tmAddressXmlParser.parse(nodeForString(addressXml)); verify(mockAddress).setCity("SFO"); } @Test public void shouldParseStateCorrectly() throws Exception { String addressXml = " <tmNotice:addr><tmNotice:sp>VIC</tmNotice:sp></tmNotice:addr>"; tmAddressXmlParser.parse(nodeForString(addressXml)); verify(mockAddress).setStateOrProvince("VIC"); } @Test public void shouldParsePostalCodeCorrectly() throws Exception { String addressXml = " <tmNotice:addr><tmNotice:pc>3141</tmNotice:pc></tmNotice:addr>"; tmAddressXmlParser.parse(nodeForString(addressXml)); verify(mockAddress).setPostalCode("3141"); } @Test public void shouldParseCountryCodeCorrectly() throws Exception { String addressXml = " <tmNotice:addr><tmNotice:cc>AU</tmNotice:cc></tmNotice:addr>"; tmAddressXmlParser.parse(nodeForString(addressXml)); verify(mockAddress).setCountryCode("AU"); } private Node nodeForString(String xmlFragment) throws Exception { return DocumentBuilderFactory .newInstance() .newDocumentBuilder() .parse(new ByteArrayInputStream(xmlFragment.getBytes())) .getDocumentElement(); } }