fbf8539408e26e13fbb45eafdb774349b857f0d0
[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(ftsRestClient
71             .getAllDefaultDisplayedFTSDataColumns());
72     System.out.println(ftsRestClient.getAllDefaultDisplayedFTSDataColumns());
73     Assert.assertTrue(!ftsRestClient.getAllDefaultDisplayedFTSDataColumns()
74             .isEmpty());
75     Assert.assertEquals(ftsRestClient
76             .getAllDefaultDisplayedFTSDataColumns().size(), 11);
77   }
78   
79   @Test(groups = { "Functional" })
80   public void getPrimaryKeyColumIndexTest()
81   {
82     Collection<FTSDataColumnI> wantedFields = ftsRestClient
83             .getAllDefaultDisplayedFTSDataColumns();
84     int foundIndex = -1;
85     try
86     {
87       Assert.assertEquals(foundIndex, -1);
88       foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields,
89               false);
90       Assert.assertEquals(foundIndex, 10);
91       foundIndex = ftsRestClient
92               .getPrimaryKeyColumIndex(wantedFields, true);
93       Assert.assertEquals(foundIndex, 11);
94     } catch (Exception e)
95     {
96       e.printStackTrace();
97       Assert.fail("Exception thrown while testing...");
98     }
99   }
100   
101   @Test(groups = { "Functional" })
102   public void getDataColumnsFieldsAsCommaDelimitedString()
103   {
104     // to change when resources.tdbeacons_data_columns.txt is changed
105     Collection<FTSDataColumnI> wantedFields = ftsRestClient
106             .getAllDefaultDisplayedFTSDataColumns();
107     String actual = ftsRestClient
108             .getDataColumnsFieldsAsCommaDelimitedString(wantedFields);
109     Assert.assertEquals(actual,
110             "model_identifier,provider,model_category,uniprot_start,uniprot_end,resolution,qmean_avg_local_score,coverage,created,entry_name,model_url");
111   }
112   
113   @Test(groups = { "Functional" })
114   public void getAllFTSDataColumns()
115   {
116     Collection<FTSDataColumnI> allFields = ftsRestClient
117             .getAllFTSDataColumns();
118     Assert.assertNotNull(allFields);
119     //System.out.println(allFields.size());
120     Assert.assertEquals(allFields.size(), 15);
121   }
122   
123   @Test(groups = { "Functional" })
124   public void getSearchableDataColumns()
125   {     
126     // to change when resources.tdbeacons_data_columns.txt is changed
127     Collection<FTSDataColumnI> searchableFields = ftsRestClient
128             .getSearchableDataColumns();
129     Assert.assertNotNull(searchableFields);
130     //System.out.println(searchableFields.size());
131     Assert.assertEquals(searchableFields.size(), 1); //only 1: uniprot accession
132   }
133   
134   @Test(groups = { "Functional" })
135   public void getPrimaryKeyColumn()
136   { 
137     // to change when resources.tdbeacons_data_columns.txt is changed
138     FTSDataColumnI expectedPKColumn;
139     try
140     {
141       expectedPKColumn = ftsRestClient
142               .getDataColumnByNameOrCode("Url");
143       Assert.assertNotNull(ftsRestClient.getPrimaryKeyColumn());
144       Assert.assertEquals(ftsRestClient.getPrimaryKeyColumn(),
145               expectedPKColumn);
146     } catch (Exception e)
147     {
148       e.printStackTrace();
149       Assert.fail("Exception thrown while testing...");
150     }
151   }
152   
153   @Test(groups = { "Functional" })
154   public void getDataColumnByNameOrCode()
155   {
156     try
157     {
158       FTSDataColumnI foundDataCol = ftsRestClient
159               .getDataColumnByNameOrCode("uniprot_accession");
160       Assert.assertNotNull(foundDataCol);
161       Assert.assertEquals(foundDataCol.getName(), "UniProt Accession");
162     } catch (Exception e)
163     {
164       e.printStackTrace();
165       Assert.fail("Exception thrown while testing...");
166     }
167   }
168   
169   @Test(groups = { "Functional" })
170   public void getDataColumnGroupById()
171   {
172     FTSDataColumnGroupI foundDataColGroup;
173     try
174     {
175       foundDataColGroup = ftsRestClient.getDataColumnGroupById("g2");
176       Assert.assertNotNull(foundDataColGroup);
177       Assert.assertEquals(foundDataColGroup.getName(), "Quality");
178     } catch (Exception e)
179     {
180       e.printStackTrace();
181     }
182   }
183   
184   @Test(groups = { "Functional" })
185   public void getDefaultResponsePageSize()
186   {
187     int defaultResSize = ftsRestClient.getDefaultResponsePageSize();
188     Assert.assertEquals(defaultResSize, 100); //why 100 or 500 ? pdb is 100, uniprot 500
189   }
190   
191   @Test(groups = { "Functional" })
192   public void getColumnMinWidthTest()
193   {
194     try
195     {
196       FTSDataColumnI foundDataCol = ftsRestClient
197               .getDataColumnByNameOrCode("uniprot_accession");
198       Assert.assertNotNull(foundDataCol);
199       int actualColMinWidth = foundDataCol.getMinWidth();
200       Assert.assertEquals(actualColMinWidth, 50);
201     } catch (Exception e)
202     {
203       e.printStackTrace();
204       Assert.fail("Exception thrown while testing...");
205     }
206   }
207   // could add test for MaxWidth & PreferedWith
208   
209   @Test(groups = { "Functional" })
210   public void getColumnClassTest()
211   {
212     try
213     {
214       FTSDataColumnI foundDataCol = ftsRestClient
215               .getDataColumnByNameOrCode("uniprot_accession");
216       Assert.assertNotNull(foundDataCol);
217       Assert.assertEquals(foundDataCol.getDataType().getDataTypeClass(),
218               String.class);
219       foundDataCol = ftsRestClient.getDataColumnByNameOrCode("id");
220       Assert.assertNotNull(foundDataCol);
221       Assert.assertEquals(foundDataCol.getDataType().getDataTypeClass(),
222               String.class);
223     } catch (Exception e)
224     {
225       e.printStackTrace();
226       Assert.fail("Exception thrown while testing...");
227     }
228   }
229   
230   @Test(groups = { "Functional" })
231   public void coverageForEqualsAndHashFunction()
232   {
233     Set<FTSDataColumnI> uniqueSet = new HashSet<FTSDataColumnI>();
234     Collection<FTSDataColumnI> searchableCols = ftsRestClient
235             .getSearchableDataColumns();
236     System.out.println(searchableCols);
237     for (FTSDataColumnI foundCol : searchableCols)
238     {
239       System.out.println(foundCol.toString());
240       uniqueSet.add(foundCol);
241       uniqueSet.add(foundCol);
242     }
243     Assert.assertTrue(!uniqueSet.isEmpty());
244     //Assert.assertEquals(uniqueSet.size(), 22); -> 1 or 2 currently for 3DB
245   }
246   
247   @Test(groups = { "Functional" })
248   public void getTDBIdColumIndexTest()
249   {
250     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
251     try
252     {
253       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
254               .getDataColumnByNameOrCode("Model id"));
255       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
256               .getDataColumnByNameOrCode("uniprot_accession"));
257       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
258               .getDataColumnByNameOrCode("entry name"));
259     } catch (Exception e)
260     {
261       e.printStackTrace();
262     }
263     try
264     {
265       assertEquals(4, TDBeaconsFTSRestClient.getInstance()
266               .getPrimaryKeyColumIndex(wantedFields, true));
267 //      assertEquals(3, TDBeaconsFTSRestClient.getInstance()
268 //              .getPrimaryKeyColumIndex(wantedFields, true));
269     } catch (Exception e)
270     {
271       e.printStackTrace();
272     }
273   }
274
275   private static String mockRequest = "P38398.json";
276
277   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\"}]}";
278
279   public static void setMock()
280   {
281     FTSRestClient.createMockFTSRestClient(
282             (FTSRestClient) TDBeaconsFTSRestClient.getInstance(),
283             mockRequest, mockResponse);
284   }
285
286   private static String dev_url = "https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/";
287
288   /**
289    * check that the mock request and response are the same as the response from
290    * a live 3D-beacons endpoint
291    * 
292    * @throws Exception
293    */
294   @Test(groups = { "Network", "Integration" })
295   public void verifyMockTDBRequest() throws Exception
296   {
297     URL tdb_req = new URL(dev_url + mockRequest);
298     byte[] resp = tdb_req.openStream().readAllBytes();
299     String tresp = new String(resp, StandardCharsets.UTF_8);
300     assertEquals(mockResponse.trim(), tresp.trim());
301   }
302
303   @Test(groups = { "Functional" })
304   public void testMockTDBRequest()
305   {
306
307     setMock();
308     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
309     try
310     {
311       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
312               .getDataColumnByNameOrCode("Model Id"));
313       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
314               .getDataColumnByNameOrCode("model_url"));
315       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
316               .getDataColumnByNameOrCode("provider"));
317       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
318               .getDataColumnByNameOrCode("model_category"));
319       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
320               .getDataColumnByNameOrCode("qmean_avg_local_score"));
321       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
322               .getDataColumnByNameOrCode("uniprot_start"));
323       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
324               .getDataColumnByNameOrCode("uniprot_end"));
325     } catch (Exception e1)
326     {
327       e1.printStackTrace();
328     }
329     System.out.println("wantedFields >>" + wantedFields);
330
331     FTSRestRequest request = new FTSRestRequest();
332     FTSRestResponse response;
333
334     request.setResponseSize(100);
335     request.setFieldToSearchBy("");
336     request.setWantedFields(wantedFields);
337     // check 404 behaviour
338     request.setSearchTerm("P00000.json");
339
340
341     try {
342       response = TDBeaconsFTSRestClient.getInstance().executeRequest(request);
343       
344       assertNull(response);
345     } catch (Exception e)
346     {
347       e.printStackTrace();
348       Assert.fail("Unexpected failure during mock 3DBeacons 404 test");
349     }
350      
351     // check 200 behaviour
352     request.setSearchTerm("P38398.json");
353     System.out.println("request : " + request.getFieldToSearchBy());
354     //System.out.println(request.toString());
355
356     try
357     {
358       response = TDBeaconsFTSRestClient.getInstance().executeRequest(request);
359     } catch (Exception e)
360     {
361       e.printStackTrace();
362       Assert.fail("Couldn't execute webservice call!");
363       return;
364     }
365     assertTrue(response.getSearchSummary() != null);
366     assertTrue(response.getNumberOfItemsFound() > 3); //4 atm
367     System.out.println("Search summary : \n" + response.getSearchSummary());
368     
369     //System.out.println(response.getSearchSummary().size());
370   }
371
372   @Test(groups = { "External", "Network" })  
373   public void executeRequestTest()
374   {
375     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
376     try
377     {
378       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
379               .getDataColumnByNameOrCode("Model Id"));
380       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
381               .getDataColumnByNameOrCode("model_url"));
382       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
383               .getDataColumnByNameOrCode("provider"));
384       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
385               .getDataColumnByNameOrCode("model_category"));
386       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
387               .getDataColumnByNameOrCode("qmean_avg_local_score"));
388       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
389               .getDataColumnByNameOrCode("uniprot_start"));
390       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
391               .getDataColumnByNameOrCode("uniprot_end"));
392     } catch (Exception e1)
393     {
394       e1.printStackTrace();
395     }
396     System.out.println("wantedFields >>" + wantedFields);
397
398     FTSRestRequest request = new FTSRestRequest();
399     request.setResponseSize(100);
400     request.setFieldToSearchBy("");
401     request.setSearchTerm("P01318.json");
402     request.setWantedFields(wantedFields);
403     System.out.println("request : " + request.getFieldToSearchBy());
404     //System.out.println(request.toString());
405
406     FTSRestResponse response;
407     try
408     {
409       response = TDBeaconsFTSRestClient.getInstance().executeRequest(request);
410     } catch (Exception e)
411     {
412       e.printStackTrace();
413       Assert.fail("Couldn't execute webservice call!");
414       return;
415     }
416     assertTrue(response.getSearchSummary() != null);
417     assertTrue(response.getNumberOfItemsFound() > 3); //4 atm
418     System.out.println("Search summary : \n" + response.getSearchSummary());
419     //System.out.println(response.getSearchSummary().size());
420   }
421 }