181fcf1972afe78d45f5fdc19349893b9ef9acf4
[jalview.git] / test / jalview / ws / dbsources / PDBRestClientTest.java
1 package jalview.ws.dbsources;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertTrue;
5 import jalview.ws.dbsources.PDBRestClient.PDBDocField;
6 import jalview.ws.uimodel.PDBRestRequest;
7 import jalview.ws.uimodel.PDBRestResponse;
8
9 import java.io.BufferedReader;
10 import java.io.FileReader;
11 import java.io.IOException;
12 import java.util.ArrayList;
13 import java.util.List;
14
15 import org.junit.After;
16 import org.junit.Before;
17 import org.junit.Test;
18
19 public class PDBRestClientTest
20 {
21
22   @Before
23   public void setUp() throws Exception
24   {
25   }
26
27   @After
28   public void tearDown() throws Exception
29   {
30   }
31
32   @Test
33   public void executeRequestTest()
34   {
35     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
36     wantedFields.add(PDBDocField.MOLECULE_TYPE);
37     wantedFields.add(PDBDocField.PDB_ID);
38     wantedFields.add(PDBDocField.GENUS);
39     wantedFields.add(PDBDocField.GENE_NAME);
40     wantedFields.add(PDBDocField.TITLE);
41
42     PDBRestRequest request = new PDBRestRequest();
43     request.setAllowEmptySeq(false);
44     request.setResponseSize(100);
45     request.setFieldToSearchBy("text:");
46     request.setSearchTerm("abc");
47     request.setWantedFields(wantedFields);
48
49     PDBRestResponse response = new PDBRestClient().executeRequest(request);
50     assertTrue(response.getNumberOfItemsFound() > 99);
51     assertTrue(response.getSearchSummary() != null);
52     assertTrue(response.getSearchSummary().size() > 99);
53   }
54
55   @Test
56   public void getPDBDocFieldsAsCommaDelimitedStringTest()
57   {
58     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
59     wantedFields.add(PDBDocField.MOLECULE_TYPE);
60     wantedFields.add(PDBDocField.PDB_ID);
61     wantedFields.add(PDBDocField.GENUS);
62     wantedFields.add(PDBDocField.GENE_NAME);
63     wantedFields.add(PDBDocField.TITLE);
64
65     String expectedResult = "molecule_type,pdb_id,genus,gene_name,title";
66     String actualResult = PDBRestClient
67             .getPDBDocFieldsAsCommaDelimitedString(wantedFields);
68
69     assertEquals("", expectedResult, actualResult);
70   }
71
72   @Test
73   public void parsePDBJsonExceptionStringTest()
74   {
75     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
76     wantedFields.add(PDBDocField.MOLECULE_TYPE);
77     wantedFields.add(PDBDocField.PDB_ID);
78     wantedFields.add(PDBDocField.GENUS);
79     wantedFields.add(PDBDocField.GENE_NAME);
80     wantedFields.add(PDBDocField.TITLE);
81
82     PDBRestRequest request = new PDBRestRequest();
83     request.setAllowEmptySeq(false);
84     request.setResponseSize(100);
85     request.setFieldToSearchBy("text:");
86     request.setSearchTerm("abc");
87     request.setWantedFields(wantedFields);
88
89     String jsonErrorResponse = "";
90     try
91     {
92       jsonErrorResponse = readJsonStringFromFile("test/jalview/io/pdb_request_json_error.txt");
93     } catch (IOException e)
94     {
95       e.printStackTrace();
96     }
97
98     String parsedErrorResponse = PDBRestClient
99             .parseJsonExceptionString(jsonErrorResponse);
100
101     String expectedErrorMsg = "\n============= PDB Rest Client RunTime error =============\n"
102             + "Status: 400\n"
103             + "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"
104             + "query: text:abc OR text:go:abc AND molecule_sequence:['' TO *]\n"
105             + "fl: pdb_id\n";
106
107     assertEquals(expectedErrorMsg, parsedErrorResponse);
108   }
109
110   @Test(expected = RuntimeException.class)
111   public void testForExpectedRuntimeException()
112   {
113     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
114     wantedFields.add(PDBDocField.PDB_ID);
115
116     PDBRestRequest request = new PDBRestRequest();
117     request.setFieldToSearchBy("text:");
118     request.setSearchTerm("abc OR text:go:abc");
119     request.setWantedFields(wantedFields);
120     new PDBRestClient().executeRequest(request);
121   }
122
123   @Test
124   public void parsePDBJsonResponseTest()
125   {
126     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
127     wantedFields.add(PDBDocField.MOLECULE_TYPE);
128     wantedFields.add(PDBDocField.PDB_ID);
129     wantedFields.add(PDBDocField.GENUS);
130     wantedFields.add(PDBDocField.GENE_NAME);
131     wantedFields.add(PDBDocField.TITLE);
132
133     PDBRestRequest request = new PDBRestRequest();
134     request.setAllowEmptySeq(false);
135     request.setWantedFields(wantedFields);
136
137     String jsonString = "";
138     try
139     {
140       jsonString = readJsonStringFromFile("test/jalview/io/pdb_response_json.txt");
141     } catch (IOException e)
142     {
143       e.printStackTrace();
144     }
145     PDBRestResponse response = PDBRestClient.parsePDBJsonResponse(
146             jsonString, request);
147     assertTrue(response.getSearchSummary() != null);
148     assertTrue(response.getNumberOfItemsFound() == 931);
149     assertTrue(response.getSearchSummary().size() == 14);
150   }
151
152   @Test
153   public void getPDBIdColumIndexTest()
154   {
155     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
156     wantedFields.add(PDBDocField.MOLECULE_TYPE);
157     wantedFields.add(PDBDocField.GENUS);
158     wantedFields.add(PDBDocField.GENE_NAME);
159     wantedFields.add(PDBDocField.TITLE);
160     wantedFields.add(PDBDocField.PDB_ID);
161     assertEquals(5, PDBRestClient.getPDBIdColumIndex(wantedFields, true));
162     assertEquals(4, PDBRestClient.getPDBIdColumIndex(wantedFields, false));
163   }
164
165   public String readJsonStringFromFile(String filePath) throws IOException
166   {
167     String fileContent;
168     BufferedReader br = new BufferedReader(new FileReader(filePath));
169     try
170     {
171       StringBuilder sb = new StringBuilder();
172       String line = br.readLine();
173
174       while (line != null)
175       {
176         sb.append(line);
177         sb.append(System.lineSeparator());
178         line = br.readLine();
179         }
180       fileContent = sb.toString();
181     } finally
182     {
183       br.close();
184     }
185     return fileContent;
186   }
187
188
189 }