]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
b06af76145a3c01ec48a28d4433f07d1c8168925
[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 package org.collectionspace.services.client.test;
24
25 import java.util.List;
26 import javax.ws.rs.core.MediaType;
27 import javax.ws.rs.core.Response;
28
29 import org.collectionspace.services.client.CollectionSpaceClient;
30 import org.collectionspace.services.client.RelationClient;
31 import org.collectionspace.services.jaxb.AbstractCommonList;
32 import org.collectionspace.services.relation.RelationsCommon;
33 import org.collectionspace.services.relation.RelationsCommonList;
34 import org.collectionspace.services.relation.RelationshipType;
35
36 import org.jboss.resteasy.client.ClientResponse;
37
38 import org.jboss.resteasy.plugins.providers.multipart.MultipartInput;
39 import org.jboss.resteasy.plugins.providers.multipart.MultipartOutput;
40 import org.jboss.resteasy.plugins.providers.multipart.OutputPart;
41 import org.testng.Assert;
42 import org.testng.annotations.Test;
43
44 import org.slf4j.Logger;
45 import org.slf4j.LoggerFactory;
46
47 /**
48  * RelationServiceTest, carries out tests against a
49  * deployed and running Relation Service.
50  * 
51  * $LastChangedRevision$
52  * $LastChangedDate$
53  */
54 public class RelationServiceTest extends AbstractServiceTestImpl {
55
56    /** The logger. */
57     private final String CLASS_NAME = RelationServiceTest.class.getName();
58     private final Logger logger = LoggerFactory.getLogger(CLASS_NAME);
59
60     /** The SERVICE path component. */
61     final String SERVICE_PATH_COMPONENT = "relations";
62     
63     /** The known resource id. */
64     private String knownResourceId = null;
65     
66     /* (non-Javadoc)
67      * @see org.collectionspace.services.client.test.BaseServiceTest#getClientInstance()
68      */
69     @Override
70     protected CollectionSpaceClient getClientInstance() {
71         return new RelationClient();
72     }
73     
74     /* (non-Javadoc)
75      * @see org.collectionspace.services.client.test.BaseServiceTest#getAbstractCommonList(org.jboss.resteasy.client.ClientResponse)
76      */
77     @Override
78         protected AbstractCommonList getAbstractCommonList(
79                         ClientResponse<AbstractCommonList> response) {
80         return response.getEntity(RelationsCommonList.class);
81     }
82  
83     // ---------------------------------------------------------------
84     // CRUD tests : CREATE tests
85     // ---------------------------------------------------------------
86     // Success outcomes
87     /* (non-Javadoc)
88      * @see org.collectionspace.services.client.test.ServiceTest#create(java.lang.String)
89      */
90     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class)
91     @Override
92     public void create(String testName) throws Exception {
93
94         if (logger.isDebugEnabled()) {
95             logger.debug(testBanner(testName, CLASS_NAME));
96         }
97         // Perform setup, such as initializing the type of service request
98         // (e.g. CREATE, DELETE), its valid and expected status codes, and
99         // its associated HTTP method name (e.g. POST, DELETE).
100         setupCreate();
101
102         // Submit the request to the service and store the response.
103         RelationClient client = new RelationClient();
104         String identifier = createIdentifier();
105         MultipartOutput multipart = createRelationInstance(identifier);
106         ClientResponse<Response> res = client.create(multipart);
107         int statusCode = res.getStatus();
108
109         // Check the status code of the response: does it match
110         // the expected response(s)?
111         //
112         // Does it fall within the set of valid status codes?
113         // Does it exactly match the expected status code?
114         if(logger.isDebugEnabled()){
115             logger.debug(testName + ": status = " + statusCode);
116         }
117         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
118                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
119         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
120
121         // Store the ID returned from the first resource created
122         // for additional tests below.
123         if (knownResourceId == null){
124             knownResourceId = extractId(res);
125             if (logger.isDebugEnabled()) {
126                 logger.debug(testName + ": knownResourceId=" + knownResourceId);
127             }
128         }
129
130         // Store the IDs from every resource created by tests,
131         // so they can be deleted after tests have been run.
132         allResourceIdsCreated.add(extractId(res));
133     }
134
135     /* (non-Javadoc)
136      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#createList(java.lang.String)
137      */
138     @Override
139     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
140         dependsOnMethods = {"create"})
141     public void createList(String testName) throws Exception {
142         for(int i = 0; i < 3; i++){
143             create(testName);
144         }
145     }
146
147     // Failure outcomes
148     // Placeholders until the three tests below can be uncommented.
149     // See Issue CSPACE-401.
150     /* (non-Javadoc)
151      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#createWithEmptyEntityBody(java.lang.String)
152      */
153     @Override
154     public void createWithEmptyEntityBody(String testName) throws Exception {
155         //Should this test really be empty?
156     }
157
158     /* (non-Javadoc)
159      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#createWithMalformedXml(java.lang.String)
160      */
161     @Override
162     public void createWithMalformedXml(String testName) throws Exception {
163         //Should this test really be empty?
164     }
165
166     /* (non-Javadoc)
167      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#createWithWrongXmlSchema(java.lang.String)
168      */
169     @Override
170     public void createWithWrongXmlSchema(String testName) throws Exception {
171         //Should this test really be empty?
172     }
173
174     /*
175     @Override
176     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTest.class,
177         dependsOnMethods = {"create", "testSubmitRequest"})
178     public void createWithEmptyEntityBody(String testName) throws Exception {
179     
180             if (logger.isDebugEnabled()) {
181             logger.debug(testBanner(testName, CLASS_NAME));
182         }
183         // Perform setup.
184         setupCreateWithEmptyEntityBody();
185
186         // Submit the request to the service and store the response.
187         String method = REQUEST_TYPE.httpMethodName();
188         String url = getServiceRootURL();
189         String mediaType = MediaType.APPLICATION_XML;
190         final String entity = "";
191         int statusCode = submitRequest(method, url, mediaType, entity);
192
193         // Check the status code of the response: does it match
194         // the expected response(s)?
195         if(logger.isDebugEnabled()){
196             logger.debug(testName + ": url=" + url +
197                 " status=" + statusCode);
198          }
199         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
200         invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
201         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
202     }
203
204     @Override
205     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTest.class,
206         dependsOnMethods = {"create", "testSubmitRequest"})
207     public void createWithMalformedXml(String testName) throws Exception {
208     
209             if (logger.isDebugEnabled()) {
210             logger.debug(testBanner(testName, CLASS_NAME));
211         }
212         // Perform setup.
213         setupCreateWithMalformedXml();
214
215         // Submit the request to the service and store the response.
216         String method = REQUEST_TYPE.httpMethodName();
217         String url = getServiceRootURL();
218         String mediaType = MediaType.APPLICATION_XML;
219         final String entity = MALFORMED_XML_DATA; // Constant from base class.
220         int statusCode = submitRequest(method, url, mediaType, entity);
221
222         // Check the status code of the response: does it match
223         // the expected response(s)?
224         if(logger.isDebugEnabled()){
225             logger.debug(testName + ": url=" + url +
226                 " status=" + statusCode);
227          }
228         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
229         invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
230         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
231     }
232
233     @Override
234     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTest.class,
235         dependsOnMethods = {"create", "testSubmitRequest"})
236     public void createWithWrongXmlSchema(String testName) throws Exception {
237     
238             if (logger.isDebugEnabled()) {
239             logger.debug(testBanner(testName, CLASS_NAME));
240         }
241         // Perform setup.
242         setupCreateWithWrongXmlSchema();
243
244         // Submit the request to the service and store the response.
245         String method = REQUEST_TYPE.httpMethodName();
246         String url = getServiceRootURL();
247         String mediaType = MediaType.APPLICATION_XML;
248         final String entity = WRONG_XML_SCHEMA_DATA;
249         int statusCode = submitRequest(method, url, mediaType, entity);
250
251         // Check the status code of the response: does it match
252         // the expected response(s)?
253         if(logger.isDebugEnabled()){
254           logger.debug(testName + ": url=" + url +
255               " status=" + statusCode);
256          }
257         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
258         invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
259         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
260     }
261      */
262
263     // ---------------------------------------------------------------
264     // CRUD tests : READ tests
265     // ---------------------------------------------------------------
266     // Success outcomes
267     /* (non-Javadoc)
268      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#read(java.lang.String)
269      */
270     @Override
271     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
272         dependsOnMethods = {"create"})
273     public void read(String testName) throws Exception {
274
275         if (logger.isDebugEnabled()) {
276             logger.debug(testBanner(testName, CLASS_NAME));
277         }
278         // Perform setup.
279         setupRead();
280
281         // Submit the request to the service and store the response.
282         RelationClient client = new RelationClient();
283         ClientResponse<MultipartInput> res = client.read(knownResourceId);
284         int statusCode = res.getStatus();
285
286         // Check the status code of the response: does it match
287         // the expected response(s)?
288         if(logger.isDebugEnabled()){
289             logger.debug(testName + ": status = " + statusCode);
290         }
291         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
292                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
293         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
294
295         // Verify that the resource identifier ...
296         MultipartInput input = (MultipartInput) res.getEntity();
297         RelationsCommon relation = (RelationsCommon) extractPart(input,
298                 client.getCommonPartName(), RelationsCommon.class);
299         Assert.assertNotNull(relation);
300
301     }
302
303     // Failure outcomes
304     /* (non-Javadoc)
305      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#readNonExistent(java.lang.String)
306      */
307     @Override
308     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
309         dependsOnMethods = {"read"})
310     public void readNonExistent(String testName) throws Exception {
311
312         if (logger.isDebugEnabled()) {
313             logger.debug(testBanner(testName, CLASS_NAME));
314         }
315         // Perform setup.
316         setupReadNonExistent();
317
318         // Submit the request to the service and store the response.
319         RelationClient client = new RelationClient();
320         ClientResponse<MultipartInput> res = client.read(NON_EXISTENT_ID);
321         int statusCode = res.getStatus();
322
323         // Check the status code of the response: does it match
324         // the expected response(s)?
325         if(logger.isDebugEnabled()){
326             logger.debug(testName + ": status = " + statusCode);
327         }
328         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
329                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
330         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
331     }
332    
333     // ---------------------------------------------------------------
334     // CRUD tests : READ_LIST tests
335     // ---------------------------------------------------------------
336     // Success outcomes
337     /* (non-Javadoc)
338      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#readList(java.lang.String)
339      */
340     @Override
341     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
342         dependsOnMethods = {"createList", "read"})
343     public void readList(String testName) throws Exception {
344
345         if (logger.isDebugEnabled()) {
346             logger.debug(testBanner(testName, CLASS_NAME));
347         }
348         // Perform setup.
349         setupReadList();
350
351         // Submit the request to the service and store the response.
352         RelationClient client = new RelationClient();
353         ClientResponse<RelationsCommonList> res = client.readList();
354         RelationsCommonList list = res.getEntity();
355         int statusCode = res.getStatus();
356
357         // Check the status code of the response: does it match
358         // the expected response(s)?
359         if(logger.isDebugEnabled()){
360             logger.debug(testName + ": status = " + statusCode);
361         }
362         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
363                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
364         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
365
366         // Optionally output additional data about list members for debugging.
367         boolean iterateThroughList = false;
368         if(iterateThroughList && logger.isDebugEnabled()){
369             List<RelationsCommonList.RelationListItem> items =
370                     list.getRelationListItem();
371             int i = 0;
372             for(RelationsCommonList.RelationListItem item : items){
373                 logger.debug(testName + ": list-item[" + i + "] csid=" +
374                         item.getCsid());
375                 logger.debug(testName + ": list-item[" + i + "] URI=" +
376                         item.getUri());
377                 i++;
378             }
379         }
380
381     }
382
383     // Failure outcomes
384     // None at present.
385
386     // ---------------------------------------------------------------
387     // CRUD tests : UPDATE tests
388     // ---------------------------------------------------------------
389
390     // Success outcomes
391     /* (non-Javadoc)
392      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#update(java.lang.String)
393      */
394     @Override
395     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
396         dependsOnMethods = {"read"})
397     public void update(String testName) throws Exception {
398
399         if (logger.isDebugEnabled()) {
400             logger.debug(testBanner(testName, CLASS_NAME));
401         }
402         // Perform setup.
403         setupUpdate();
404
405         // Retrieve an existing resource that we can update.
406         RelationClient client = new RelationClient();
407         ClientResponse<MultipartInput> res =
408                 client.read(knownResourceId);
409         if(logger.isDebugEnabled()){
410             logger.debug(testName + ": read status = " + res.getStatus());
411         }
412         Assert.assertEquals(res.getStatus(), EXPECTED_STATUS_CODE);
413         if(logger.isDebugEnabled()){
414             logger.debug("Got object to update with ID: " + knownResourceId);
415         }
416         MultipartInput input = (MultipartInput) res.getEntity();
417         RelationsCommon relation = (RelationsCommon) extractPart(input,
418                 client.getCommonPartName(), RelationsCommon.class);
419         Assert.assertNotNull(relation);
420
421         // Update the content of this resource.
422         relation.setDocumentId1("updated-" + relation.getDocumentId1());
423         relation.setDocumentType1("updated-" + relation.getDocumentType1());
424         relation.setDocumentId2("updated-" + relation.getDocumentId2());
425         relation.setDocumentType2("updated-" + relation.getDocumentType2());
426         if(logger.isDebugEnabled()){
427             logger.debug("updated object");
428             logger.debug(objectAsXmlString(relation, RelationsCommon.class));
429         }
430
431         // Submit the request to the service and store the response.
432         MultipartOutput output = new MultipartOutput();
433         OutputPart commonPart = output.addPart(relation, MediaType.APPLICATION_XML_TYPE);
434         commonPart.getHeaders().add("label", client.getCommonPartName());
435         res = client.update(knownResourceId, output);
436         int statusCode = res.getStatus();
437
438         // Check the status code of the response: does it match the expected response(s)?
439         if(logger.isDebugEnabled()){
440             logger.debug(testName + ": status = " + statusCode);
441         }
442         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
443                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
444         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
445
446         input = (MultipartInput) res.getEntity();
447         RelationsCommon updatedObject = (RelationsCommon) extractPart(
448                 input, client.getCommonPartName(),
449                 RelationsCommon.class);
450         Assert.assertNotNull(updatedObject);
451
452         final String msg =
453                 "Data in updated object did not match submitted data.";
454         Assert.assertEquals(
455                 updatedObject.getDocumentId1(), relation.getDocumentId1(), msg);
456         Assert.assertEquals(
457                 updatedObject.getDocumentType1(), relation.getDocumentType1(), msg);
458         Assert.assertEquals(
459                 updatedObject.getDocumentId2(), relation.getDocumentId2(), msg);
460         Assert.assertEquals(
461                 updatedObject.getDocumentType2(), relation.getDocumentType2(), msg);
462
463     }
464
465     // Failure outcomes
466     // Placeholders until the three tests below can be uncommented.
467     // See Issue CSPACE-401.
468     /* (non-Javadoc)
469      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#updateWithEmptyEntityBody(java.lang.String)
470      */
471     @Override
472     public void updateWithEmptyEntityBody(String testName) throws Exception {
473         //Should this test really be empty?
474     }
475
476     /* (non-Javadoc)
477      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#updateWithMalformedXml(java.lang.String)
478      */
479     @Override
480     public void updateWithMalformedXml(String testName) throws Exception {
481         //Should this test really be empty?
482     }
483
484     /* (non-Javadoc)
485      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#updateWithWrongXmlSchema(java.lang.String)
486      */
487     @Override
488     public void updateWithWrongXmlSchema(String testName) throws Exception {
489         //Should this test really be empty?
490     }
491
492     /*
493     @Override
494     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTest.class,
495         dependsOnMethods = {"create", "update", "testSubmitRequest"})
496     public void updateWithEmptyEntityBody(String testName) throws Exception {
497     
498         if (logger.isDebugEnabled()) {
499             logger.debug(testBanner(testName, CLASS_NAME));
500         }
501         // Perform setup.
502         setupUpdateWithEmptyEntityBody();
503
504         // Submit the request to the service and store the response.
505         String method = REQUEST_TYPE.httpMethodName();
506         String url = getResourceURL(knownResourceId);
507         String mediaType = MediaType.APPLICATION_XML;
508         final String entity = "";
509         int statusCode = submitRequest(method, url, mediaType, entity);
510
511         // Check the status code of the response: does it match
512         // the expected response(s)?
513         if(logger.isDebugEnabled()){
514            logger.debug(testName + ": url=" + url +
515                " status=" + statusCode);
516          }
517         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
518         invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
519         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
520     }
521
522     @Override
523     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTest.class,
524         dependsOnMethods = {"create", "update", "testSubmitRequest"})
525     public void updateWithMalformedXml(String testName) throws Exception {
526
527         if (logger.isDebugEnabled()) {
528             logger.debug(testBanner(testName, CLASS_NAME));
529         }
530         // Perform setup.
531         setupUpdateWithMalformedXml();
532
533         // Submit the request to the service and store the response.
534         String method = REQUEST_TYPE.httpMethodName();
535         String url = getResourceURL(knownResourceId);
536         String mediaType = MediaType.APPLICATION_XML;
537         final String entity = MALFORMED_XML_DATA; // Constant from abstract base class.
538         int statusCode = submitRequest(method, url, mediaType, entity);
539
540         // Check the status code of the response: does it match
541         // the expected response(s)?
542         if(logger.isDebugEnabled()){
543             logger.debug(testName + ": url=" + url +
544             " status=" + statusCode);
545          }
546         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
547         invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
548         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
549     }
550
551     @Override
552     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTest.class,
553         dependsOnMethods = {"create", "update", "testSubmitRequest"})
554     public void updateWithWrongXmlSchema(String testName) throws Exception {
555     
556         if (logger.isDebugEnabled()) {
557             logger.debug(testBanner(testName, CLASS_NAME));
558         }
559         // Perform setup.
560         setupUpdateWithWrongXmlSchema();
561
562         // Submit the request to the service and store the response.
563         String method = REQUEST_TYPE.httpMethodName();
564         String url = getResourceURL(knownResourceId);
565         String mediaType = MediaType.APPLICATION_XML;
566         final String entity = WRONG_XML_SCHEMA_DATA; // Constant from abstract base class.
567         int statusCode = submitRequest(method, url, mediaType, entity);
568
569         // Check the status code of the response: does it match
570         // the expected response(s)?
571         if(logger.isDebugEnabled()){
572             logger.debug(testName + ": url=" + url +
573             " status=" + statusCode);
574          }
575         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
576         invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
577         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
578     }
579      */
580
581     /* (non-Javadoc)
582      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#updateNonExistent(java.lang.String)
583      */
584     @Override
585     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
586         dependsOnMethods = {"update", "testSubmitRequest"})
587     public void updateNonExistent(String testName) throws Exception {
588
589         if (logger.isDebugEnabled()) {
590             logger.debug(testBanner(testName, CLASS_NAME));
591         }
592         // Perform setup.
593         setupUpdateNonExistent();
594
595         // Submit the request to the service and store the response.
596         // Note: The ID used in this 'create' call may be arbitrary.
597         // The only relevant ID may be the one used in update(), below.
598         RelationClient client = new RelationClient();
599         MultipartOutput multipart = createRelationInstance(NON_EXISTENT_ID);
600         ClientResponse<MultipartInput> res =
601                 client.update(NON_EXISTENT_ID, multipart);
602         int statusCode = res.getStatus();
603
604         // Check the status code of the response: does it match
605         // the expected response(s)?
606         if(logger.isDebugEnabled()){
607             logger.debug(testName + ": status = " + statusCode);
608         }
609         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
610                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
611         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
612     }
613
614     // ---------------------------------------------------------------
615     // CRUD tests : DELETE tests
616     // ---------------------------------------------------------------
617     // Success outcomes
618     /* (non-Javadoc)
619      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#delete(java.lang.String)
620      */
621     @Override
622     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
623         dependsOnMethods = {"create", "readList", "testSubmitRequest", "update"})
624     public void delete(String testName) throws Exception {
625
626         if (logger.isDebugEnabled()) {
627             logger.debug(testBanner(testName, CLASS_NAME));
628         }
629         // Perform setup.
630         setupDelete();
631
632         // Submit the request to the service and store the response.
633         RelationClient client = new RelationClient();
634         ClientResponse<Response> res = client.delete(knownResourceId);
635         int statusCode = res.getStatus();
636
637         // Check the status code of the response: does it match
638         // the expected response(s)?
639         if(logger.isDebugEnabled()){
640             logger.debug(testName + ": status = " + statusCode);
641         }
642         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
643                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
644         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
645     }
646
647     // Failure outcomes
648     /* (non-Javadoc)
649      * @see org.collectionspace.services.client.test.AbstractServiceTestImpl#deleteNonExistent(java.lang.String)
650      */
651     @Override
652     @Test(dataProvider="testName", dataProviderClass=AbstractServiceTestImpl.class,
653         dependsOnMethods = {"delete"})
654     public void deleteNonExistent(String testName) throws Exception {
655
656         if (logger.isDebugEnabled()) {
657             logger.debug(testBanner(testName, CLASS_NAME));
658         }
659         // Perform setup.
660         setupDeleteNonExistent();
661
662         // Submit the request to the service and store the response.
663         RelationClient client = new RelationClient();
664         ClientResponse<Response> res = client.delete(NON_EXISTENT_ID);
665         int statusCode = res.getStatus();
666
667         // Check the status code of the response: does it match
668         // the expected response(s)?
669         if(logger.isDebugEnabled()){
670             logger.debug(testName + ": status = " + statusCode);
671         }
672         Assert.assertTrue(REQUEST_TYPE.isValidStatusCode(statusCode),
673                 invalidStatusCodeMessage(REQUEST_TYPE, statusCode));
674         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
675     }
676
677     // ---------------------------------------------------------------
678     // RELATE_OBJECT tests
679     // ---------------------------------------------------------------
680     /**
681      * Relate objects.
682      */
683     @Test(dependsOnMethods = {"create"})
684     public void relateObjects() {
685         //Should this test really be empty?
686     }
687
688     // ---------------------------------------------------------------
689     // Utility tests : tests of code used in tests above
690     // ---------------------------------------------------------------
691     /**
692      * Tests the code for manually submitting data that is used by several
693      * of the methods above.
694      */
695     @Test(dependsOnMethods = {"create", "read"})
696     public void testSubmitRequest() {
697
698         setupRead();
699
700         // Submit the request to the service and store the response.
701         String method = ServiceRequestType.READ.httpMethodName();
702         String url = getResourceURL(knownResourceId);
703         int statusCode = submitRequest(method, url);
704
705         // Check the status code of the response: does it match
706         // the expected response(s)?
707         if(logger.isDebugEnabled()){
708             logger.debug("testSubmitRequest: url=" + url +
709                 " status=" + statusCode);
710         }
711         Assert.assertEquals(statusCode, EXPECTED_STATUS_CODE);
712     }
713
714     // ---------------------------------------------------------------
715     // Utility methods used by tests above
716     // ---------------------------------------------------------------
717     /* (non-Javadoc)
718      * @see org.collectionspace.services.client.test.BaseServiceTest#getServicePathComponent()
719      */
720     @Override
721     public String getServicePathComponent() {
722         return SERVICE_PATH_COMPONENT;
723     }
724
725     /**
726      * Creates the relation instance.
727      *
728      * @param identifier the identifier
729      * @return the multipart output
730      */
731     private MultipartOutput createRelationInstance(String identifier) {
732         RelationsCommon relation = new RelationsCommon();
733         fillRelation(relation, identifier);
734
735         MultipartOutput multipart = new MultipartOutput();
736         OutputPart commonPart =
737                 multipart.addPart(relation, MediaType.APPLICATION_XML_TYPE);
738         commonPart.getHeaders().add("label", new RelationClient().getCommonPartName());
739         if(logger.isDebugEnabled()){
740           logger.debug("to be created, relation common");
741           logger.debug(objectAsXmlString(relation, RelationsCommon.class));
742         }
743         return multipart;
744     }
745
746     /**
747      * Fills the relation.
748      *
749      * @param relation the relation
750      * @param identifier the identifier
751      */
752     private void fillRelation(RelationsCommon relation, String identifier) {
753         fillRelation(relation, "Subject-" + identifier,
754                 "SubjectType-" + identifier + "-type",
755                 "Object-" + identifier,
756                 "ObjectType-" + identifier + "-type",
757                 RelationshipType.COLLECTIONOBJECT_INTAKE);
758     }
759
760     /**
761      * Fills the relation.
762      *
763      * @param relation the relation
764      * @param documentId1 the document id1
765      * @param documentType1 the document type1
766      * @param documentId2 the document id2
767      * @param documentType2 the document type2
768      * @param rt the rt
769      */
770     private void fillRelation(RelationsCommon relation,
771             String documentId1, String documentType1,
772             String documentId2, String documentType2,
773             RelationshipType rt) {
774         relation.setDocumentId1(documentId1);
775         relation.setDocumentType1(documentType1);
776         relation.setDocumentId2(documentId2);
777         relation.setDocumentType2(documentType2);
778
779         relation.setRelationshipType(rt);
780     }
781 }