package org.nextprot.api.web.service.impl.writer;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import org.nextprot.api.web.dbunit.base.mvc.WebIntegrationBaseTest;
import org.nextprot.api.web.utils.XMLUnitUtils;
import org.w3c.dom.NodeList;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Arrays;
import static org.junit.Assert.assertEquals;
@Ignore
public class NPEntryXMLStreamWriterTest extends WebIntegrationBaseTest {
@Test
public void testXMLExportStream() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
Writer writer = new PrintWriter(out);
EntryXMLStreamWriter exporter = new EntryXMLStreamWriter(writer, "overview");
exporter.write(Arrays.asList("NX_P06213", "NX_P01308"));
exporter.close();
writer.close();
out.close();
NodeList recommendedNodes = XMLUnitUtils.getMatchingNodes(out.toString(), "nextprot-export/entry-list/entry/overview/gene-list/gene/gene-name[@type='primary']");
assertEquals(recommendedNodes.item(0).getTextContent(), "INSR");
assertEquals(recommendedNodes.item(1).getTextContent(), "INS");
}
// NOTE: <chain> in <chain-list> is not steadily sorted by <chain-name>
// As a workaround, we choose to test outputs with 2 alternative order
// TODO: A fix/decision should be made in Overview.EntityName compareTo() method to make this comparison deterministic
@Test
public void testWriteXML() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
EntryXMLStreamWriter writer = new EntryXMLStreamWriter(out, "overview");
writer.write(Arrays.asList("NX_P06213", "NX_P01308"));
writer.close();
out.close();
assertExpectedOutput(out.toString());
}
@Test
public void testWriteXMLPrematureClose() throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
EntryXMLStreamWriter writer = new EntryXMLStreamWriter(out, "overview");
writer.close();
writer.write(Arrays.asList("NX_P06213"));
Assert.assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<nextprot-export>\n" +
" <header>\n" +
" <database-name>neXtProt</database-name>\n" +
" <number-of-entries>$entriesCount</number-of-entries>\n" +
" </header>\n" +
" <entry-list>\n" +
" </entry-list>\n" +
" <copyright>\n" +
" Copyrighted by the SIB Swiss Institute of Bioinformatics.\n" +
" Distributed under the Creative Commons Attribution-NoDerivs License - see http://creativecommons.org/licenses/by-nd/3.0/\n" +
" </copyright>\n" +
"</nextprot-export>\n", out.toString());
}
private static void assertExpectedOutput(String out) {
String expectedXmlPrefixOutput = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<nextprot-export>\n" +
" <header>\n" +
" <database-name>neXtProt</database-name>\n" +
" <number-of-entries>$entriesCount</number-of-entries>\n" +
" <release>\n" +
" <nextprot>\n" +
" <database-release>$release.databaseRelease</database-release>\n" +
" <api-release>$release.apiRelease</api-release>\n" +
" </nextprot>\n" +
" <data-source-list/>\n" +
" </release>\n" +
" </header>\n" +
" <entry-list>\n" +
" <entry accession=\"NX_P06213\" database=\"neXtProt\">\n" +
" <overview>\n" +
" <protein-existence value=\"Evidence_at_protein_level\"/>\n" +
" <protein-name-list>\n" +
" <recommended-name>\n" +
" <protein-name qualifier=\"full\">Insulin receptor</protein-name>\n" +
" <protein-name qualifier=\"short\">IR</protein-name>\n" +
" <protein-name qualifier=\"EC\">2.7.10.1</protein-name>\n" +
" </recommended-name>\n" +
" <alternative-name-list>\n" +
" <alternative-name>\n" +
" <protein-name qualifier=\"CD antigen\">CD220</protein-name>\n" +
" </alternative-name>\n" +
" </alternative-name-list>\n" +
" </protein-name-list>\n" +
" <chain-list>\n" +
" <chain>\n" +
" <recommended-name>\n" +
" <chain-name qualifier=\"full\">Insulin receptor subunit alpha</chain-name>\n" +
" </recommended-name>\n" +
" </chain>\n" +
" <chain>\n" +
" <recommended-name>\n" +
" <chain-name qualifier=\"full\">Insulin receptor subunit beta</chain-name>\n" +
" </recommended-name>\n" +
" </chain>\n" +
" </chain-list>\n" +
" <gene-list>\n" +
" <gene>\n" +
" <gene-name type=\"primary\">INSR</gene-name>\n" +
" </gene>\n" +
" </gene-list>\n" +
" <family-list>\n" +
" <family family-type=\"Superfamily\">\n" +
" <cv-term accession=\"FA-03057\" terminology=\"uniprot-family-cv\">Protein kinase</cv-term>\n" +
" <family family-type=\"Family\">\n" +
" <cv-term accession=\"FA-03117\" terminology=\"uniprot-family-cv\">Tyr protein kinase</cv-term>\n" +
" <family family-type=\"Subfamily\">\n" +
" <cv-term accession=\"FA-03128\" terminology=\"uniprot-family-cv\">Insulin receptor</cv-term>\n" +
" </family>\n" +
" </family>\n" +
" </family>\n" +
" </family-list>\n" +
" <history>\n" +
" <entry-history database=\"neXtProt\" integrated=\"2010-03-22\" updated=\"2015-09-06\"/>\n" +
" <entry-history database=\"UniProtKB\" integrated=\"1988-01-01\" updated=\"2015-09-16\" version=\"217\" last-sequence-update=\"2010-10-05\" sequence-version=\"4\"/>\n" +
" </history>\n" +
" </overview>\n" +
" </entry>\n" +
" <entry accession=\"NX_P01308\" database=\"neXtProt\">\n" +
" <overview>\n" +
" <protein-existence value=\"Evidence_at_protein_level\"/>\n" +
" <protein-name-list>\n" +
" <recommended-name>\n" +
" <protein-name qualifier=\"full\">Insulin</protein-name>\n" +
" </recommended-name>\n" +
" <alternative-name-list/>\n" +
" </protein-name-list>\n" +
" <chain-list>\n";
String expectedXmlSuffixOutput =
" </chain-list>\n" +
" <gene-list>\n" +
" <gene>\n" +
" <gene-name type=\"primary\">INS</gene-name>\n" +
" </gene>\n" +
" </gene-list>\n" +
" <family-list>\n" +
" <family family-type=\"Family\">\n" +
" <cv-term accession=\"FA-01869\" terminology=\"uniprot-family-cv\">Insulin</cv-term>\n" +
" </family>\n" +
" </family-list>\n" +
" <history>\n" +
" <entry-history database=\"neXtProt\" integrated=\"2010-03-01\" updated=\"2015-09-06\"/>\n" +
" <entry-history database=\"UniProtKB\" integrated=\"1986-07-21\" updated=\"2015-09-16\" version=\"207\" last-sequence-update=\"1986-07-21\" sequence-version=\"1\"/>\n" +
" </history>\n" +
" </overview>\n" +
" </entry>\n" +
" </entry-list>\n" +
" <copyright>\n" +
" Copyrighted by the SIB Swiss Institute of Bioinformatics.\n" +
" Distributed under the Creative Commons Attribution-NoDerivs License - see http://creativecommons.org/licenses/by-nd/3.0/\n" +
" </copyright>\n" +
"</nextprot-export>\n";
String expectedXmlOutputAlt1 = expectedXmlPrefixOutput +
" <chain>\n" +
" <recommended-name>\n" +
" <chain-name qualifier=\"full\">Insulin B chain</chain-name>\n" +
" </recommended-name>\n" +
" </chain>\n" +
" <chain>\n" +
" <recommended-name>\n" +
" <chain-name qualifier=\"full\">Insulin A chain</chain-name>\n" +
" </recommended-name>\n" +
" </chain>\n" +
expectedXmlSuffixOutput;
String expectedXmlOutputAlt2 = expectedXmlPrefixOutput +
" <chain>\n" +
" <recommended-name>\n" +
" <chain-name qualifier=\"full\">Insulin A chain</chain-name>\n" +
" </recommended-name>\n" +
" </chain>\n" +
" <chain>\n" +
" <recommended-name>\n" +
" <chain-name qualifier=\"full\">Insulin B chain</chain-name>\n" +
" </recommended-name>\n" +
" </chain>\n" +
expectedXmlSuffixOutput;
Assert.assertTrue(expectedXmlOutputAlt1.equals(out.toString()) || expectedXmlOutputAlt2.equals(out.toString()));
}
}