package jalview.ws.dbsources;
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.bin.Cache;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
import jalview.datamodel.DBRefSource;
import jalview.datamodel.SequenceI;
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.BeforeMethod;
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;
@Test(groups = "Network")
public void testFetchUniprot() throws Exception
{
List sps = sf.getSourceProxy(DBRefSource.UNIPROT);
assertFalse(sps.isEmpty());
AlignmentI response = sps.get(0).getSequenceRecords("P30419");
assertNotNull(response);
assertEquals(response.getHeight(), 1);
SequenceI sq = response.getSequenceAt(0);
assertTrue("No PDBEntry on sequence.", sq.getAllPDBEntries().size() > 0);
assertTrue("No DBRef on sequence.", sq.getDBRefs().length > 0);
List dbr = sq.getPrimaryDBRefs();
assertFalse(dbr.isEmpty());
assertEquals(
"Sequence start/end doesn't match number of residues in sequence",
sq.getEnd() - sq.getStart() + 1, sq.getLength());
}
@Test(groups = "Network")
public void testFetchPdb()
{
// 1QIP
}
@Test(groups = "Network")
public void testFetchEmbl()
{
// X53828
}
@Test(groups = "Network")
public void testFetchEmblCDS()
{
// CAA37824
}
@Test(groups = "Network")
public void testFetchEnsembl()
{
// ENSG00000157764
}
@Test(groups = "Network")
public void testFetchEnsemblGenomes()
{
// DDB_G0283883
}
@Test(groups = "Network")
public void testFetchPfamSeed()
{
// PF03760
}
@Test(groups = "Network")
public void testFetchPfamFull()
{
// PF03760
}
@Test(groups = "Network")
public void testFetchRfamSeed()
{
// RF00014
}
@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("Failed to filter out summary header row",
header.getSummaryData()[0].toString().equalsIgnoreCase("Entry"));
}
@BeforeMethod(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);
}
}