JAL-3829 update for v1.0 3d-beacons api spec
[jalview.git] / test / jalview / fts / threedbeacons / TDBeaconsFTSRestClientTest.java
index b144aa5..00adf06 100644 (file)
@@ -1,8 +1,11 @@
 package jalview.fts.threedbeacons;
 
+import static org.testng.Assert.assertNull;
 import static org.testng.AssertJUnit.assertEquals;
 import static org.testng.AssertJUnit.assertTrue;
 
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -20,7 +23,6 @@ import jalview.fts.api.FTSDataColumnI.FTSDataColumnGroupI;
 import jalview.fts.core.FTSRestClient;
 import jalview.fts.core.FTSRestRequest;
 import jalview.fts.core.FTSRestResponse;
-import jalview.fts.service.pdb.PDBFTSRestClient;
 import jalview.fts.service.threedbeacons.TDBeaconsFTSRestClient;
 import jalview.gui.JvOptionPane;
 
@@ -32,7 +34,7 @@ public class TDBeaconsFTSRestClientTest
     JvOptionPane.setInteractiveMode(false);
     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
   }
-  
+
   private FTSRestClient ftsRestClient;
 
   @BeforeMethod(alwaysRun = true)
@@ -60,20 +62,22 @@ public class TDBeaconsFTSRestClientTest
   public void tearDown() throws Exception
   {
   }
-  
+
   @Test
   public void getAllDefaulDisplayedDataColumns()
   {
-    Assert.assertNotNull(ftsRestClient
-            .getAllDefaultDisplayedFTSDataColumns());
-    System.out.println(ftsRestClient.getAllDefaultDisplayedFTSDataColumns());
+    // to change when resources.tdbeacons_data_columns.txt is changed
+    Assert.assertNotNull(
+            ftsRestClient.getAllDefaultDisplayedFTSDataColumns());
+    System.out
+            .println(ftsRestClient.getAllDefaultDisplayedFTSDataColumns());
     Assert.assertTrue(!ftsRestClient.getAllDefaultDisplayedFTSDataColumns()
             .isEmpty());
-    Assert.assertEquals(ftsRestClient
-            .getAllDefaultDisplayedFTSDataColumns().size(), 3);
-    // currently 3, may change -> change this test and the nexts accordingly
+    Assert.assertEquals(
+            ftsRestClient.getAllDefaultDisplayedFTSDataColumns().size(),
+            13);
   }
-  
+
   @Test(groups = { "Functional" })
   public void getPrimaryKeyColumIndexTest()
   {
@@ -85,56 +89,60 @@ public class TDBeaconsFTSRestClientTest
       Assert.assertEquals(foundIndex, -1);
       foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields,
               false);
-      Assert.assertEquals(foundIndex, 0);
-      foundIndex = ftsRestClient
-              .getPrimaryKeyColumIndex(wantedFields, true);
-      Assert.assertEquals(foundIndex, 1);
+      Assert.assertEquals(foundIndex, 12);
+      foundIndex = ftsRestClient.getPrimaryKeyColumIndex(wantedFields,
+              true);
+      // 1+primary key index
+      Assert.assertEquals(foundIndex, 13);
     } catch (Exception e)
     {
       e.printStackTrace();
       Assert.fail("Exception thrown while testing...");
     }
   }
-  
+
   @Test(groups = { "Functional" })
   public void getDataColumnsFieldsAsCommaDelimitedString()
   {
+    // to change when resources.tdbeacons_data_columns.txt is changed
     Collection<FTSDataColumnI> wantedFields = ftsRestClient
             .getAllDefaultDisplayedFTSDataColumns();
     String actual = ftsRestClient
             .getDataColumnsFieldsAsCommaDelimitedString(wantedFields);
     Assert.assertEquals(actual,
-            "id,uniprot_accession,entry name");
+            "uniprot_start,uniprot_end,provider,model_identifier,model_category,model_title,resolution,confidence_avg_local_score,confidence_type,confidence_version,coverage,created,model_url");
   }
-  
+
   @Test(groups = { "Functional" })
   public void getAllFTSDataColumns()
   {
     Collection<FTSDataColumnI> allFields = ftsRestClient
             .getAllFTSDataColumns();
     Assert.assertNotNull(allFields);
-    //System.out.println(allFields.size());
-    Assert.assertEquals(allFields.size(), 3);
+    // System.out.println(allFields.size());
+    Assert.assertEquals(allFields.size(), 19);
   }
-  
+
   @Test(groups = { "Functional" })
   public void getSearchableDataColumns()
   {
+    // to change when resources.tdbeacons_data_columns.txt is changed
     Collection<FTSDataColumnI> searchableFields = ftsRestClient
             .getSearchableDataColumns();
     Assert.assertNotNull(searchableFields);
-    //System.out.println(searchableFields.size());
-    Assert.assertEquals(searchableFields.size(), 1); //only 1, as of first 3DB test
+    // System.out.println(searchableFields.size());
+    Assert.assertEquals(searchableFields.size(), 1); // only 1: uniprot
+                                                     // accession
   }
-  
+
   @Test(groups = { "Functional" })
   public void getPrimaryKeyColumn()
   {
+    // to change when resources.tdbeacons_data_columns.txt is changed
     FTSDataColumnI expectedPKColumn;
     try
     {
-      expectedPKColumn = ftsRestClient
-              .getDataColumnByNameOrCode("Uniprot Id");
+      expectedPKColumn = ftsRestClient.getDataColumnByNameOrCode("Url");
       Assert.assertNotNull(ftsRestClient.getPrimaryKeyColumn());
       Assert.assertEquals(ftsRestClient.getPrimaryKeyColumn(),
               expectedPKColumn);
@@ -144,7 +152,7 @@ public class TDBeaconsFTSRestClientTest
       Assert.fail("Exception thrown while testing...");
     }
   }
-  
+
   @Test(groups = { "Functional" })
   public void getDataColumnByNameOrCode()
   {
@@ -160,7 +168,7 @@ public class TDBeaconsFTSRestClientTest
       Assert.fail("Exception thrown while testing...");
     }
   }
-  
+
   @Test(groups = { "Functional" })
   public void getDataColumnGroupById()
   {
@@ -169,20 +177,21 @@ public class TDBeaconsFTSRestClientTest
     {
       foundDataColGroup = ftsRestClient.getDataColumnGroupById("g2");
       Assert.assertNotNull(foundDataColGroup);
-      Assert.assertEquals(foundDataColGroup.getName(), "Name");
+      Assert.assertEquals(foundDataColGroup.getName(), "Quality");
     } catch (Exception e)
     {
       e.printStackTrace();
     }
   }
-  
+
   @Test(groups = { "Functional" })
   public void getDefaultResponsePageSize()
   {
     int defaultResSize = ftsRestClient.getDefaultResponsePageSize();
-    Assert.assertEquals(defaultResSize, 100); //why 100 or 500 ? pdb is 100, uniprot 500
+    Assert.assertEquals(defaultResSize, 100); // why 100 or 500 ? pdb is 100,
+                                              // uniprot 500
   }
-  
+
   @Test(groups = { "Functional" })
   public void getColumnMinWidthTest()
   {
@@ -200,7 +209,7 @@ public class TDBeaconsFTSRestClientTest
     }
   }
   // could add test for MaxWidth & PreferedWith
-  
+
   @Test(groups = { "Functional" })
   public void getColumnClassTest()
   {
@@ -221,7 +230,7 @@ public class TDBeaconsFTSRestClientTest
       Assert.fail("Exception thrown while testing...");
     }
   }
-  
+
   @Test(groups = { "Functional" })
   public void coverageForEqualsAndHashFunction()
   {
@@ -236,9 +245,9 @@ public class TDBeaconsFTSRestClientTest
       uniqueSet.add(foundCol);
     }
     Assert.assertTrue(!uniqueSet.isEmpty());
-    //Assert.assertEquals(uniqueSet.size(), 22); -> 1 or 2 currently for 3DB
+    // Assert.assertEquals(uniqueSet.size(), 22); -> 1 or 2 currently for 3DB
   }
-  
+
   @Test(groups = { "Functional" })
   public void getTDBIdColumIndexTest()
   {
@@ -250,38 +259,142 @@ public class TDBeaconsFTSRestClientTest
       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
               .getDataColumnByNameOrCode("uniprot_accession"));
       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
-              .getDataColumnByNameOrCode("entry name"));
+              .getDataColumnByNameOrCode("Title"));
     } catch (Exception e)
     {
       e.printStackTrace();
     }
     try
     {
-      assertEquals(1, TDBeaconsFTSRestClient.getInstance()
+      assertEquals(4, TDBeaconsFTSRestClient.getInstance()
               .getPrimaryKeyColumIndex(wantedFields, true));
-//      assertEquals(3, TDBeaconsFTSRestClient.getInstance()
-//              .getPrimaryKeyColumIndex(wantedFields, true));
+      // assertEquals(3, TDBeaconsFTSRestClient.getInstance()
+      // .getPrimaryKeyColumIndex(wantedFields, true));
     } catch (Exception e)
     {
       e.printStackTrace();
     }
   }
-  
 
-  @Test(groups = { "External", "Network" })  
-  public void executeRequestTest()
+  private static String mockRequest = "P38398.json";
+
+  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\"}]}";
+
+  public static void setMock()
+  {
+    FTSRestClient.createMockFTSRestClient(
+            (FTSRestClient) TDBeaconsFTSRestClient.getInstance(),
+            mockRequest, mockResponse);
+  }
+
+  private static String dev_url = "https://wwwdev.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/api/uniprot/summary/";
+
+  /**
+   * check that the mock request and response are the same as the response from
+   * a live 3D-beacons endpoint
+   * 
+   * @throws Exception
+   */
+  @Test(groups = { "Network", "Integration" })
+  public void verifyMockTDBRequest() throws Exception
+  {
+    URL tdb_req = new URL(dev_url + mockRequest);
+    byte[] resp = tdb_req.openStream().readAllBytes();
+    String tresp = new String(resp, StandardCharsets.UTF_8);
+    assertEquals(mockResponse.trim(), tresp.trim());
+  }
+
+  @Test(groups = { "Functional" })
+  public void testMockTDBRequest()
   {
+
+    setMock();
     List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
     try
     {
       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
-              .getDataColumnByNameOrCode("Model id"));
+              .getDataColumnByNameOrCode("Model Id"));
       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
               .getDataColumnByNameOrCode("model_url"));
       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
               .getDataColumnByNameOrCode("provider"));
       wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("model_category"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
               .getDataColumnByNameOrCode("qmean_avg_local_score"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("uniprot_start"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("uniprot_end"));
+    } catch (Exception e1)
+    {
+      e1.printStackTrace();
+    }
+    System.out.println("wantedFields >>" + wantedFields);
+
+    FTSRestRequest request = new FTSRestRequest();
+    FTSRestResponse response;
+
+    request.setResponseSize(100);
+    request.setFieldToSearchBy("");
+    request.setWantedFields(wantedFields);
+    // check 404 behaviour
+    request.setSearchTerm("P00000.json");
+
+    try
+    {
+      response = TDBeaconsFTSRestClient.getInstance()
+              .executeRequest(request);
+
+      assertNull(response);
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+      Assert.fail("Unexpected failure during mock 3DBeacons 404 test");
+    }
+
+    // check 200 behaviour
+    request.setSearchTerm("P38398.json");
+    System.out.println("request : " + request.getFieldToSearchBy());
+    // System.out.println(request.toString());
+
+    try
+    {
+      response = TDBeaconsFTSRestClient.getInstance()
+              .executeRequest(request);
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+      Assert.fail("Couldn't execute webservice call!");
+      return;
+    }
+    assertTrue(response.getSearchSummary() != null);
+    assertTrue(response.getNumberOfItemsFound() > 3); // 4 atm
+    System.out.println("Search summary : \n" + response.getSearchSummary());
+
+    // System.out.println(response.getSearchSummary().size());
+  }
+
+  @Test(groups = { "External", "Network" })
+  public void executeRequestTest()
+  {
+    List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
+    try
+    {
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("Model Id"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("model_url"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("provider"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("model_category"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("confidence_avg_local_score"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("uniprot_start"));
+      wantedFields.add(TDBeaconsFTSRestClient.getInstance()
+              .getDataColumnByNameOrCode("uniprot_end"));
     } catch (Exception e1)
     {
       e1.printStackTrace();
@@ -290,16 +403,17 @@ public class TDBeaconsFTSRestClientTest
 
     FTSRestRequest request = new FTSRestRequest();
     request.setResponseSize(100);
-    request.setFieldToSearchBy("P");
-    request.setSearchTerm("01318.json");
+    request.setFieldToSearchBy("");
+    request.setSearchTerm("P01318.json");
     request.setWantedFields(wantedFields);
     System.out.println("request : " + request.getFieldToSearchBy());
-    //System.out.println(request.toString());
+    // System.out.println(request.toString());
 
     FTSRestResponse response;
     try
     {
-      response = TDBeaconsFTSRestClient.getInstance().executeRequest(request);
+      response = TDBeaconsFTSRestClient.getInstance()
+              .executeRequest(request);
     } catch (Exception e)
     {
       e.printStackTrace();
@@ -307,8 +421,8 @@ public class TDBeaconsFTSRestClientTest
       return;
     }
     assertTrue(response.getSearchSummary() != null);
-    assertTrue(response.getNumberOfItemsFound() > 3); //4 atm
+    assertTrue(response.getNumberOfItemsFound() > 3); // 4 atm
     System.out.println("Search summary : \n" + response.getSearchSummary());
-    //System.out.println(response.getSearchSummary().size());
+    // System.out.println(response.getSearchSummary().size());
   }
 }