1 package jalview.ws.dbsources;
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;
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;
23 import java.util.ArrayList;
24 import java.util.List;
26 import org.testng.annotations.BeforeTest;
27 import org.testng.annotations.DataProvider;
28 import org.testng.annotations.Test;
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
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...
40 public class RemoteFormatTest
44 @BeforeTest(alwaysRun = true)
45 public void setUp() throws Exception
47 Cache.loadProperties("test/jalview/io/testProps.jvprops");
48 // ensure 'add annotation from structure' is selected
49 Cache.applicationProperties.setProperty("STRUCT_FROM_PDB",
50 Boolean.TRUE.toString());
51 Cache.applicationProperties.setProperty("ADD_SS_ANN",
52 Boolean.TRUE.toString());
54 sf = new SequenceFetcher(false);
57 @DataProvider(name = "AccessionData")
58 protected Object[][] getAccessions()
60 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" } };
70 @Test(groups = "Network", dataProvider = "AccessionData")
71 public void testFetchAccession(String dbSource, String accessionId)
74 System.out.println("Fetching " + accessionId + " from " + dbSource);
75 List<DbSourceProxy> sps = sf.getSourceProxy(dbSource);
76 assertFalse(sps.isEmpty());
77 AlignmentI al = sps.get(0).getSequenceRecords(accessionId);
79 assertTrue(al.getHeight() > 0);
80 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 assertTrue(sq.getDBRefs().length > 0, "No DBRef on sequence.");
84 // suppress this test as only certain databases provide 'primary' dbrefs
85 // assertFalse(sq.getPrimaryDBRefs().isEmpty());
86 int length = AlignSeq.extractGaps("-. ", sq.getSequenceAsString())
88 assertEquals(sq.getEnd() - sq.getStart() + 1, length,
89 "Sequence start/end doesn't match number of residues in sequence");
92 @Test(groups = { "Network" })
93 public void testUniprotFreeTextSearch() throws Exception
95 List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
96 FTSRestClientI client = UniProtFTSRestClient.getInstance();
97 wantedFields.add(client.getDataColumnByNameOrCode("id"));
98 wantedFields.add(client.getDataColumnByNameOrCode("entry name"));
99 wantedFields.add(client.getDataColumnByNameOrCode("organism"));
100 wantedFields.add(client.getDataColumnByNameOrCode("reviewed")); // Status
101 wantedFields.add(client.getDataColumnByNameOrCode("length"));
103 FTSRestRequest request = new FTSRestRequest();
104 request.setAllowEmptySeq(false);
105 request.setResponseSize(100);
106 request.setFieldToSearchBy("Search All");
107 request.setSearchTerm("metanephrops"); // lobster!
108 request.setWantedFields(wantedFields);
110 FTSRestResponse response;
111 response = client.executeRequest(request);
112 assertTrue(response.getNumberOfItemsFound() > 20);
113 assertTrue(response.getSearchSummary() != null);
114 assertTrue(response.getSearchSummary().size() > 20);
115 // verify we successfully filtered out the header row (JAL-2485)
116 FTSData header = response.getSearchSummary().iterator().next();
118 header.getSummaryData()[0].toString().equalsIgnoreCase("Entry"),
119 "Failed to filter out summary header row");