/*
* This is eMonocot, a global online biodiversity information resource.
*
* Copyright © 2011–2015 The Board of Trustees of the Royal Botanic Gardens, Kew and The University of Oxford
*
* eMonocot is free software: you can redistribute it and/or modify it under the terms of the
* GNU Affero General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* eMonocot is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* The complete text of the GNU Affero General Public License is in the source repository as the file
* ‘COPYING’. It is also available from <http://www.gnu.org/licenses/>.
*/
package org.emonocot.job.sitemap;
import static org.junit.Assert.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.emonocot.model.marshall.xml.StaxEventItemWriter;
import org.joda.time.DateTime;
import org.joda.time.format.ISODateTimeFormat;
import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.core.io.FileSystemResource;
import org.springframework.oxm.xstream.XStreamMarshaller;
public class StaxWriterTest {
/**
*
*/
private StaxEventItemWriter writer;
/**
*
*/
private FileSystemResource tempFile = new FileSystemResource("target/test-outputs/StaxWriterTest.xml");
/**
* @param writer the writer to set
*/
public final void setWriter(StaxEventItemWriter writer) {
this.writer = writer;
}
/**
* @throws Exception
*/
@Before
public void setUp() throws Exception {
writer = new StaxEventItemWriter();
writer.setResource(new FileSystemResource("target/test-outputs/StaxWriterTest.xml"));
writer.setRootTagName("urlset");
XStreamMarshaller marshaller = new XStreamMarshaller();
Map<String, Object> aliases = new HashMap<String, Object>();
aliases.put("url", Url.class);
marshaller.setAliases(aliases);
writer.setMarshaller(marshaller);
Map<String, String> attributes = new HashMap<String, String>();
attributes.put("xmlns", "http://www.sitemaps.org/schemas/sitemap");
writer.setRootElementAttributes(attributes);
}
/**
* @throws Exception
*/
@Test
public void testWriteUrlToFile() throws Exception {
String expectedXml = "<?xml version='1.0' encoding='UTF-8'?><urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap\"><url><loc>http://build.e-monocot.org/test/identifier</loc><lastmod>1986-07-11T22:15:00.000+01:00</lastmod></url></urlset>";
ExecutionContext executionContext = new ExecutionContext();
executionContext.put("query.string", "from Taxon");
writer.open(executionContext);
ArrayList<Url> items = new ArrayList<Url>();
Url data = new Url();
data.setLastmod(ISODateTimeFormat.dateTime().print(new DateTime(1986, 07, 11, 22, 15, 00, 00)));
data.setLoc(new URL("http://build.e-monocot.org/test/identifier"));
items.add(data);
writer.write(items);
writer.close();
assertTrue("The file should exist and be readable", tempFile.exists() && tempFile.isReadable());
assertEquals("The XML produced didn't match expected XML", expectedXml, FileUtils.readFileToString(tempFile.getFile()));
}
}