JAL-1668 added PDBDocFieldPreference for configuring rest response summary fields
[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     assertEquals("molecule_type,pdb_id,genus,gene_name,title",
65             PDBRestClient
66                     .getPDBDocFieldsAsCommaDelimitedString(wantedFields));
67   }
68
69   @Test
70   public void parsePDBJsonExceptionStringTest()
71   {
72     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
73     wantedFields.add(PDBDocField.MOLECULE_TYPE);
74     wantedFields.add(PDBDocField.PDB_ID);
75     wantedFields.add(PDBDocField.GENUS);
76     wantedFields.add(PDBDocField.GENE_NAME);
77     wantedFields.add(PDBDocField.TITLE);
78
79     PDBRestRequest request = new PDBRestRequest();
80     request.setAllowEmptySeq(false);
81     request.setResponseSize(100);
82     request.setFieldToSearchBy("text:");
83     request.setSearchTerm("abc");
84     request.setWantedFields(wantedFields);
85
86     String jsonErrorResponse = "";
87     try
88     {
89       jsonErrorResponse = readJsonStringFromFile("test/jalview/io/pdb_request_json_error.txt");
90     } catch (IOException e)
91     {
92       e.printStackTrace();
93     }
94
95     String parsedErrorResponse = PDBRestClient
96             .parseJsonExceptionString(jsonErrorResponse);
97     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\"}";
98
99     assertEquals(expectedErrorMsg, parsedErrorResponse);
100   }
101
102   @Test(expected = RuntimeException.class)
103   public void testForExpectedRuntimeException()
104   {
105     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
106     wantedFields.add(PDBDocField.PDB_ID);
107
108     PDBRestRequest request = new PDBRestRequest();
109     request.setFieldToSearchBy("text:");
110     request.setSearchTerm("abc OR text:go:abc");
111     request.setWantedFields(wantedFields);
112     new PDBRestClient().executeRequest(request);
113   }
114
115   @Test
116   public void parsePDBJsonResponseTest()
117   {
118     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
119     wantedFields.add(PDBDocField.MOLECULE_TYPE);
120     wantedFields.add(PDBDocField.PDB_ID);
121     wantedFields.add(PDBDocField.GENUS);
122     wantedFields.add(PDBDocField.GENE_NAME);
123     wantedFields.add(PDBDocField.TITLE);
124
125     PDBRestRequest request = new PDBRestRequest();
126     request.setAllowEmptySeq(false);
127     request.setWantedFields(wantedFields);
128
129     String jsonString = "";
130     try
131     {
132       jsonString = readJsonStringFromFile("test/jalview/io/pdb_response_json.txt");
133     } catch (IOException e)
134     {
135       e.printStackTrace();
136     }
137     PDBRestResponse response = PDBRestClient.parsePDBJsonResponse(
138             jsonString, request);
139     assertTrue(response.getSearchSummary() != null);
140     assertTrue(response.getNumberOfItemsFound() == 931);
141     assertTrue(response.getSearchSummary().size() == 14);
142   }
143
144   @Test
145   public void getPDBIdColumIndexTest()
146   {
147     List<PDBDocField> wantedFields = new ArrayList<PDBDocField>();
148     wantedFields.add(PDBDocField.MOLECULE_TYPE);
149     wantedFields.add(PDBDocField.GENUS);
150     wantedFields.add(PDBDocField.GENE_NAME);
151     wantedFields.add(PDBDocField.TITLE);
152     wantedFields.add(PDBDocField.PDB_ID);
153     assertEquals(5, PDBRestClient.getPDBIdColumIndex(wantedFields, true));
154     assertEquals(4, PDBRestClient.getPDBIdColumIndex(wantedFields, false));
155   }
156
157   public String readJsonStringFromFile(String filePath) throws IOException
158   {
159     String fileContent;
160     BufferedReader br = new BufferedReader(new FileReader(filePath));
161     try
162     {
163       StringBuilder sb = new StringBuilder();
164       String line = br.readLine();
165
166       while (line != null)
167       {
168         sb.append(line);
169         sb.append(System.lineSeparator());
170         line = br.readLine();
171         }
172       fileContent = sb.toString();
173     } finally
174     {
175       br.close();
176     }
177     return fileContent;
178   }
179
180
181 }