X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fws%2Fdbsources%2FRemoteFormatTest.java;fp=test%2Fjalview%2Fws%2Fdbsources%2FRemoteFormatTest.java;h=90d4472246f64bd27e65346ae9cfa2d5336cf455;hb=f063821ed0be9c1581af74643a1aa5798731af65;hp=0000000000000000000000000000000000000000;hpb=fd18e2c73cd015d4e38ad91da0e5d7532ff0ef42;p=jalview.git diff --git a/test/jalview/ws/dbsources/RemoteFormatTest.java b/test/jalview/ws/dbsources/RemoteFormatTest.java new file mode 100644 index 0000000..90d4472 --- /dev/null +++ b/test/jalview/ws/dbsources/RemoteFormatTest.java @@ -0,0 +1,121 @@ +package jalview.ws.dbsources; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import jalview.analysis.AlignSeq; +import jalview.bin.Cache; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.DBRefSource; +import jalview.datamodel.SequenceI; +import jalview.ext.ensembl.EnsemblGenomes; +import jalview.fts.api.FTSData; +import jalview.fts.api.FTSDataColumnI; +import jalview.fts.api.FTSRestClientI; +import jalview.fts.core.FTSRestRequest; +import jalview.fts.core.FTSRestResponse; +import jalview.fts.service.uniprot.UniProtFTSRestClient; +import jalview.ws.SequenceFetcher; +import jalview.ws.seqfetcher.DbSourceProxy; + +import java.util.ArrayList; +import java.util.List; + +import org.testng.annotations.BeforeTest; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +/** + * A class to verify that remotely fetched data has an expected format and can + * be successfully processed by Jalview. This is intended as a first line of + * defence and early warning of service affecting changes to data fetched + * externally. + *

+ * This is class is not intended to cover remote services e.g. alignment. Nor + * should it duplicate tests already provided by other classes (such as + * PDBFTSRestClientTest). Or maybe we will relocate those tests here... + */ +public class RemoteFormatTest +{ + SequenceFetcher sf; + + @BeforeTest(alwaysRun = true) + public void setUp() throws Exception + { + Cache.loadProperties("test/jalview/io/testProps.jvprops"); + // ensure 'add annotation from structure' is selected + Cache.applicationProperties.setProperty("STRUCT_FROM_PDB", + Boolean.TRUE.toString()); + Cache.applicationProperties.setProperty("ADD_SS_ANN", + Boolean.TRUE.toString()); + + sf = new SequenceFetcher(false); + } + + @DataProvider(name = "AccessionData") + protected Object[][] getAccessions() + { + return new Object[][] { { DBRefSource.UNIPROT, "P30419" }, + { DBRefSource.PDB, "1QIP" }, { DBRefSource.EMBL, "X53828" }, + { DBRefSource.EMBLCDS, "CAA37824" }, + { DBRefSource.ENSEMBL, "ENSG00000157764" }, + { new EnsemblGenomes().getDbSource(), "DDB_G0283883" }, + { new PfamFull().getDbSource(), "PF03760" }, + { new PfamSeed().getDbSource(), "PF03760" }, + { new RfamSeed().getDbSource(), "RF00014" } }; + } + + @Test(groups = "Network", dataProvider = "AccessionData") + public void testFetchAccession(String dbSource, String accessionId) + throws Exception + { + System.out.println("Fetching " + accessionId + " from " + dbSource); + List sps = sf.getSourceProxy(dbSource); + assertFalse(sps.isEmpty()); + AlignmentI al = sps.get(0).getSequenceRecords(accessionId); + assertNotNull(al); + assertTrue(al.getHeight() > 0); + SequenceI sq = al.getSequenceAt(0); + // suppress this check as only Uniprot and PDB acquire PDB refs + // assertTrue(sq.getAllPDBEntries().size() > 0, "No PDBEntry on sequence."); + assertTrue(sq.getDBRefs().length > 0, "No DBRef on sequence."); + // suppress this test as only certain databases provide 'primary' dbrefs + // assertFalse(sq.getPrimaryDBRefs().isEmpty()); + int length = AlignSeq.extractGaps("-. ", sq.getSequenceAsString()) + .length(); + assertEquals(sq.getEnd() - sq.getStart() + 1, length, + "Sequence start/end doesn't match number of residues in sequence"); + } + + @Test(groups = { "Network" }) + public void testUniprotFreeTextSearch() throws Exception + { + List wantedFields = new ArrayList(); + FTSRestClientI client = UniProtFTSRestClient.getInstance(); + wantedFields.add(client.getDataColumnByNameOrCode("id")); + wantedFields.add(client.getDataColumnByNameOrCode("entry name")); + wantedFields.add(client.getDataColumnByNameOrCode("organism")); + wantedFields.add(client.getDataColumnByNameOrCode("reviewed")); // Status + wantedFields.add(client.getDataColumnByNameOrCode("length")); + + FTSRestRequest request = new FTSRestRequest(); + request.setAllowEmptySeq(false); + request.setResponseSize(100); + request.setFieldToSearchBy("Search All"); + request.setSearchTerm("metanephrops"); // lobster! + request.setWantedFields(wantedFields); + + FTSRestResponse response; + response = client.executeRequest(request); + assertTrue(response.getNumberOfItemsFound() > 20); + assertTrue(response.getSearchSummary() != null); + assertTrue(response.getSearchSummary().size() > 20); + // verify we successfully filtered out the header row (JAL-2485) + FTSData header = response.getSearchSummary().iterator().next(); + assertFalse( + header.getSummaryData()[0].toString().equalsIgnoreCase("Entry"), + "Failed to filter out summary header row"); + } +}