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 wantedFields = new ArrayList(); 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 wantedFields = new ArrayList(); wantedFields.add(PDBDocField.MOLECULE_TYPE); wantedFields.add(PDBDocField.PDB_ID); wantedFields.add(PDBDocField.GENUS); wantedFields.add(PDBDocField.GENE_NAME); wantedFields.add(PDBDocField.TITLE); String expectedResult = "molecule_type,pdb_id,genus,gene_name,title"; String actualResult = PDBRestClient .getPDBDocFieldsAsCommaDelimitedString(wantedFields); assertEquals("", expectedResult, actualResult); } @Test public void parsePDBJsonExceptionStringTest() { List wantedFields = new ArrayList(); 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); System.out.println(parsedErrorResponse); String expectedErrorMsg = "\n============= PDB Rest Client RunTime error =============\n" + "Status: 400\n" + "Message: org.apache.solr.search.SyntaxError: Cannot parse 'text:abc OR text:go:abc AND molecule_sequence:['' TO *]': Encountered \" \":\" \": \"\" at line 1, column 19.\n" + "query: text:abc OR text:go:abc AND molecule_sequence:['' TO *]\n" + "fl: pdb_id\n"; assertEquals(expectedErrorMsg, parsedErrorResponse); } @Test(expected = RuntimeException.class) public void testForExpectedRuntimeException() { List wantedFields = new ArrayList(); 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 wantedFields = new ArrayList(); 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 wantedFields = new ArrayList(); 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; } }