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