JAL-1270 test suits import order refactor
[jalview.git] / test / jalview / ws / dbsources / PDBRestClientTest.java
index 181fcf1..3b3ef86 100644 (file)
@@ -1,7 +1,8 @@
 package jalview.ws.dbsources;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+
 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
 import jalview.ws.uimodel.PDBRestRequest;
 import jalview.ws.uimodel.PDBRestResponse;
@@ -10,21 +11,35 @@ import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import javax.ws.rs.core.MediaType;
+
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
+import org.testng.Assert;
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.config.ClientConfig;
+import com.sun.jersey.api.client.config.DefaultClientConfig;
 
 public class PDBRestClientTest
 {
 
-  @Before
+  @BeforeMethod
   public void setUp() throws Exception
   {
   }
 
-  @After
+  @AfterMethod
   public void tearDown() throws Exception
   {
   }
@@ -46,7 +61,16 @@ public class PDBRestClientTest
     request.setSearchTerm("abc");
     request.setWantedFields(wantedFields);
 
-    PDBRestResponse response = new PDBRestClient().executeRequest(request);
+    PDBRestResponse response;
+    try
+    {
+      response = new PDBRestClient().executeRequest(request);
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+      Assert.fail("Couldn't execute webservice call!");
+      return;
+    }
     assertTrue(response.getNumberOfItemsFound() > 99);
     assertTrue(response.getSearchSummary() != null);
     assertTrue(response.getSearchSummary().size() > 99);
@@ -107,8 +131,8 @@ public class PDBRestClientTest
     assertEquals(expectedErrorMsg, parsedErrorResponse);
   }
 
-  @Test(expected = RuntimeException.class)
-  public void testForExpectedRuntimeException()
+  @Test(expectedExceptions = Exception.class)
+  public void testForExpectedRuntimeException() throws Exception
   {
     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
     wantedFields.add(PDBDocField.PDB_ID);
@@ -162,6 +186,75 @@ public class PDBRestClientTest
     assertEquals(4, PDBRestClient.getPDBIdColumIndex(wantedFields, false));
   }
 
+  @Test
+  public void externalServiceIntegrationTest()
+  {
+    ClientConfig clientConfig = new DefaultClientConfig();
+    Client client = Client.create(clientConfig);
+
+    // Build request parameters for the REST Request
+    WebResource webResource = client
+            .resource(PDBRestClient.PDB_SEARCH_ENDPOINT)
+            .queryParam("wt", "json").queryParam("rows", String.valueOf(1))
+            .queryParam("q", "text:abc AND molecule_sequence:['' TO *]");
+
+    // Execute the REST request
+    ClientResponse clientResponse = webResource.accept(
+            MediaType.APPLICATION_JSON).get(ClientResponse.class);
+
+    // Get the JSON string from the response object
+    String pdbJsonResponseString = clientResponse.getEntity(String.class);
+
+    // Check the response status and report exception if one occurs
+    if (clientResponse.getStatus() != 200)
+    {
+      Assert.fail("Webservice call failed!!!");
+    }
+    else
+    {
+      try
+      {
+        JSONParser jsonParser = new JSONParser();
+        JSONObject jsonObj = (JSONObject) jsonParser
+                .parse(pdbJsonResponseString);
+        JSONObject pdbResponse = (JSONObject) jsonObj.get("response");
+        String queryTime = ((JSONObject) jsonObj.get("responseHeader"))
+                .get("QTime").toString();
+        String numFound = pdbResponse.get("numFound").toString();
+        JSONArray docs = (JSONArray) pdbResponse.get("docs");
+        Iterator<JSONObject> docIter = docs.iterator();
+
+        assertTrue("Couldn't Retrieve 'response' object",
+                pdbResponse != null);
+        assertTrue("Couldn't Retrieve 'QTime' value", queryTime != null);
+        assertTrue("Couldn't Retrieve 'numFound' value", numFound != null);
+        assertTrue("Couldn't Retrieve 'docs' object", docs != null
+                || !docIter.hasNext());
+
+        JSONObject pdbJsonDoc = docIter.next();
+
+        for (PDBDocField field : PDBDocField.values())
+        {
+          if (field == PDBDocField.ALL)
+          {
+            continue;
+          }
+          if (pdbJsonDoc.get(field.getCode()) == null)
+          {
+            // System.out.println(">>>\t" + field.getCode());
+            assertTrue(field.getClass()
+                    + " has been removed from PDB doc Entity",
+                    !pdbJsonResponseString.contains(field.getCode()));
+          }
+        }
+      } catch (ParseException e)
+      {
+        Assert.fail(">>>  Test failed due to exception while parsing pdb response json !!!");
+        e.printStackTrace();
+      }
+    }
+  }
+
   public String readJsonStringFromFile(String filePath) throws IOException
   {
     String fileContent;
@@ -185,5 +278,4 @@ public class PDBRestClientTest
     return fileContent;
   }
 
-
 }