Clover icon

Coverage Report

  1. Project Clover database Thu Aug 13 2020 12:04:21 BST
  2. Package jalview.ws.dbsources

File RemoteFormatTest.java

 

Code metrics

0
35
4
1
121
93
4
0.11
8.75
4
1

Classes

Class Line # Actions
RemoteFormatTest 40 35 4
0.1282051412.8%
 

Contributing tests

No tests hitting this source file were found.

Source view

1    package jalview.ws.dbsources;
2   
3    import static org.testng.Assert.assertEquals;
4    import static org.testng.Assert.assertFalse;
5    import static org.testng.Assert.assertNotNull;
6    import static org.testng.Assert.assertTrue;
7   
8    import jalview.analysis.AlignSeq;
9    import jalview.bin.Cache;
10    import jalview.datamodel.AlignmentI;
11    import jalview.datamodel.DBRefSource;
12    import jalview.datamodel.SequenceI;
13    import jalview.ext.ensembl.EnsemblGenomes;
14    import jalview.fts.api.FTSData;
15    import jalview.fts.api.FTSDataColumnI;
16    import jalview.fts.api.FTSRestClientI;
17    import jalview.fts.core.FTSRestRequest;
18    import jalview.fts.core.FTSRestResponse;
19    import jalview.fts.service.uniprot.UniProtFTSRestClient;
20    import jalview.ws.SequenceFetcher;
21    import jalview.ws.seqfetcher.DbSourceProxy;
22   
23    import java.util.ArrayList;
24    import java.util.List;
25   
26    import org.testng.annotations.BeforeTest;
27    import org.testng.annotations.DataProvider;
28    import org.testng.annotations.Test;
29   
30    /**
31    * A class to verify that remotely fetched data has an expected format and can
32    * be successfully processed by Jalview. This is intended as a first line of
33    * defence and early warning of service affecting changes to data fetched
34    * externally.
35    * <p>
36    * This is class is not intended to cover remote services e.g. alignment. Nor
37    * should it duplicate tests already provided by other classes (such as
38    * PDBFTSRestClientTest). Or maybe we will relocate those tests here...
39    */
 
40    public class RemoteFormatTest
41    {
42    SequenceFetcher sf;
43   
 
44  1 toggle @BeforeTest(alwaysRun = true)
45    public void setUp() throws Exception
46    {
47  1 Cache.loadProperties("test/jalview/io/testProps.jvprops");
48    // ensure 'add annotation from structure' is selected
49  1 Cache.applicationProperties.setProperty("STRUCT_FROM_PDB",
50    Boolean.TRUE.toString());
51  1 Cache.applicationProperties.setProperty("ADD_SS_ANN",
52    Boolean.TRUE.toString());
53   
54  1 sf = new SequenceFetcher();
55    }
56   
 
57  0 toggle @DataProvider(name = "AccessionData")
58    protected Object[][] getAccessions()
59    {
60  0 return new Object[][] { { DBRefSource.UNIPROT, "P30419" },
61    { DBRefSource.PDB, "1QIP" }, { DBRefSource.EMBL, "X53828" },
62    { DBRefSource.EMBLCDS, "CAA37824" },
63    { DBRefSource.ENSEMBL, "ENSG00000157764" },
64    { new EnsemblGenomes().getDbSource(), "DDB_G0283883" },
65    { new PfamFull().getDbSource(), "PF03760" },
66    { new PfamSeed().getDbSource(), "PF03760" },
67    { new RfamSeed().getDbSource(), "RF00014" } };
68    }
69   
 
70  0 toggle @Test(groups = "Network", dataProvider = "AccessionData")
71    public void testFetchAccession(String dbSource, String accessionId)
72    throws Exception
73    {
74  0 System.out.println("Fetching " + accessionId + " from " + dbSource);
75  0 List<DbSourceProxy> sps = sf.getSourceProxy(dbSource);
76  0 assertFalse(sps.isEmpty());
77  0 AlignmentI al = sps.get(0).getSequenceRecords(accessionId);
78  0 assertNotNull(al);
79  0 assertTrue(al.getHeight() > 0);
80  0 SequenceI sq = al.getSequenceAt(0);
81    // suppress this check as only Uniprot and PDB acquire PDB refs
82    // assertTrue(sq.getAllPDBEntries().size() > 0, "No PDBEntry on sequence.");
83  0 assertTrue(sq.getDBRefs().size() > 0, "No DBRef on sequence.");
84    // suppress this test as only certain databases provide 'primary' dbrefs
85    // assertFalse(sq.getPrimaryDBRefs().isEmpty());
86  0 int length = AlignSeq.extractGaps("-. ", sq.getSequenceAsString())
87    .length();
88  0 assertEquals(sq.getEnd() - sq.getStart() + 1, length,
89    "Sequence start/end doesn't match number of residues in sequence");
90    }
91   
 
92  0 toggle @Test(groups = { "Network" })
93    public void testUniprotFreeTextSearch() throws Exception
94    {
95  0 List<FTSDataColumnI> wantedFields = new ArrayList<>();
96  0 FTSRestClientI client = UniProtFTSRestClient.getInstance();
97  0 wantedFields.add(client.getDataColumnByNameOrCode("id"));
98  0 wantedFields.add(client.getDataColumnByNameOrCode("entry name"));
99  0 wantedFields.add(client.getDataColumnByNameOrCode("organism"));
100  0 wantedFields.add(client.getDataColumnByNameOrCode("reviewed")); // Status
101  0 wantedFields.add(client.getDataColumnByNameOrCode("length"));
102   
103  0 FTSRestRequest request = new FTSRestRequest();
104  0 request.setAllowEmptySeq(false);
105  0 request.setResponseSize(100);
106  0 request.setFieldToSearchBy("Search All");
107  0 request.setSearchTerm("metanephrops"); // lobster!
108  0 request.setWantedFields(wantedFields);
109   
110  0 FTSRestResponse response;
111  0 response = client.executeRequest(request);
112  0 assertTrue(response.getNumberOfItemsFound() > 20);
113  0 assertTrue(response.getSearchSummary() != null);
114  0 assertTrue(response.getSearchSummary().size() > 20);
115    // verify we successfully filtered out the header row (JAL-2485)
116  0 FTSData header = response.getSearchSummary().iterator().next();
117  0 assertFalse(
118    header.getSummaryData()[0].toString().equalsIgnoreCase("Entry"),
119    "Failed to filter out summary header row");
120    }
121    }