use of ddf.catalog.transform.MetacardTransformer in project ddf by codice.
the class AtomTransformerTest method testMetacardTransformerBytesZero.
@Test
public void testMetacardTransformerBytesZero() throws IOException, CatalogTransformerException, XpathException, SAXException {
// given
MetacardTransformer metacardTransformer = mock(MetacardTransformer.class);
BinaryContent metacardTransformation = mock(BinaryContent.class);
when(metacardTransformation.getByteArray()).thenReturn(new byte[0]);
when(metacardTransformer.transform(isA(Metacard.class), isNull())).thenReturn(metacardTransformation);
AtomTransformer transformer = getConfiguredAtomTransformer(metacardTransformer, true);
SourceResponse response = getSourceResponseStub(SAMPLE_ID, null);
// when
BinaryContent binaryContent = transformer.transform(response, null);
// then
assertThat(binaryContent.getMimeType(), is(AtomTransformer.MIME_TYPE));
byte[] bytes = binaryContent.getByteArray();
String output = new String(bytes);
assertFeedCompliant(output);
assertEntryCompliant(output);
validateAgainstAtomSchema(bytes);
assertXpathEvaluatesTo(TEXT_TYPE, "/atom:feed/atom:entry/atom:content/@type", output);
assertXpathEvaluatesTo(SAMPLE_ID, "/atom:feed/atom:entry/atom:content", output);
}
use of ddf.catalog.transform.MetacardTransformer in project ddf by codice.
the class AtomTransformerTest method testTotalResultsNegative.
@Test
public void testTotalResultsNegative() throws IOException, CatalogTransformerException, XpathException, SAXException {
// given
AtomTransformer transformer = new AtomTransformer();
MetacardTransformer metacardTransformer = getXmlMetacardTransformerStub();
transformer.setMetacardTransformer(metacardTransformer);
setDefaultSystemConfiguration();
SourceResponse response = mock(SourceResponse.class);
when(response.getHits()).thenReturn(new Long(-1));
QueryImpl query = new QueryImpl(FILTER_BUILDER.attribute(Metacard.METADATA).text("you"));
query.setPageSize(1);
query.setStartIndex(2);
query.setRequestsTotalResultsCount(true);
QueryRequestImpl queryRequestImpl = new QueryRequestImpl(query);
when(response.getRequest()).thenReturn(queryRequestImpl);
ResultImpl result1 = new ResultImpl();
MetacardStub metacard = new MetacardStub("");
metacard.setId(SAMPLE_ID);
result1.setMetacard(metacard);
when(response.getResults()).thenReturn(Arrays.asList((Result) result1));
// when
BinaryContent binaryContent = transformer.transform(response, null);
// then
assertThat(binaryContent.getMimeType(), is(AtomTransformer.MIME_TYPE));
byte[] bytes = binaryContent.getByteArray();
String output = new String(bytes);
assertFeedCompliant(output);
assertEntryCompliant(output);
validateAgainstAtomSchema(bytes);
assertXpathNotExists("/atom:feed/os:totalResults", output);
}
use of ddf.catalog.transform.MetacardTransformer in project ddf by codice.
the class AtomTransformerTest method testMetacardIsNull.
/**
* The following rules must be followed in order to be compliant with the Atom specification as
* defined by http://tools.ietf.org/html/rfc4287#section-4.1.2 <br>
* "The following child elements are defined by this specification (note that the presence of some
* of these elements is required):
*
* <p>
* <li/>atom:entry elements MUST contain one or more atom:author elements, unless the atom:entry
* contains an atom:source element that contains an atom:author element or, in an Atom Feed
* Document, the atom:feed element contains an atom:author element itself.
*
* <p>
* <li/>atom:entry elements MAY contain any number of atom:category elements.
*
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:content element.
*
* <p>
* <li/>atom:entry elements MAY contain any number of atom:contributor elements.
*
* <p>
* <li/>atom:entry elements MUST contain exactly one atom:id element.
*
* <p>
* <li/>atom:entry elements that contain no child atom:content element MUST contain at least one
* atom:link element with a rel attribute value of "alternate".
*
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:link element with a rel attribute
* value of "alternate" that has the same combination of type and hreflang attribute values.
*
* <p>
* <li/>atom:entry elements MAY contain additional atom:link elements beyond those described
* above.
*
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:published element.
*
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:rights element.
*
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:source element.
*
* <p>
* <li/>atom:entry elements MUST contain an atom:summary element in either of the following cases:
*
* <p>
*
* <ul>
* the atom:entry contains an atom:content that has a "src" attribute (and is thus empty).
* </ul>
*
* <p>
*
* <ul>
* the atom:entry contains content that is encoded in Base64; i.e., the "type" attribute of
* atom:content is a MIME media type [MIMEREG], but is not an XML media type [RFC3023], does not
* begin with "text/", and does not end with "/xml" or "+xml".
* </ul>
*
* <p>
* <li/>atom:entry elements MUST NOT contain more than one atom:summary element.
*
* <p>
* <li/>atom:entry elements MUST contain exactly one atom:title element.
*
* <p>
* <li/>atom:entry elements MUST contain exactly one atom:updated element."
*
* @throws CatalogTransformerException
* @throws IOException
* @throws SAXException
* @throws XpathException
*/
@Test
public void testMetacardIsNull() throws IOException, CatalogTransformerException, XpathException, SAXException {
// given
AtomTransformer transformer = new AtomTransformer();
MetacardTransformer metacardTransformer = getXmlMetacardTransformerStub();
transformer.setMetacardTransformer(metacardTransformer);
setDefaultSystemConfiguration();
SourceResponse response = mock(SourceResponse.class);
when(response.getRequest()).thenReturn(getStubRequest());
ResultImpl result1 = new ResultImpl();
ResultImpl result2 = new ResultImpl();
MetacardStub metacard = new MetacardStub("");
metacard.setId(SAMPLE_ID);
metacard.setSourceId(SAMPLE_SOURCE_ID);
result1.setMetacard(metacard);
result2.setMetacard(null);
when(response.getResults()).thenReturn(Arrays.asList((Result) result1, result2));
// when
BinaryContent binaryContent = transformer.transform(response, null);
// then
byte[] bytes = binaryContent.getByteArray();
/* used to visualize */
IOUtils.write(bytes, new FileOutputStream(new File(TARGET_FOLDER + getMethodName() + ATOM_EXTENSION)));
String output = new String(bytes);
assertFeedCompliant(output);
assertEntryCompliant(output);
validateAgainstAtomSchema(bytes);
assertXpathEvaluatesTo(SAMPLE_SOURCE_ID, "/atom:feed/atom:entry/fs:resultSource/@fs:sourceId", output);
assertXpathEvaluatesTo("", "/atom:feed/atom:entry/fs:resultSource", output);
assertXpathEvaluatesTo(AtomTransformer.URN_CATALOG_ID + SAMPLE_ID, "/atom:feed/atom:entry/atom:id", output);
assertXpathEvaluatesTo(MetacardStub.DEFAULT_TITLE, "/atom:feed/atom:entry/atom:title", output);
assertXpathExists("/atom:feed/atom:entry/atom:updated", output);
assertXpathExists("/atom:feed/atom:entry/atom:content", output);
}
use of ddf.catalog.transform.MetacardTransformer in project ddf by codice.
the class AtomTransformerTest method getXmlMetacardTransformerStub.
private MetacardTransformer getXmlMetacardTransformerStub() throws IOException, CatalogTransformerException {
MetacardTransformer metacardTransformer = mock(MetacardTransformer.class);
BinaryContent metacardTransformation = mock(BinaryContent.class);
when(metacardTransformation.getByteArray()).thenReturn("<sample:note xmlns:sample=\"http://www.lockheedmartin.com/schema/sample\"><to>me</to><from>you</from></sample:note>".getBytes());
when(metacardTransformer.transform(isA(Metacard.class), isA(Map.class))).thenReturn(metacardTransformation);
return metacardTransformer;
}
use of ddf.catalog.transform.MetacardTransformer in project ddf by codice.
the class AtomTransformerTest method testMetacardTransformerThrowsIoException.
@Test
public void testMetacardTransformerThrowsIoException() throws IOException, CatalogTransformerException, XpathException, SAXException {
// given
MetacardTransformer metacardTransformer = mock(MetacardTransformer.class);
BinaryContent metacardTransformation = mock(BinaryContent.class);
when(metacardTransformation.getByteArray()).thenThrow(IOException.class);
when(metacardTransformer.transform(isA(Metacard.class), isNull())).thenReturn(metacardTransformation);
AtomTransformer transformer = getConfiguredAtomTransformer(metacardTransformer, true);
SourceResponse response = getSourceResponseStub(SAMPLE_ID, null);
// when
BinaryContent binaryContent = transformer.transform(response, null);
// then
assertThat(binaryContent.getMimeType(), is(AtomTransformer.MIME_TYPE));
byte[] bytes = binaryContent.getByteArray();
String output = new String(bytes);
assertFeedCompliant(output);
assertEntryCompliant(output);
validateAgainstAtomSchema(bytes);
assertXpathEvaluatesTo(TEXT_TYPE, "/atom:feed/atom:entry/atom:content/@type", output);
assertXpathEvaluatesTo(SAMPLE_ID, "/atom:feed/atom:entry/atom:content", output);
}
Aggregations