Merge develop to Release_2_8_3_Branch
[jalview.git] / test / jalview / ws / dbsources / PDBRestClientTest.java
diff --git a/test/jalview/ws/dbsources/PDBRestClientTest.java b/test/jalview/ws/dbsources/PDBRestClientTest.java
new file mode 100644 (file)
index 0000000..ba07562
--- /dev/null
@@ -0,0 +1,181 @@
+package jalview.ws.dbsources;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import jalview.ws.dbsources.PDBRestClient.PDBDocField;
+import jalview.ws.uimodel.PDBRestRequest;
+import jalview.ws.uimodel.PDBRestResponse;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class PDBRestClientTest
+{
+
+  @Before
+  public void setUp() throws Exception
+  {
+  }
+
+  @After
+  public void tearDown() throws Exception
+  {
+  }
+
+  @Test
+  public void executeRequestTest()
+  {
+    List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
+    wantedFields.add(PDBDocField.MOLECULE_TYPE);
+    wantedFields.add(PDBDocField.PDB_ID);
+    wantedFields.add(PDBDocField.GENUS);
+    wantedFields.add(PDBDocField.GENE_NAME);
+    wantedFields.add(PDBDocField.TITLE);
+
+    PDBRestRequest request = new PDBRestRequest();
+    request.setAllowEmptySeq(false);
+    request.setResponseSize(100);
+    request.setFieldToSearchBy("text:");
+    request.setSearchTerm("abc");
+    request.setWantedFields(wantedFields);
+
+    PDBRestResponse response = new PDBRestClient().executeRequest(request);
+    assertTrue(response.getNumberOfItemsFound() > 99);
+    assertTrue(response.getSearchSummary() != null);
+    assertTrue(response.getSearchSummary().size() > 99);
+  }
+
+  @Test
+  public void getPDBDocFieldsAsCommaDelimitedStringTest()
+  {
+    List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
+    wantedFields.add(PDBDocField.MOLECULE_TYPE);
+    wantedFields.add(PDBDocField.PDB_ID);
+    wantedFields.add(PDBDocField.GENUS);
+    wantedFields.add(PDBDocField.GENE_NAME);
+    wantedFields.add(PDBDocField.TITLE);
+    assertEquals("molecule_type,pdb_id,genus,gene_name,title",
+            PDBRestClient
+                    .getPDBDocFieldsAsCommaDelimitedString(wantedFields));
+  }
+
+  @Test
+  public void parsePDBJsonExceptionStringTest()
+  {
+    List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
+    wantedFields.add(PDBDocField.MOLECULE_TYPE);
+    wantedFields.add(PDBDocField.PDB_ID);
+    wantedFields.add(PDBDocField.GENUS);
+    wantedFields.add(PDBDocField.GENE_NAME);
+    wantedFields.add(PDBDocField.TITLE);
+
+    PDBRestRequest request = new PDBRestRequest();
+    request.setAllowEmptySeq(false);
+    request.setResponseSize(100);
+    request.setFieldToSearchBy("text:");
+    request.setSearchTerm("abc");
+    request.setWantedFields(wantedFields);
+
+    String jsonErrorResponse = "";
+    try
+    {
+      jsonErrorResponse = readJsonStringFromFile("test/jalview/io/pdb_request_json_error.txt");
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+
+    String parsedErrorResponse = PDBRestClient
+            .parseJsonExceptionString(jsonErrorResponse);
+    String expectedErrorMsg = "org.apache.solr.search.SyntaxError: Cannot parse 'text:abc OR text:go:abc AND molecule_sequence:['' TO *]': Encountered \" \":\" \": \"\" at line 1, column 19.{\"q\":\"text:abc OR text:go:abc AND molecule_sequence:['' TO *]\",\"fl\":\"pdb_id\",\"sort\":\"\",\"rows\":\"100\",\"wt\":\"json\"}";
+
+    assertEquals(expectedErrorMsg, parsedErrorResponse);
+  }
+
+  @Test(expected = RuntimeException.class)
+  public void testForExpectedRuntimeException()
+  {
+    List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
+    wantedFields.add(PDBDocField.PDB_ID);
+
+    PDBRestRequest request = new PDBRestRequest();
+    request.setFieldToSearchBy("text:");
+    request.setSearchTerm("abc OR text:go:abc");
+    request.setWantedFields(wantedFields);
+    new PDBRestClient().executeRequest(request);
+  }
+
+  @Test
+  public void parsePDBJsonResponseTest()
+  {
+    List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
+    wantedFields.add(PDBDocField.MOLECULE_TYPE);
+    wantedFields.add(PDBDocField.PDB_ID);
+    wantedFields.add(PDBDocField.GENUS);
+    wantedFields.add(PDBDocField.GENE_NAME);
+    wantedFields.add(PDBDocField.TITLE);
+
+    PDBRestRequest request = new PDBRestRequest();
+    request.setAllowEmptySeq(false);
+    request.setWantedFields(wantedFields);
+
+    String jsonString = "";
+    try
+    {
+      jsonString = readJsonStringFromFile("test/jalview/io/pdb_response_json.txt");
+    } catch (IOException e)
+    {
+      e.printStackTrace();
+    }
+    PDBRestResponse response = PDBRestClient.parsePDBJsonResponse(
+            jsonString, request);
+    assertTrue(response.getSearchSummary() != null);
+    assertTrue(response.getNumberOfItemsFound() == 931);
+    assertTrue(response.getSearchSummary().size() == 14);
+  }
+
+  @Test
+  public void getPDBIdColumIndexTest()
+  {
+    List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
+    wantedFields.add(PDBDocField.MOLECULE_TYPE);
+    wantedFields.add(PDBDocField.GENUS);
+    wantedFields.add(PDBDocField.GENE_NAME);
+    wantedFields.add(PDBDocField.TITLE);
+    wantedFields.add(PDBDocField.PDB_ID);
+    assertEquals(5, PDBRestClient.getPDBIdColumIndex(wantedFields, true));
+    assertEquals(4, PDBRestClient.getPDBIdColumIndex(wantedFields, false));
+  }
+
+  public String readJsonStringFromFile(String filePath) throws IOException
+  {
+    String fileContent;
+    BufferedReader br = new BufferedReader(new FileReader(filePath));
+    try
+    {
+      StringBuilder sb = new StringBuilder();
+      String line = br.readLine();
+
+      while (line != null)
+      {
+        sb.append(line);
+        sb.append(System.lineSeparator());
+        line = br.readLine();
+        }
+      fileContent = sb.toString();
+    } finally
+    {
+      br.close();
+    }
+    return fileContent;
+  }
+
+
+}