]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
b57b1856491e9ed53971ca727b6ddc8d6cac66d1
[tmp/jakarta-migration.git] /
1 /**
2  * This document is a part of the source code and related artifacts
3  * for CollectionSpace, an open source collections management system
4  * for museums and related institutions:
5  *
6  * http://www.collectionspace.org
7  * http://wiki.collectionspace.org
8  *
9  * Copyright © 2009 Regents of the University of California
10  *
11  * Licensed under the Educational Community License (ECL), Version 2.0.
12  * You may not use this file except in compliance with this License.
13  *
14  * You may obtain a copy of the ECL 2.0 License at
15  * https://source.collectionspace.org/collection-space/LICENSE.txt
16  *
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  */
23  
24  package org.collectionspace.services.client.test;
25
26 import java.util.List;
27 import javax.ws.rs.core.Response;
28 import javax.ws.rs.core.Response.Status;
29
30 import org.collectionspace.services.client.IntakeClient;
31 import org.collectionspace.services.client.test.ServiceRequestType;
32 import org.collectionspace.services.intake.Intake;
33 import org.collectionspace.services.intake.IntakeList;
34
35 import org.jboss.resteasy.client.ClientResponse;
36
37 import org.testng.Assert;
38 import org.testng.annotations.Test;
39
40 /**
41  * IntakeServiceTest, carries out tests against a
42  * deployed and running Intake Service.
43  * 
44  * $LastChangedRevision: 511 $
45  * $LastChangedDate: 2009-08-06 20:16:16 +0000 (Thu, 06 Aug 2009) $
46  */
47 public class IntakeServiceTest extends AbstractServiceTest {
48
49     // Instance variables specific to this test.
50     private IntakeClient client = new IntakeClient();
51     final String SERVICE_PATH_COMPONENT = "intakes";
52     private String knownObjectId = null;
53
54
55     // ---------------------------------------------------------------
56     // CRUD tests : CREATE tests
57     // ---------------------------------------------------------------
58
59     // Success outcomes
60     
61     @Override
62     @Test
63     public void create() {
64
65         // Perform setup, such as initializing the type of service request
66         // (e.g. CREATE, DELETE), its valid and expected status codes, and
67         // its associated HTTP method name (e.g. POST, DELETE).
68         setupCreate();
69
70         // Submit the request to the service and store the response.
71         String identifier = createIdentifier();
72         Intake intake = createIntake(identifier);
73         ClientResponse<Response> res = client.create(intake);
74         int statusCode = res.getStatus();
75
76         // Check the status code of the response: does it match the expected response(s)?
77         //
78         // Does it fall within the set of valid status codes?
79         // Does it exactly match the expected status code?
80         verbose("create: status = " + statusCode);
81         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
82             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
83         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
84
85         // Store the ID returned from this create operation for additional tests below.
86         knownObjectId = extractId(res);
87     }
88
89     @Override
90     @Test(dependsOnMethods = {"create"})
91     public void createList() {
92         for(int i = 0; i < 3; i++){
93             create();
94         }
95     }
96
97     // Failure outcomes
98
99     @Override
100     @Test(dependsOnMethods = {"create"}, expectedExceptions = IllegalArgumentException.class)
101     public void createNull() {
102         ClientResponse<Response> res = client.create(null);
103     }
104     
105     // Placeholders until the two tests below can be uncommented.  See Issue CSPACE-401.
106     public void createWithMalformedXml() {}
107     public void createWithWrongXmlSchema() {}
108
109 /*
110     @Override
111     @Test(dependsOnMethods = {"create", "testSubmitRequest"})
112     public void createWithMalformedXml() {
113     
114         // Perform setup.
115         setupCreateWithMalformedXml();
116
117         // Submit the request to the service and store the response.
118         String method = REQUEST_TYPE.httpMethodName();
119         String url = getServiceRootURL();
120         final String entity = MALFORMED_XML_DATA; // Constant from abstract base class.
121         int statusCode = submitRequest(method, url, entity);
122         
123         // Check the status code of the response: does it match the expected response(s)?
124         verbose("createWithMalformedXml url=" + url + " status=" + statusCode);
125         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
126             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
127         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
128     }
129
130     @Override
131     @Test(dependsOnMethods = {"create", "testSubmitRequest"})
132     public void createWithWrongXmlSchema() {
133     
134         // Perform setup.
135         setupCreateWithWrongXmlSchema();
136      
137         // Submit the request to the service and store the response.
138         String method = REQUEST_TYPE.httpMethodName();
139         String url = getServiceRootURL();
140         final String entity = WRONG_XML_SCHEMA_DATA;
141         int statusCode = submitRequest(method, url, entity);
142         
143         // Check the status code of the response: does it match the expected response(s)?
144         verbose("createWithWrongSchema url=" + url + " status=" + statusCode);
145         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
146             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
147         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
148     }
149 */
150
151     // ---------------------------------------------------------------
152     // CRUD tests : READ tests
153     // ---------------------------------------------------------------
154
155     // Success outcomes
156
157     @Override
158     @Test(dependsOnMethods = {"create"})
159     public void read() {
160     
161         // Perform setup.
162         setupRead();
163
164         // Submit the request to the service and store the response.
165         ClientResponse<Intake> res = client.read(knownObjectId);
166         int statusCode = res.getStatus();
167             
168         // Check the status code of the response: does it match the expected response(s)?
169         verbose("read: status = " + statusCode);
170         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
171             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
172         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
173     }
174
175     // Failure outcomes
176
177     @Override
178     @Test(dependsOnMethods = {"read"})
179     public void readNonExistent() {
180
181         // Perform setup.
182         setupReadNonExistent();
183         
184         // Submit the request to the service and store the response.
185         ClientResponse<Intake> res = client.read(NON_EXISTENT_ID);
186         int statusCode = res.getStatus();
187
188         // Check the status code of the response: does it match the expected response(s)?
189         verbose("readNonExistent: status = " + res.getStatus());
190         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
191             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
192         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
193     }
194
195
196     // ---------------------------------------------------------------
197     // CRUD tests : READ_LIST tests
198     // ---------------------------------------------------------------
199
200     // Success outcomes
201
202     @Override
203     @Test(dependsOnMethods = {"createList"})
204     public void readList() {
205     
206         // Perform setup.
207         setupReadList();
208
209         // Submit the request to the service and store the response.
210         ClientResponse<IntakeList> res = client.readList();
211         IntakeList list = res.getEntity();
212         int statusCode = res.getStatus();
213
214         // Check the status code of the response: does it match the expected response(s)?
215         verbose("readList: status = " + res.getStatus());
216         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
217             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
218         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
219
220         // Optionally output additional data about list members for debugging.
221         boolean iterateThroughList = false;
222         if (iterateThroughList && logger.isDebugEnabled()) {
223             List<IntakeList.IntakeListItem> items =
224                 list.getIntakeListItem();
225             int i = 0;
226             for(IntakeList.IntakeListItem item : items){
227                 verbose("readList: list-item[" + i + "] csid=" + item.getCsid());
228                 verbose("readList: list-item[" + i + "] objectNumber=" + item.getEntryNumber());
229                 verbose("readList: list-item[" + i + "] URI=" + item.getUri());
230                 i++;
231             }
232         }
233         
234     }
235
236     // Failure outcomes
237     
238     // None at present.
239
240
241     // ---------------------------------------------------------------
242     // CRUD tests : UPDATE tests
243     // ---------------------------------------------------------------
244
245     // Success outcomes
246
247     @Override
248     @Test(dependsOnMethods = {"create"})
249     public void update() {
250     
251         // Perform setup.
252         setupUpdate();
253
254         // Retrieve an existing resource that we can update.
255         ClientResponse<Intake> res = client.read(knownObjectId);
256         verbose("read: status = " + res.getStatus());
257         Assert.assertEquals(res.getStatus(), EXPECTED_STATUS_CODE);
258         Intake intake = res.getEntity();
259         verbose("Got object to update with ID: " + knownObjectId,
260                 intake, Intake.class);
261
262         // Update the content of this resource.
263         intake.setEntryNumber("updated-" + intake.getEntryNumber());
264         intake.setEntryDate("updated-" + intake.getEntryDate());
265     
266         // Submit the request to the service and store the response.
267         res = client.update(knownObjectId, intake);
268         int statusCode = res.getStatus();
269         Intake updatedObject = res.getEntity();
270
271         // Check the status code of the response: does it match the expected response(s)?
272         verbose("update: status = " + res.getStatus());
273         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
274             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
275         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
276         
277         // Check the contents of the response: does it match what was submitted?
278         verbose("update: ", updatedObject, Intake.class);
279         Assert.assertEquals(updatedObject.getEntryDate(), 
280             intake.getEntryDate(), 
281             "Data in updated object did not match submitted data.");
282     }
283
284     // Failure outcomes
285
286     // Placeholders until the two tests below can be uncommented.  See Issue CSPACE-401.
287     public void updateWithMalformedXml() {}
288     public void updateWithWrongXmlSchema() {}
289
290 /*
291     @Override
292     @Test(dependsOnMethods = {"create", "update", "testSubmitRequest"})
293     public void updateWithMalformedXml() {
294
295         // Perform setup.
296         setupUpdateWithMalformedXml();
297
298         // Submit the request to the service and store the response.
299         String method = REQUEST_TYPE.httpMethodName();
300         String url = getResourceURL(knownObjectId);
301         final String entity = MALFORMED_XML_DATA; // Constant from abstract base class.
302         int statusCode = submitRequest(method, url, entity);
303         
304         // Check the status code of the response: does it match the expected response(s)?
305         verbose("updateWithMalformedXml: url=" + url + " status=" + statusCode);
306         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
307             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
308         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
309     }
310
311     @Override
312     @Test(dependsOnMethods = {"create", "update", "testSubmitRequest"})
313     public void updateWithWrongXmlSchema() {
314     
315         // Perform setup.
316         setupUpdateWithWrongXmlSchema();
317         
318         // Submit the request to the service and store the response.
319         String method = REQUEST_TYPE.httpMethodName();
320         String url = getResourceURL(knownObjectId);
321         final String entity = WRONG_XML_SCHEMA_DATA; // Constant from abstract base class.
322         int statusCode = submitRequest(method, url, entity);
323         
324         // Check the status code of the response: does it match the expected response(s)?
325         verbose("updateWithWrongSchema: url=" + url + " status=" + statusCode);
326         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
327             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
328         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
329     }
330 */
331
332     @Override
333     @Test(dependsOnMethods = {"update", "testSubmitRequest"})
334     public void updateNonExistent() {
335
336         // Perform setup.
337         setupUpdateNonExistent();
338
339         // Submit the request to the service and store the response.
340         // Note: The ID used in this 'create' call may be arbitrary.
341         // The only relevant ID may be the one used in update(), below.
342         Intake intake = createIntake(NON_EXISTENT_ID);
343         ClientResponse<Intake> res =
344           client.update(NON_EXISTENT_ID, intake);
345         int statusCode = res.getStatus();
346
347         // Check the status code of the response: does it match the expected response(s)?
348         verbose("updateNonExistent: status = " + res.getStatus());
349         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
350             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
351         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
352     }
353
354     // ---------------------------------------------------------------
355     // CRUD tests : DELETE tests
356     // ---------------------------------------------------------------
357
358     // Success outcomes
359
360     @Override
361     @Test(dependsOnMethods = 
362         {"create", "read", "update"})
363     public void delete() {
364
365         // Perform setup.
366         setupDelete();
367
368         // Submit the request to the service and store the response.
369         ClientResponse<Response> res = client.delete(knownObjectId);
370         int statusCode = res.getStatus();
371
372         // Check the status code of the response: does it match the expected response(s)?
373         verbose("delete: status = " + res.getStatus());
374         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
375             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
376         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
377     }
378
379     // Failure outcomes
380
381     @Override
382     @Test(dependsOnMethods = {"delete"})
383     public void deleteNonExistent() {
384
385         // Perform setup.
386         setupDeleteNonExistent();
387
388         // Submit the request to the service and store the response.
389         ClientResponse<Response> res = client.delete(NON_EXISTENT_ID);
390         int statusCode = res.getStatus();
391
392         // Check the status code of the response: does it match the expected response(s)?
393         verbose("deleteNonExistent: status = " + res.getStatus());
394         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
395             invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
396         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
397     }
398
399
400     // ---------------------------------------------------------------
401     // Utility tests : tests of code used in tests above
402     // ---------------------------------------------------------------
403
404     /**
405      * Tests the code for manually submitting data that is used by several
406      * of the methods above.
407      */
408     @Test(dependsOnMethods = {"create", "read"})
409     public void testSubmitRequest() {
410
411         // Expected status code: 200 OK
412         final int EXPECTED_STATUS_CODE = Response.Status.OK.getStatusCode();
413
414         // Submit the request to the service and store the response.
415         String method = ServiceRequestType.READ.httpMethodName();
416         String url = getResourceURL(knownObjectId);
417         int statusCode = submitRequest(method, url);
418         
419         // Check the status code of the response: does it match the expected response(s)?
420         verbose("testSubmitRequest: url=" + url + " status=" + statusCode);
421         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
422
423     }           
424
425     // ---------------------------------------------------------------
426     // Utility methods used by tests above
427     // ---------------------------------------------------------------
428
429     @Override
430     public String getServicePathComponent() {
431         // @TODO Determine if it is possible to obtain this
432         // value programmatically.
433         //
434         // We set this in an annotation in the CollectionObjectProxy
435         // interface, for instance.  We also set service-specific
436         // constants in each service module, which might also
437         // return this value.
438         return SERVICE_PATH_COMPONENT;
439     }
440     
441     private Intake createIntake(String identifier) {
442         Intake intake =
443             createIntake(
444                 "entryNumber-" + identifier,
445                 "entryDate-" + identifier);
446         return intake;
447     }
448     
449     private Intake createIntake(String entryNumber, String entryDate) {
450         Intake intake = new Intake();
451         intake.setEntryNumber(entryNumber);
452         intake.setEntryDate(entryDate);
453         return intake;
454     }
455
456 }