merge commit
[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     System.out.println(parsedErrorResponse);
101
102     String expectedErrorMsg = "\n============= PDB Rest Client RunTime error =============\n"
103             + "Status: 400\n"
104             + "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"
105             + "query: text:abc OR text:go:abc AND molecule_sequence:['' TO *]\n"
106             + "fl: pdb_id\n";
107
108     assertEquals(expectedErrorMsg, parsedErrorResponse);
109   }
110
111   @Test(expected = RuntimeException.class)
112   public void testForExpectedRuntimeException()
113   {
114     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
115     wantedFields.add(PDBDocField.PDB_ID);
116
117     PDBRestRequest request = new PDBRestRequest();
118     request.setFieldToSearchBy("text:");
119     request.setSearchTerm("abc OR text:go:abc");
120     request.setWantedFields(wantedFields);
121     new PDBRestClient().executeRequest(request);
122   }
123
124   @Test
125   public void parsePDBJsonResponseTest()
126   {
127     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
128     wantedFields.add(PDBDocField.MOLECULE_TYPE);
129     wantedFields.add(PDBDocField.PDB_ID);
130     wantedFields.add(PDBDocField.GENUS);
131     wantedFields.add(PDBDocField.GENE_NAME);
132     wantedFields.add(PDBDocField.TITLE);
133
134     PDBRestRequest request = new PDBRestRequest();
135     request.setAllowEmptySeq(false);
136     request.setWantedFields(wantedFields);
137
138     String jsonString = "";
139     try
140     {
141       jsonString = readJsonStringFromFile("test/jalview/io/pdb_response_json.txt");
142     } catch (IOException e)
143     {
144       e.printStackTrace();
145     }
146     PDBRestResponse response = PDBRestClient.parsePDBJsonResponse(
147             jsonString, request);
148     assertTrue(response.getSearchSummary() != null);
149     assertTrue(response.getNumberOfItemsFound() == 931);
150     assertTrue(response.getSearchSummary().size() == 14);
151   }
152
153   @Test
154   public void getPDBIdColumIndexTest()
155   {
156     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
157     wantedFields.add(PDBDocField.MOLECULE_TYPE);
158     wantedFields.add(PDBDocField.GENUS);
159     wantedFields.add(PDBDocField.GENE_NAME);
160     wantedFields.add(PDBDocField.TITLE);
161     wantedFields.add(PDBDocField.PDB_ID);
162     assertEquals(5, PDBRestClient.getPDBIdColumIndex(wantedFields, true));
163     assertEquals(4, PDBRestClient.getPDBIdColumIndex(wantedFields, false));
164   }
165
166   public String readJsonStringFromFile(String filePath) throws IOException
167   {
168     String fileContent;
169     BufferedReader br = new BufferedReader(new FileReader(filePath));
170     try
171     {
172       StringBuilder sb = new StringBuilder();
173       String line = br.readLine();
174
175       while (line != null)
176       {
177         sb.append(line);
178         sb.append(System.lineSeparator());
179         line = br.readLine();
180         }
181       fileContent = sb.toString();
182     } finally
183     {
184       br.close();
185     }
186     return fileContent;
187   }
188
189
190 }