// Path: src/main/java/com/cisco/cta/taxii/adapter/persistence/TaxiiStatus.java
// @Data
// @XmlRootElement(name="taxii-status")
// @XmlAccessorType(XmlAccessType.NONE)
// public class TaxiiStatus {
// 
//     @XmlElement
//     private final List<Feed> feed = new ArrayList<>();
//     
//     
//     /**
//      * JAXB annotated class holding consumption status of a single TAXII feed.
//      * @see TaxiiStatusDao
//      */
//     @Data
//     @XmlAccessorType(XmlAccessType.NONE)
//     public static class Feed {
//         
//         @XmlAttribute
//         private String name;
// 
//         @XmlAttribute
//         private XMLGregorianCalendar lastUpdate;
// 
//         @XmlAttribute
//         private Boolean more;
// 
//         @XmlAttribute
//         private String resultId;
// 
//         @XmlAttribute
//         private Integer resultPartNumber;
// 
//         @XmlAttribute
//         private Integer ioErrorCount;
// 
//     }
// }
// 
// Path: src/test/java/com/cisco/cta/taxii/adapter/PollRequestMatcher.java
// public static PollRequestMatcher initialPollRequest(String messageId, String collection) {
//     return new PollRequestMatcher(messageId, collection, null);
// }
// 
// Path: src/test/java/com/cisco/cta/taxii/adapter/PollRequestMatcher.java
// public static PollRequestMatcher nextPollRequest(String messageId, String collection, String begin) {
//     return new PollRequestMatcher(messageId, collection, begin);
// }
// 
// Path: src/test/java/com/cisco/cta/taxii/adapter/PollFulfillmentMatcher.java
// public static PollFulfillmentMatcher pollFulfillment(String messageId, String collection, String resultId, String resultPartNumber) {
//     return new PollFulfillmentMatcher(messageId, collection, resultId, resultPartNumber);
// }


import static com.cisco.cta.taxii.adapter.PollFulfillmentMatcher.pollFulfillment;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
import com.cisco.cta.taxii.adapter.persistence.TaxiiStatus;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.io.ByteArrayOutputStream;
import static com.cisco.cta.taxii.adapter.PollRequestMatcher.initialPollRequest;
import static com.cisco.cta.taxii.adapter.PollRequestMatcher.nextPollRequest;
    private XMLGregorianCalendar cal;


    @Before
    public void setUp() throws Exception {
        feed = new TaxiiStatus.Feed();
        feed.setName("my-feed");
        datatypeFactory = DatatypeFactory.newInstance();
        cal = datatypeFactory.newXMLGregorianCalendar("2015-01-01T00:00:00");
    }

    @Test
    public void writeInitialPollRequest() throws Exception {
        writer.write("tla-123", feed, out);
        assertThat(out, is(initialPollRequest("tla-123", "my-feed")));
        verify(out).close();
    }

    @Test
    public void writeNextPollRequest() throws Exception {
        feed.setLastUpdate(cal);
        writer.write("tla-123", feed, out);
        assertThat(out, is(nextPollRequest("tla-123", "my-feed", "2015-01-01T00:00:00")));
        verify(out).close();
    }

    @Test
    public void resultPartNumberFormattedCorrectly() throws Exception {
        feed.setLastUpdate(cal);
        writer.write("tla-123", feed, "123#456", 1000, out);
// Path: src/main/java/com/cisco/cta/taxii/adapter/persistence/TaxiiStatus.java
// @Data
// @XmlRootElement(name="taxii-status")
// @XmlAccessorType(XmlAccessType.NONE)
// public class TaxiiStatus {
// 
//     @XmlElement
//     private final List<Feed> feed = new ArrayList<>();
//     
//     
//     /**
//      * JAXB annotated class holding consumption status of a single TAXII feed.
//      * @see TaxiiStatusDao
//      */
//     @Data
//     @XmlAccessorType(XmlAccessType.NONE)
//     public static class Feed {
//         
//         @XmlAttribute
//         private String name;
// 
//         @XmlAttribute
//         private XMLGregorianCalendar lastUpdate;
// 
//         @XmlAttribute
//         private Boolean more;
// 
//         @XmlAttribute
//         private String resultId;
// 
//         @XmlAttribute
//         private Integer resultPartNumber;
// 
//         @XmlAttribute
//         private Integer ioErrorCount;
// 
//     }
// }
// 
// Path: src/test/java/com/cisco/cta/taxii/adapter/PollRequestMatcher.java
// public static PollRequestMatcher initialPollRequest(String messageId, String collection) {
//     return new PollRequestMatcher(messageId, collection, null);
// }
// 
// Path: src/test/java/com/cisco/cta/taxii/adapter/PollRequestMatcher.java
// public static PollRequestMatcher nextPollRequest(String messageId, String collection, String begin) {
//     return new PollRequestMatcher(messageId, collection, begin);
// }
// 
// Path: src/test/java/com/cisco/cta/taxii/adapter/PollFulfillmentMatcher.java
// public static PollFulfillmentMatcher pollFulfillment(String messageId, String collection, String resultId, String resultPartNumber) {
//     return new PollFulfillmentMatcher(messageId, collection, resultId, resultPartNumber);
// }


// Path: src/test/java/com/cisco/cta/taxii/adapter/httpclient/HttpBodyWriterTest.java
import static com.cisco.cta.taxii.adapter.PollFulfillmentMatcher.pollFulfillment;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
import com.cisco.cta.taxii.adapter.persistence.TaxiiStatus;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.io.ByteArrayOutputStream;
import static com.cisco.cta.taxii.adapter.PollRequestMatcher.initialPollRequest;
import static com.cisco.cta.taxii.adapter.PollRequestMatcher.nextPollRequest;

    private XMLGregorianCalendar cal;


    @Before
    public void setUp() throws Exception {
        feed = new TaxiiStatus.Feed();
        feed.setName("my-feed");
        datatypeFactory = DatatypeFactory.newInstance();
        cal = datatypeFactory.newXMLGregorianCalendar("2015-01-01T00:00:00");
    }

    @Test
    public void writeInitialPollRequest() throws Exception {
        writer.write("tla-123", feed, out);
        assertThat(out, is(initialPollRequest("tla-123", "my-feed")));
        verify(out).close();
    }

    @Test
    public void writeNextPollRequest() throws Exception {
        feed.setLastUpdate(cal);
        writer.write("tla-123", feed, out);
        assertThat(out, is(nextPollRequest("tla-123", "my-feed", "2015-01-01T00:00:00")));
        verify(out).close();
    }

    @Test
    public void resultPartNumberFormattedCorrectly() throws Exception {
        feed.setLastUpdate(cal);
        writer.write("tla-123", feed, "123#456", 1000, out);
        assertThat(out, is(pollFulfillment("tla-123", "my-feed", "123#456", "1000")));