package com.ausregistry.jtoolkit2.tmdb.xml;
import static com.ausregistry.jtoolkit2.test.infrastructure.ToolkitMatchers.isNodeForXml;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.whenNew;
import java.util.GregorianCalendar;
import com.ausregistry.jtoolkit2.EPPDateFormatter;
import com.ausregistry.jtoolkit2.tmdb.model.TmNotice;
import com.ausregistry.jtoolkit2.tmdb.model.TmClaim;
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;
@RunWith(PowerMockRunner.class)
@PrepareForTest({TmNoticeXmlParser.class, EPPDateFormatter.class, TmClaimXmlParser.class})
public class TmNoticeXmlParserTest {
private TmNoticeXmlParser tmNoticeXmlParser = new TmNoticeXmlParser();
private TmNotice mockTmNotice;
@Mock
private GregorianCalendar mockCalender;
@Before
public void setUp() throws Exception {
mockTmNotice = mock(TmNotice.class);
whenNew(TmNotice.class).withNoArguments().thenReturn(mockTmNotice);
mockStatic(EPPDateFormatter.class);
}
@Test
public void shouldParseIdCorrectly() throws Exception {
String noticeXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<tmNotice:notice xmlns:tmNotice=\"urn:ietf:params:xml:ns:tmNotice-1.0\">" +
" <tmNotice:id>370d0b7c9223372036854775807</tmNotice:id>" +
"</tmNotice:notice>";
TmNotice tmNotice = tmNoticeXmlParser.parse(noticeXml);
assertThat(tmNotice, is(mockTmNotice));
verify(mockTmNotice).setId("370d0b7c9223372036854775807");
}
@Test
public void shouldParseNotBeforeDateCorrectly() throws Exception {
String noticeXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<tmNotice:notice xmlns:tmNotice=\"urn:ietf:params:xml:ns:tmNotice-1.0\">" +
" <tmNotice:notBefore>2010-08-14T09:00:00.0Z</tmNotice:notBefore>" +
"</tmNotice:notice>";
when(EPPDateFormatter.fromXSDateTime("2010-08-14T09:00:00.0Z")).thenReturn(mockCalender);
tmNoticeXmlParser.parse(noticeXml);
verify(mockTmNotice).setNotBeforeDateTime(mockCalender);
}
@Test
public void shouldParseNotAfterDateCorrectly() throws Exception {
String noticeXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<tmNotice:notice xmlns:tmNotice=\"urn:ietf:params:xml:ns:tmNotice-1.0\">" +
" <tmNotice:notAfter>2010-08-16T09:00:00.0Z</tmNotice:notAfter>" +
"</tmNotice:notice>";
when(EPPDateFormatter.fromXSDateTime("2010-08-16T09:00:00.0Z")).thenReturn(mockCalender);
tmNoticeXmlParser.parse(noticeXml);
verify(mockTmNotice).setNotAfterDateTime(mockCalender);
}
@Test
public void shouldParseLabelCorrectly() throws Exception {
String noticeXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<tmNotice:notice xmlns:tmNotice=\"urn:ietf:params:xml:ns:tmNotice-1.0\">" +
" <tmNotice:label>example-one</tmNotice:label>" +
"</tmNotice:notice>";
tmNoticeXmlParser.parse(noticeXml);
verify(mockTmNotice).setLabel("example-one");
}
//This test will only work if we pass a JVM argument -XX:-UseSplitVerifier
@Test
public void shouldParseAllTheClaimXmlObjects() throws Exception {
String noticeXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<tmNotice:notice xmlns:tmNotice=\"urn:ietf:params:xml:ns:tmNotice-1.0\">" +
" <tmNotice:claim>" +
" <tmNotice:markName>Example-One</tmNotice:markName>" +
" </tmNotice:claim>" +
" <tmNotice:claim>" +
" <tmNotice:markName>Example-Two</tmNotice:markName>" +
" </tmNotice:claim>" +
"</tmNotice:notice>";
String firstClaimXml = " <tmNotice:claim>" +
" <tmNotice:markName>Example-One</tmNotice:markName>" +
" </tmNotice:claim>";
String secondClaimXml = " <tmNotice:claim>" +
" <tmNotice:markName>Example-Two</tmNotice:markName>" +
" </tmNotice:claim>";
TmClaimXmlParser mockClaimParser = mock(TmClaimXmlParser.class);
whenNew(TmClaimXmlParser.class).withNoArguments().thenReturn(mockClaimParser);
TmClaim mockFirstTmClaim = mock(TmClaim.class);
when(mockClaimParser.parse(isNodeForXml(firstClaimXml))).thenReturn(mockFirstTmClaim);
TmClaim mockSecondTmClaim = mock(TmClaim.class);
when(mockClaimParser.parse(isNodeForXml(secondClaimXml))).thenReturn(mockSecondTmClaim);
tmNoticeXmlParser.parse(noticeXml);
verify(mockTmNotice).addClaim(mockFirstTmClaim);
verify(mockTmNotice).addClaim(mockSecondTmClaim);
}
}