91a3049d4aaa0e9f9a1ec52d5508aa171002711d
[jalview.git] / test / jalview / fts / threedbeacons / TDBeaconsFTSRestClientTest.java
1 package jalview.fts.threedbeacons;
2
3 import static org.testng.Assert.assertNull;
4 import static org.testng.AssertJUnit.assertEquals;
5 import static org.testng.AssertJUnit.assertTrue;
6
7 import java.net.URL;
8 import java.nio.charset.StandardCharsets;
9 import java.util.ArrayList;
10 import java.util.Collection;
11 import java.util.HashSet;
12 import java.util.List;
13 import java.util.Set;
14
15 import org.testng.Assert;
16 import org.testng.annotations.AfterMethod;
17 import org.testng.annotations.BeforeClass;
18 import org.testng.annotations.BeforeMethod;
19 import org.testng.annotations.Test;
20
21 import jalview.fts.api.FTSDataColumnI;
22 import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
23 import jalview.fts.core.FTSRestClient;
24 import jalview.fts.core.FTSRestRequest;
25 import jalview.fts.core.FTSRestResponse;
26 import jalview.fts.service.threedbeacons.TDBeaconsFTSRestClient;
27 import jalview.gui.JvOptionPane;
28
29 public class TDBeaconsFTSRestClientTest
30 {
31   @BeforeClass(alwaysRun = true)
32   public void setUpJvOptionPane()
33   {
34     JvOptionPane.setInteractiveMode(false);
35     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
36   }
37
38   private FTSRestClient ftsRestClient;
39
40   @BeforeMethod(alwaysRun = true)
41   public void setUp() throws Exception
42   {
43     ftsRestClient = new FTSRestClient()
44     {
45
46       @Override
47       public String getColumnDataConfigFileName()
48       {
49         return "/fts/tdbeacons_data_columns.txt";
50       }
51
52       @Override
53       public FTSRestResponse executeRequest(FTSRestRequest ftsRequest)
54               throws Exception
55       {
56         return null;
57       }
58     };
59   }
60
61   @AfterMethod(alwaysRun = true)
62   public void tearDown() throws Exception
63   {
64   }
65
66   @Test
67   public void getAllDefaulDisplayedDataColumns()
68   {
69     // to change when resources.tdbeacons_data_columns.txt is changed
70     Assert.assertNotNull(
71             ftsRestClient.getAllDefaultDisplayedFTSDataColumns());
72     System.out
73             .println(ftsRestClient.getAllDefaultDisplayedFTSDataColumns());
74     Assert.assertTrue(!ftsRestClient.getAllDefaultDisplayedFTSDataColumns()
75             .isEmpty());
76     Assert.assertEquals(
77             ftsRestClient.getAllDefaultDisplayedFTSDataColumns().size(),
78             11);
79   }
80
81   @Test(groups = { "Functional" })
82   public void getPrimaryKeyColumIndexTest()
83   {
84     Collection<FTSDataColumnI> wantedFields = ftsRestClient
85             .getAllDefaultDisplayedFTSDataColumns();
86     int foundIndex = -1;
87     try
88     {
89       Assert.assertEquals(foundIndex, -1);
90       foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields,
91               false);
92       Assert.assertEquals(foundIndex, 10);
93       foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields,
94               true);
95       Assert.assertEquals(foundIndex, 11);
96     } catch (Exception e)
97     {
98       e.printStackTrace();
99       Assert.fail("Exception thrown while testing...");
100     }
101   }
102
103   @Test(groups = { "Functional" })
104   public void getDataColumnsFieldsAsCommaDelimitedString()
105   {
106     // to change when resources.tdbeacons_data_columns.txt is changed
107     Collection<FTSDataColumnI> wantedFields = ftsRestClient
108             .getAllDefaultDisplayedFTSDataColumns();
109     String actual = ftsRestClient
110             .getDataColumnsFieldsAsCommaDelimitedString(wantedFields);
111     Assert.assertEquals(actual,
112             "model_identifier,provider,model_category,uniprot_start,uniprot_end,resolution,qmean_avg_local_score,coverage,created,entry_name,model_url");
113   }
114
115   @Test(groups = { "Functional" })
116   public void getAllFTSDataColumns()
117   {
118     Collection<FTSDataColumnI> allFields = ftsRestClient
119             .getAllFTSDataColumns();
120     Assert.assertNotNull(allFields);
121     // System.out.println(allFields.size());
122     Assert.assertEquals(allFields.size(), 15);
123   }
124
125   @Test(groups = { "Functional" })
126   public void getSearchableDataColumns()
127   {
128     // to change when resources.tdbeacons_data_columns.txt is changed
129     Collection<FTSDataColumnI> searchableFields = ftsRestClient
130             .getSearchableDataColumns();
131     Assert.assertNotNull(searchableFields);
132     // System.out.println(searchableFields.size());
133     Assert.assertEquals(searchableFields.size(), 1); // only 1: uniprot
134                                                      // accession
135   }
136
137   @Test(groups = { "Functional" })
138   public void getPrimaryKeyColumn()
139   {
140     // to change when resources.tdbeacons_data_columns.txt is changed
141     FTSDataColumnI expectedPKColumn;
142     try
143     {
144       expectedPKColumn = ftsRestClient.getDataColumnByNameOrCode("Url");
145       Assert.assertNotNull(ftsRestClient.getPrimaryKeyColumn());
146       Assert.assertEquals(ftsRestClient.getPrimaryKeyColumn(),
147               expectedPKColumn);
148     } catch (Exception e)
149     {
150       e.printStackTrace();
151       Assert.fail("Exception thrown while testing...");
152     }
153   }
154
155   @Test(groups = { "Functional" })
156   public void getDataColumnByNameOrCode()
157   {
158     try
159     {
160       FTSDataColumnI foundDataCol = ftsRestClient
161               .getDataColumnByNameOrCode("uniprot_accession");
162       Assert.assertNotNull(foundDataCol);
163       Assert.assertEquals(foundDataCol.getName(), "UniProt Accession");
164     } catch (Exception e)
165     {
166       e.printStackTrace();
167       Assert.fail("Exception thrown while testing...");
168     }
169   }
170
171   @Test(groups = { "Functional" })
172   public void getDataColumnGroupById()
173   {
174     FTSDataColumnGroupI foundDataColGroup;
175     try
176     {
177       foundDataColGroup = ftsRestClient.getDataColumnGroupById("g2");
178       Assert.assertNotNull(foundDataColGroup);
179       Assert.assertEquals(foundDataColGroup.getName(), "Quality");
180     } catch (Exception e)
181     {
182       e.printStackTrace();
183     }
184   }
185
186   @Test(groups = { "Functional" })
187   public void getDefaultResponsePageSize()
188   {
189     int defaultResSize = ftsRestClient.getDefaultResponsePageSize();
190     Assert.assertEquals(defaultResSize, 100); // why 100 or 500 ? pdb is 100,
191                                               // uniprot 500
192   }
193
194   @Test(groups = { "Functional" })
195   public void getColumnMinWidthTest()
196   {
197     try
198     {
199       FTSDataColumnI foundDataCol = ftsRestClient
200               .getDataColumnByNameOrCode("uniprot_accession");
201       Assert.assertNotNull(foundDataCol);
202       int actualColMinWidth = foundDataCol.getMinWidth();
203       Assert.assertEquals(actualColMinWidth, 50);
204     } catch (Exception e)
205     {
206       e.printStackTrace();
207       Assert.fail("Exception thrown while testing...");
208     }
209   }
210   // could add test for MaxWidth & PreferedWith
211
212   @Test(groups = { "Functional" })
213   public void getColumnClassTest()
214   {
215     try
216     {
217       FTSDataColumnI foundDataCol = ftsRestClient
218               .getDataColumnByNameOrCode("uniprot_accession");
219       Assert.assertNotNull(foundDataCol);
220       Assert.assertEquals(foundDataCol.getDataType().getDataTypeClass(),
221               String.class);
222       foundDataCol = ftsRestClient.getDataColumnByNameOrCode("id");
223       Assert.assertNotNull(foundDataCol);
224       Assert.assertEquals(foundDataCol.getDataType().getDataTypeClass(),
225               String.class);
226     } catch (Exception e)
227     {
228       e.printStackTrace();
229       Assert.fail("Exception thrown while testing...");
230     }
231   }
232
233   @Test(groups = { "Functional" })
234   public void coverageForEqualsAndHashFunction()
235   {
236     Set<FTSDataColumnI> uniqueSet = new HashSet<FTSDataColumnI>();
237     Collection<FTSDataColumnI> searchableCols = ftsRestClient
238             .getSearchableDataColumns();
239     System.out.println(searchableCols);
240     for (FTSDataColumnI foundCol : searchableCols)
241     {
242       System.out.println(foundCol.toString());
243       uniqueSet.add(foundCol);
244       uniqueSet.add(foundCol);
245     }
246     Assert.assertTrue(!uniqueSet.isEmpty());
247     // Assert.assertEquals(uniqueSet.size(), 22); -> 1 or 2 currently for 3DB
248   }
249
250   @Test(groups = { "Functional" })
251   public void getTDBIdColumIndexTest()
252   {
253     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
254     try
255     {
256       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
257               .getDataColumnByNameOrCode("Model id"));
258       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
259               .getDataColumnByNameOrCode("uniprot_accession"));
260       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
261               .getDataColumnByNameOrCode("entry name"));
262     } catch (Exception e)
263     {
264       e.printStackTrace();
265     }
266     try
267     {
268       assertEquals(4, TDBeaconsFTSRestClient.getInstance()
269               .getPrimaryKeyColumIndex(wantedFields, true));
270       // assertEquals(3, TDBeaconsFTSRestClient.getInstance()
271       // .getPrimaryKeyColumIndex(wantedFields, true));
272     } catch (Exception e)
273     {
274       e.printStackTrace();
275     }
276   }
277
278   private static String mockRequest = "P38398.json";
279
280   private static String mockResponse = "{\"uniprot_entry\":{\"sequence_length\":1863,\"ac\":\"P38398\",\"id\":\"BRCA1_HUMAN\"},\"structures\":[{\"model_identifier\":\"4igk\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2012-12-17\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":1.75,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4igk_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1t15\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2004-04-15\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":1.85,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t15_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"4ifi\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2012-12-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.2,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4ifi_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1t29\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2004-04-20\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.3,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t29_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3pxb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxb_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"4y2g\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2015-02-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4y2g_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1y98\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2004-12-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1y98_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1jnx\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2001-07-26\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1jnx_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3pxa\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.55,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxa_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3k0h\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2009-09-24\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.7,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k0h_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3k0k\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2009-09-24\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.7,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k0k_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1n5o\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2002-11-06\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1n5o_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3pxc\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxc_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3pxd\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxd_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1t2u\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2004-04-22\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t2u_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3k15\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2009-09-25\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.8,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k15_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3pxe\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2010-12-09\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":2.85,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3pxe_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3k16\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2009-09-25\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.0,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3k16_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"4ofb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2014-01-14\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.05,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4ofb_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"3coj\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2008-03-28\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.21,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/3coj_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"7lyb\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2021-03-06\",\"sequence_identity\":100.0,\"uniprot_start\":1,\"uniprot_end\":100,\"resolution\":3.28,\"coverage\":5.37,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/7lyb_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1t2v\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2004-04-22\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.3,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1t2v_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"4y18\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2015-02-06\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.5,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4y18_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"4jlu\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2013-03-13\",\"sequence_identity\":100.0,\"uniprot_start\":1649,\"uniprot_end\":1859,\"resolution\":3.5,\"coverage\":11.33,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4jlu_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"4u4a\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2014-07-23\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":3.51,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/4u4a_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"2ing\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2006-10-07\",\"sequence_identity\":100.0,\"uniprot_start\":1649,\"uniprot_end\":1859,\"resolution\":3.6,\"coverage\":11.33,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/2ing_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"7jzv\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2020-09-02\",\"sequence_identity\":99.0,\"uniprot_start\":2,\"uniprot_end\":104,\"resolution\":3.9,\"coverage\":5.53,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/7jzv_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"6g2i\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2018-03-23\",\"sequence_identity\":100.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"resolution\":5.9,\"coverage\":11.49,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/6g2i_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1jm7\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2001-07-17\",\"sequence_identity\":100.0,\"uniprot_start\":1,\"uniprot_end\":110,\"resolution\":null,\"coverage\":5.9,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1jm7_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"1oqa\",\"model_category\":\"EXPERIMENTALLY DETERMINED\",\"provider\":\"PDBE\",\"created\":\"2003-03-07\",\"sequence_identity\":100.0,\"uniprot_start\":1755,\"uniprot_end\":1863,\"resolution\":null,\"coverage\":5.85,\"model_url\":\"https://www.ebi.ac.uk/pdbe/static/entry/1oqa_updated.cif\",\"model_format\":\"MMCIF\"},{\"model_identifier\":\"6138930b772bfbf9fe34f912\",\"model_category\":\"TEMPLATE-BASED\",\"provider\":\"SWISSMODEL\",\"created\":\"2021-09-08\",\"sequence_identity\":1.0,\"uniprot_start\":1646,\"uniprot_end\":1859,\"coverage\":0.115,\"qmean_version\":\"4.2.0\",\"qmean_avg_local_score\":0.776,\"model_url\":\"https://beta.swissmodel.expasy.org/3d-beacons/uniprot/P38398.pdb?range=1646-1859&template=6g2i.1.K&provider=swissmodel\",\"model_format\":\"PDB\"},{\"model_identifier\":\"6138930b772bfbf9fe34f916\",\"model_category\":\"TEMPLATE-BASED\",\"provider\":\"SWISSMODEL\",\"created\":\"2021-09-08\",\"sequence_identity\":1.0,\"uniprot_start\":1,\"uniprot_end\":103,\"coverage\":0.055,\"qmean_version\":\"4.2.0\",\"qmean_avg_local_score\":0.655,\"model_url\":\"https://beta.swissmodel.expasy.org/3d-beacons/uniprot/P38398.pdb?range=1-103&template=1jm7.1.A&provider=swissmodel\",\"model_format\":\"PDB\"},{\"model_identifier\":\"AF-P38398-F1\",\"model_category\":\"Deep learning\",\"provider\":\"AlphaFold DB\",\"created\":\"2021-07-01\",\"sequence_identity\":1.0,\"uniprot_start\":1,\"uniprot_end\":1863,\"coverage\":100.0,\"model_url\":\"https://alphafold.ebi.ac.uk/files/AF-P38398-F1-model_v1.cif\",\"model_format\":\"MMCIF\"}]}";
281
282   public static void setMock()
283   {
284     FTSRestClient.createMockFTSRestClient(
285             (FTSRestClient) TDBeaconsFTSRestClient.getInstance(),
286             mockRequest, mockResponse);
287   }
288
289   private static String dev_url = "https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/";
290
291   /**
292    * check that the mock request and response are the same as the response from
293    * a live 3D-beacons endpoint
294    * 
295    * @throws Exception
296    */
297   @Test(groups = { "Network", "Integration" })
298   public void verifyMockTDBRequest() throws Exception
299   {
300     URL tdb_req = new URL(dev_url + mockRequest);
301     byte[] resp = tdb_req.openStream().readAllBytes();
302     String tresp = new String(resp, StandardCharsets.UTF_8);
303     assertEquals(mockResponse.trim(), tresp.trim());
304   }
305
306   @Test(groups = { "Functional" })
307   public void testMockTDBRequest()
308   {
309
310     setMock();
311     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
312     try
313     {
314       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
315               .getDataColumnByNameOrCode("Model Id"));
316       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
317               .getDataColumnByNameOrCode("model_url"));
318       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
319               .getDataColumnByNameOrCode("provider"));
320       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
321               .getDataColumnByNameOrCode("model_category"));
322       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
323               .getDataColumnByNameOrCode("qmean_avg_local_score"));
324       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
325               .getDataColumnByNameOrCode("uniprot_start"));
326       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
327               .getDataColumnByNameOrCode("uniprot_end"));
328     } catch (Exception e1)
329     {
330       e1.printStackTrace();
331     }
332     System.out.println("wantedFields >>" + wantedFields);
333
334     FTSRestRequest request = new FTSRestRequest();
335     FTSRestResponse response;
336
337     request.setResponseSize(100);
338     request.setFieldToSearchBy("");
339     request.setWantedFields(wantedFields);
340     // check 404 behaviour
341     request.setSearchTerm("P00000.json");
342
343     try
344     {
345       response = TDBeaconsFTSRestClient.getInstance()
346               .executeRequest(request);
347
348       assertNull(response);
349     } catch (Exception e)
350     {
351       e.printStackTrace();
352       Assert.fail("Unexpected failure during mock 3DBeacons 404 test");
353     }
354
355     // check 200 behaviour
356     request.setSearchTerm("P38398.json");
357     System.out.println("request : " + request.getFieldToSearchBy());
358     // System.out.println(request.toString());
359
360     try
361     {
362       response = TDBeaconsFTSRestClient.getInstance()
363               .executeRequest(request);
364     } catch (Exception e)
365     {
366       e.printStackTrace();
367       Assert.fail("Couldn't execute webservice call!");
368       return;
369     }
370     assertTrue(response.getSearchSummary() != null);
371     assertTrue(response.getNumberOfItemsFound() > 3); // 4 atm
372     System.out.println("Search summary : \n" + response.getSearchSummary());
373
374     // System.out.println(response.getSearchSummary().size());
375   }
376
377   @Test(groups = { "External", "Network" })
378   public void executeRequestTest()
379   {
380     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
381     try
382     {
383       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
384               .getDataColumnByNameOrCode("Model Id"));
385       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
386               .getDataColumnByNameOrCode("model_url"));
387       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
388               .getDataColumnByNameOrCode("provider"));
389       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
390               .getDataColumnByNameOrCode("model_category"));
391       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
392               .getDataColumnByNameOrCode("qmean_avg_local_score"));
393       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
394               .getDataColumnByNameOrCode("uniprot_start"));
395       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
396               .getDataColumnByNameOrCode("uniprot_end"));
397     } catch (Exception e1)
398     {
399       e1.printStackTrace();
400     }
401     System.out.println("wantedFields >>" + wantedFields);
402
403     FTSRestRequest request = new FTSRestRequest();
404     request.setResponseSize(100);
405     request.setFieldToSearchBy("");
406     request.setSearchTerm("P01318.json");
407     request.setWantedFields(wantedFields);
408     System.out.println("request : " + request.getFieldToSearchBy());
409     // System.out.println(request.toString());
410
411     FTSRestResponse response;
412     try
413     {
414       response = TDBeaconsFTSRestClient.getInstance()
415               .executeRequest(request);
416     } catch (Exception e)
417     {
418       e.printStackTrace();
419       Assert.fail("Couldn't execute webservice call!");
420       return;
421     }
422     assertTrue(response.getSearchSummary() != null);
423     assertTrue(response.getNumberOfItemsFound() > 3); // 4 atm
424     System.out.println("Search summary : \n" + response.getSearchSummary());
425     // System.out.println(response.getSearchSummary().size());
426   }
427 }