X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fws%2Fseqfetcher%2FDbRefFetcherTest.java;h=6769d39d0f597fa131967b8be71aa3423603e207;hb=4fb4ce058d2c40f990e99be102a54095d98fa87f;hp=9e5639d2ae9c51c0e342ae6847ecc9a5fdedfdf1;hpb=47168f025aefdaa044802bd5f8f510ffe43a4808;p=jalview.git diff --git a/test/jalview/ws/seqfetcher/DbRefFetcherTest.java b/test/jalview/ws/seqfetcher/DbRefFetcherTest.java index 9e5639d..6769d39 100644 --- a/test/jalview/ws/seqfetcher/DbRefFetcherTest.java +++ b/test/jalview/ws/seqfetcher/DbRefFetcherTest.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -20,76 +20,238 @@ */ package jalview.ws.seqfetcher; -import static org.junit.Assert.*; - -import java.util.ArrayList; -import java.util.List; +import static org.testng.Assert.assertNotEquals; +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertTrue; +import jalview.analysis.CrossRef; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.DBRefEntry; import jalview.datamodel.DBRefSource; +import jalview.datamodel.FeatureProperties; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; +import jalview.gui.JvOptionPane; +import jalview.util.DBRefUtils; import jalview.ws.DBRefFetcher; import jalview.ws.SequenceFetcher; -import jalview.ws.dbsources.das.api.jalviewSourceI; +import jalview.ws.dbsources.EBIAlfaFold; +import jalview.ws.dbsources.Pdb; +import jalview.ws.dbsources.Uniprot; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.Assert; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; /** * @author jimp - * + * */ public class DbRefFetcherTest { + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + /** * @throws java.lang.Exception */ - @BeforeClass + @BeforeClass(alwaysRun = true) public static void setUpBeforeClass() throws Exception { + jalview.bin.Console.initLogger(); } /** * @throws java.lang.Exception */ - @AfterClass + @AfterClass(alwaysRun = true) public static void tearDownAfterClass() throws Exception { } - @Test - public void testStandardProtDbs() + @Test(groups = { "Network" }) + public void checkUniprotCanonicalFlagSet() { - String[] defdb = DBRefSource.PROTEINDBS; - List srces = new ArrayList(); - for (String ddb : defdb) - { - SequenceFetcher sfetcher= new SequenceFetcher(); - List srcesfordb = sfetcher.getSourceProxy(ddb); - - if (srcesfordb != null) + // TODO - mock this - for moment it is a live request. + SequenceI uniprotSeq = new Sequence("FER1_SPIOL", + "MAATTTTMMGMATTFVPKPQAPPMMAALPSNTGRSLFGLKTGSRGGRMTMAAYKVTLVTPTGNVEFQCPDDV" + + "YILDAAEEEGIDLPYSCRAGSCSSCAGKLKTGSLNQDDQSFLDDDQIDEGWVLTCAAYPVSDVTIETHKEEE" + + "LTA"); + DBRefFetcher dbr = new DBRefFetcher(new SequenceI[] { uniprotSeq }); + dbr.fetchDBRefs(true); + List primRefs = uniprotSeq.getPrimaryDBRefs(); + assertNotNull(primRefs); + assertTrue(primRefs.size() > 0); + boolean canonicalUp = false; + for (DBRefEntry ref : primRefs) { - srces.addAll(srcesfordb); + assertEquals(DBRefSource.UNIPROT, ref.getCanonicalSourceName()); + canonicalUp |= ref.isCanonical(); } + assertTrue("No Canonical Uniprot reference detected", canonicalUp); } - DbSourceProxy uniprot=null; - int i=0; - // append the selected sequence sources to the default dbs - for (DbSourceProxy s:srces) + + /** + * Tests that standard protein database sources include Uniprot (as the first) + * and also PDB. (Additional sources are dependent on availability of DAS + * services.) + */ + @Test(groups = { "Functional" }) + public void testStandardProtDbs() { - if (s.getDbSource().equalsIgnoreCase(DBRefSource.UNIPROT)) + List defdb = new ArrayList(); + defdb.addAll(Arrays.asList(DBRefSource.PROTEINDBS)); + defdb.add(DBRefSource.PDB); + List srces = new ArrayList(); + SequenceFetcher sfetcher = new SequenceFetcher(); + boolean pdbFound = false; + + for (String ddb : defdb) { - i++; + List srcesfordb = sfetcher.getSourceProxy(ddb); + + if (srcesfordb != null) + { + // TODO is this right? get duplicate entries + srces.addAll(srcesfordb); + } } - - if (s instanceof jalview.ws.dbsources.Uniprot) + + int i = 0; + int uniprotPos = -1; + for (DbSourceProxy s : srces) { - uniprot = s; - break; + if (s instanceof Uniprot && uniprotPos == -1) + { + uniprotPos = i; + } + if (s instanceof Pdb) + { + pdbFound = true; + } + i++; } + + assertTrue("Failed to find Uniprot source as first source amongst " + + srces.size() + " sources (source was at position " + + uniprotPos + ")", uniprotPos == 0); + assertTrue("Failed to find PDB source amongst " + srces.size() + + " sources", pdbFound); + } + + /** + * Tests retrieval of one entry from EMBL. Test is dependent on availability + * of network and the EMBL service. + * + * @throws Exception + */ + @Test(groups = { "External" }) + public void testEmblUniprotProductRecovery() throws Exception + { + String retrievalId = "V00488"; + DbSourceProxy embl = new SequenceFetcher() + .getSourceProxy(DBRefSource.EMBL).get(0); + assertNotNull("Couldn't find the EMBL retrieval client", embl); + verifyProteinNucleotideXref(retrievalId, embl); + } + + /** + * Tests retrieval of one entry from EMBLCDS. Test is dependent on + * availability of network and the EMBLCDS service. + * + * @throws Exception + */ + @Test(groups = { "External" }) + public void testEmblCDSUniprotProductRecovery() throws Exception + { + String retrievalId = "AAH29712"; + DbSourceProxy embl = new SequenceFetcher() + .getSourceProxy(DBRefSource.EMBLCDS).get(0); + assertNotNull("Couldn't find the EMBL retrieval client", embl); + verifyProteinNucleotideXref(retrievalId, embl); } - - assertTrue("Failed to find Uniprot source as first source amongst "+srces.size()+" sources (source was at position "+i+")", uniprot!=null && i<2); + + /** + * Helper method to perform database retrieval and verification of results. + * + * @param retrievalId + * @param embl + * @throws Exception + */ + private void verifyProteinNucleotideXref(String retrievalId, + DbSourceProxy embl) throws Exception + { + AlignmentI alsq = embl.getSequenceRecords(retrievalId); + assertNotNull("Couldn't find the EMBL record " + retrievalId, alsq); + assertEquals("Didn't retrieve right number of records", 1, + alsq.getHeight()); + SequenceI seq = alsq.getSequenceAt(0); + assertEquals("Wrong sequence name", + embl.getDbSource() + "|" + retrievalId, seq.getName()); + List sfs = seq.getSequenceFeatures(); + assertFalse("Sequence features missing", sfs.isEmpty()); + assertTrue("Feature not CDS", FeatureProperties + .isCodingFeature(embl.getDbSource(), sfs.get(0).getType())); + assertEquals(embl.getDbSource(), sfs.get(0).getFeatureGroup()); + List dr = DBRefUtils.selectRefs(seq.getDBRefs(), + new String[] + { DBRefSource.UNIPROT }); + assertNotNull(dr); + assertEquals("Expected a single Uniprot cross reference", 1, dr.size()); + assertEquals("Expected cross reference map to be one amino acid", + dr.get(0).getMap().getMappedWidth(), 1); + assertEquals("Expected local reference map to be 3 nucleotides", + dr.get(0).getMap().getWidth(), 3); + AlignmentI sprods = new CrossRef(alsq.getSequencesArray(), alsq) + .findXrefSequences(dr.get(0).getSource(), true); + assertNotNull( + "Couldn't recover cross reference sequence from dataset. Was it ever added ?", + sprods); + assertEquals("Didn't xref right number of records", 1, + sprods.getHeight()); + SequenceI proteinSeq = sprods.getSequenceAt(0); + assertEquals(proteinSeq.getSequenceAsString(), + dr.get(0).getMap().getTo().getSequenceAsString()); + assertEquals(dr.get(0).getSource() + "|" + dr.get(0).getAccessionId(), + proteinSeq.getName()); + } + + /** + * Tests retrieval of one entry from EMBLCDS. Test is dependent on + * availability of network and the EMBLCDS service. + * + * @throws Exception + */ + @Test(groups = { "External" }) + public void testAlphaFoldClien() throws Exception + { + DbSourceProxy alphafold = new EBIAlfaFold(); + AlignmentI resp = alphafold.getSequenceRecords(alphafold.getTestQuery()); + assertNotNull(resp); + assertEquals("One sequence only",resp.getHeight(), 1); + for (AlignmentAnnotation aa:resp.getAlignmentAnnotation()) { + if (aa.graph == AlignmentAnnotation.CUSTOMRENDERER) + { + assertTrue("Contact map didn't provide valid contact",resp.getContactListFor(aa, 1).getContactAt(1)!=-1d); + // test passes + return; + } + } + Assert.fail(); } }