c390efca0814b7c50ae8ae451f875d81a9fc0ce4
[jalview.git] / test / jalview / ws / dbsources / RemoteFormatTest.java
1 package jalview.ws.dbsources;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertFalse;
5 import static org.testng.AssertJUnit.assertNotNull;
6 import static org.testng.AssertJUnit.assertTrue;
7
8 import jalview.bin.Cache;
9 import jalview.datamodel.AlignmentI;
10 import jalview.datamodel.DBRefEntry;
11 import jalview.datamodel.DBRefSource;
12 import jalview.datamodel.SequenceI;
13 import jalview.fts.api.FTSData;
14 import jalview.fts.api.FTSDataColumnI;
15 import jalview.fts.api.FTSRestClientI;
16 import jalview.fts.core.FTSRestRequest;
17 import jalview.fts.core.FTSRestResponse;
18 import jalview.fts.service.uniprot.UniProtFTSRestClient;
19 import jalview.ws.SequenceFetcher;
20 import jalview.ws.seqfetcher.DbSourceProxy;
21
22 import java.util.ArrayList;
23 import java.util.List;
24
25 import org.testng.annotations.BeforeMethod;
26 import org.testng.annotations.Test;
27
28 /**
29  * A class to verify that remotely fetched data has an expected format and can
30  * be successfully processed by Jalview. This is intended as a first line of
31  * defence and early warning of service affecting changes to data fetched
32  * externally.
33  * <p>
34  * This is class is not intended to cover remote services e.g. alignment. Nor
35  * should it duplicate tests already provided by other classes (such as
36  * PDBFTSRestClientTest). Or maybe we will relocate those tests here...
37  */
38 public class RemoteFormatTest
39 {
40   SequenceFetcher sf;
41
42   @Test(groups = "Network")
43   public void testFetchUniprot() throws Exception
44   {
45     List<DbSourceProxy> sps = sf.getSourceProxy(DBRefSource.UNIPROT);
46     assertFalse(sps.isEmpty());
47     AlignmentI response = sps.get(0).getSequenceRecords("P30419");
48     assertNotNull(response);
49     assertEquals(response.getHeight(), 1);
50     SequenceI sq = response.getSequenceAt(0);
51     assertTrue("No PDBEntry on sequence.", sq.getAllPDBEntries().size() > 0);
52     assertTrue("No DBRef on sequence.", sq.getDBRefs().length > 0);
53     List<DBRefEntry> dbr = sq.getPrimaryDBRefs();
54     assertFalse(dbr.isEmpty());
55     assertEquals(
56             "Sequence start/end doesn't match number of residues in sequence",
57             sq.getEnd() - sq.getStart() + 1, sq.getLength());
58   }
59
60   @Test(groups = "Network")
61   public void testFetchPdb()
62   {
63     // 1QIP
64   }
65
66   @Test(groups = "Network")
67   public void testFetchEmbl()
68   {
69     // X53828
70   }
71
72   @Test(groups = "Network")
73   public void testFetchEmblCDS()
74   {
75     // CAA37824
76   }
77
78   @Test(groups = "Network")
79   public void testFetchEnsembl()
80   {
81     // ENSG00000157764
82   }
83
84   @Test(groups = "Network")
85   public void testFetchEnsemblGenomes()
86   {
87     // DDB_G0283883
88   }
89
90   @Test(groups = "Network")
91   public void testFetchPfamSeed()
92   {
93     // PF03760
94   }
95
96   @Test(groups = "Network")
97   public void testFetchPfamFull()
98   {
99     // PF03760
100   }
101
102   @Test(groups = "Network")
103   public void testFetchRfamSeed()
104   {
105     // RF00014
106   }
107
108   @Test(groups = { "Network" })
109   public void testUniprotFreeTextSearch() throws Exception
110   {
111     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
112     FTSRestClientI client = UniProtFTSRestClient.getInstance();
113     wantedFields.add(client.getDataColumnByNameOrCode("id"));
114     wantedFields.add(client.getDataColumnByNameOrCode("entry name"));
115     wantedFields.add(client.getDataColumnByNameOrCode("organism"));
116     wantedFields.add(client.getDataColumnByNameOrCode("reviewed")); // Status
117     wantedFields.add(client.getDataColumnByNameOrCode("length"));
118   
119     FTSRestRequest request = new FTSRestRequest();
120     request.setAllowEmptySeq(false);
121     request.setResponseSize(100);
122     request.setFieldToSearchBy("Search All");
123     request.setSearchTerm("metanephrops"); // lobster!
124     request.setWantedFields(wantedFields);
125   
126     FTSRestResponse response;
127     response = client.executeRequest(request);
128     assertTrue(response.getNumberOfItemsFound() > 20);
129     assertTrue(response.getSearchSummary() != null);
130     assertTrue(response.getSearchSummary().size() > 20);
131     // verify we successfully filtered out the header row (JAL-2485)
132     FTSData header = response.getSearchSummary().iterator().next();
133     assertFalse("Failed to filter out summary header row",
134             header.getSummaryData()[0].toString().equalsIgnoreCase("Entry"));
135   }
136
137   @BeforeMethod(alwaysRun = true)
138   public void setUp() throws Exception
139   {
140     Cache.loadProperties("test/jalview/io/testProps.jvprops");
141     // ensure 'add annotation from structure' is selected
142     Cache.applicationProperties.setProperty("STRUCT_FROM_PDB",
143             Boolean.TRUE.toString());
144     Cache.applicationProperties.setProperty("ADD_SS_ANN",
145             Boolean.TRUE.toString());
146   
147     sf = new SequenceFetcher(false);
148   }
149 }