/************************************************************************* * * * This file is part of the 20n/act project. * * 20n/act enables DNA prediction for synthetic biology/bioengineering. * * Copyright (C) 2017 20n Labs, Inc. * * * * Please direct all queries to act@20n.com. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program 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 General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see <http://www.gnu.org/licenses/>. * * * *************************************************************************/ package act.installer.sequence; import act.server.MongoDB; import act.shared.Organism; import act.shared.Reaction; import act.shared.Seq; import act.shared.helpers.MongoDBToJSON; import com.act.biointerpretation.Utils.OrgMinimalPrefixGenerator; import com.act.biointerpretation.test.util.MockedMongoDB; import com.act.utils.parser.UniprotInterpreter; import com.mongodb.DBObject; import org.json.JSONArray; import org.json.JSONObject; import org.junit.Before; import org.junit.Test; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; public class UniprotSeqEntryTest { private ArrayList<UniprotSeqEntry> seqEntries; private ArrayList<String> sequences; @Before public void setUp() throws Exception { MockedMongoDB mockAPI = new MockedMongoDB(); Map<Long, String> organismNames = new HashMap<>(); organismNames.put(4000000399L, "Arabidopsis thaliana"); // manually assemble an Org Iterator since you can't mock DBCollection in getDbIteratorOverOrgs() List<Organism> orgs = new ArrayList<>(); for (Map.Entry<Long, String> orgName : organismNames.entrySet()) { orgs.add(new Organism(orgName.getKey(), orgName.getValue())); } Iterator<Organism> orgIterator = orgs.iterator(); OrgMinimalPrefixGenerator prefixGenerator = new OrgMinimalPrefixGenerator(orgIterator); Map<String, String> minimalPrefixMapping = prefixGenerator.getMinimalPrefixMapping(); // only information needed for these set of tests is a db with organism id's. mockAPI.installMocks(new ArrayList<Reaction>(), new ArrayList<Seq>(), organismNames, new HashMap<>()); MongoDB mockDb = mockAPI.getMockMongoDB(); seqEntries = new ArrayList<>(); sequences = new ArrayList<>(); UniprotInterpreter upProtein = new UniprotInterpreter(new File(this.getClass().getResource("uniprot_test_1.xml").getFile())); upProtein.init(); sequences.add(upProtein.getSequence()); UniprotSeqEntry seqEntry = new UniprotSeqEntryFactory().createFromDocumentReference(upProtein.getXmlDocument(), mockDb, minimalPrefixMapping); seqEntries.add(seqEntry); } @Test public void testMetadata() { ArrayList<DBObject> metadatas = new ArrayList<>(); List<String> uniprotAccessions = Arrays.asList("P06525", "O04080", "O04713", "O04717", "O04868", "O23821", "Q8LA61", "Q94AY6", "Q9CAZ2", "Q9CAZ3", "Q9SX08"); List<String> genbankNucleotideAccessions = Arrays.asList("M12196", "X77943", "D84240", "D84241", "D84242", "D84243", "D84244", "D84245", "D84246", "D84247", "D84248", "D84249", "D63460", "D63461", "D63462", "D63463", "D63464", "AF110456", "AB048394", "AB048395", "AY536888", "AC002291", "CP002684", "AY045612", "AY090330", "AY088010", "AF056557"); List<String> genbankProteinAccessions = Arrays.asList("AAA32728", "CAA54911", "BAA19615", "BAA19616", "BAA19617", "BAA19618", "BAA19619", "BAA19620", "BAA19621", "BAA19622", "BAA19623", "BAA19624", "BAA22983", "BAA22979", "BAA22980", "BAA22981", "BAA22982", "AAF23554", "BAB32568", "BAB32569", "AAS45601", "AAC00625", "AEE35937", "AAK73970", "AAL90991", "AAM65556", "AAD41572"); JSONObject accessions = new JSONObject(); accessions.put(Seq.AccType.uniprot.toString(), new JSONArray(uniprotAccessions)); accessions.put(Seq.AccType.genbank_nucleotide.toString(), new JSONArray(genbankNucleotideAccessions)); accessions.put(Seq.AccType.genbank_protein.toString(), new JSONArray(genbankProteinAccessions)); JSONObject obj = new JSONObject(); obj.put("xref", new JSONObject()); obj.put("name", "ADH1"); obj.put("synonyms", Collections.singletonList("ADH")); obj.put("product_names", Arrays.asList("Alcohol dehydrogenase class-P", "Alc Dehyd")); obj.put("accession", accessions); obj.put("catalytic_activity", "An alcohol + NAD(+) = an aldehyde or ketone + NADH."); metadatas.add(MongoDBToJSON.conv(obj)); assertEquals("tests whether metadata is extracted accurately", metadatas.get(0), seqEntries.get(0).getMetadata()); } @Test public void testAccession() { List<String> uniprotAccessions = Arrays.asList("P06525", "O04080", "O04713", "O04717", "O04868", "O23821", "Q8LA61", "Q94AY6", "Q9CAZ2", "Q9CAZ3", "Q9SX08"); List<String> genbankNucleotideAccessions = Arrays.asList("M12196", "X77943", "D84240", "D84241", "D84242", "D84243", "D84244", "D84245", "D84246", "D84247", "D84248", "D84249", "D63460", "D63461", "D63462", "D63463", "D63464", "AF110456", "AB048394", "AB048395", "AY536888", "AC002291", "CP002684", "AY045612", "AY090330", "AY088010", "AF056557"); List<String> genbankProteinAccessions = Arrays.asList("AAA32728", "CAA54911", "BAA19615", "BAA19616", "BAA19617", "BAA19618", "BAA19619", "BAA19620", "BAA19621", "BAA19622", "BAA19623", "BAA19624", "BAA22983", "BAA22979", "BAA22980", "BAA22981", "BAA22982", "AAF23554", "BAB32568", "BAB32569", "AAS45601", "AAC00625", "AEE35937", "AAK73970", "AAL90991", "AAM65556", "AAD41572"); JSONObject accessions = new JSONObject(); accessions.put(Seq.AccType.uniprot.toString(), new JSONArray(uniprotAccessions)); accessions.put(Seq.AccType.genbank_nucleotide.toString(), new JSONArray(genbankNucleotideAccessions)); accessions.put(Seq.AccType.genbank_protein.toString(), new JSONArray(genbankProteinAccessions)); assertEquals("tests whether accession ID is extracted accurately", accessions.toString(), seqEntries.get(0).getAccession().toString()); } @Test public void testGeneName() { assertEquals("tests whether gene name is extracted accurately", "ADH1", seqEntries.get(0).getGeneName()); } @Test public void testGeneSynonyms() { assertEquals("tests whether gene synonyms are extracted accurately", Collections.singletonList("ADH"), seqEntries.get(0).getGeneSynonyms()); } @Test public void testProductName() { assertEquals("tests whether product names are extracted accurately", Arrays.asList("Alcohol dehydrogenase class-P", "Alc Dehyd"), seqEntries.get(0).getProductName()); } @Test public void testCatalyticActivity() { assertEquals("tests whether catalytic activity is extracted accurately", "An alcohol + NAD(+) = an aldehyde or ketone + NADH.", seqEntries.get(0).getCatalyticActivity()); } @Test public void testOrgId() { assertEquals("tests whether organism ids are extracted accurately", (Long) 4000000399L, seqEntries.get(0).getOrgId()); } @Test public void testOrg() { assertEquals("tests whether organism names are extracted accurately", "Arabidopsis thaliana", seqEntries.get(0).getOrg()); } @Test public void testSeq() { assertEquals("tests whether sequences are extracted accurately", sequences.get(0), seqEntries.get(0).getSeq()); } @Test public void testEc() { assertEquals("tests whether ec_numbers are extracted accurately", "1.1.1.1", seqEntries.get(0).getEc()); } @Test public void testReferences() { List<JSONObject> pmidRefs = new ArrayList<>(); List<String> pmids = Arrays.asList("2937058", "7851777", "8844162", "8587508", "11018155", "11158375", "11130712", "14593172", "10382288", "3377754", "2277648", "12231733", "8787023", "9522467", "9611167", "9880346", "11402191", "11402202", "11987307", "12509334", "12857811", "16055689", "18433157", "18441225", "19245862", "20508152", "22223895", "23707506", "24395201", "26566261", "25447145"); for (String pmid : pmids) { JSONObject obj = new JSONObject(); obj.put("val", pmid); obj.put("src", "PMID"); pmidRefs.add(obj); } assertEquals("tests whether PMIDs were assigned accurately", pmidRefs.toString(), seqEntries.get(0).getRefs().toString()); } }