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:
6 * http://www.collectionspace.org
7 * http://wiki.collectionspace.org
9 * Copyright (c)) 2009 Regents of the University of California
11 * Licensed under the Educational Community License (ECL), Version 2.0.
12 * You may not use this file except in compliance with this License.
14 * You may obtain a copy of the ECL 2.0 License at
15 * https://source.collectionspace.org/collection-space/LICENSE.txt
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.
23 package org.collectionspace.services.client.test;
25 import java.io.UnsupportedEncodingException;
26 import java.net.URLEncoder;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.List;
31 import javax.ws.rs.core.Response;
33 import org.collectionspace.services.PersonJAXBSchema;
34 import org.collectionspace.services.client.CollectionSpaceClient;
35 import org.collectionspace.services.client.PersonAuthorityClient;
36 import org.collectionspace.services.client.PersonAuthorityClientUtils;
37 import org.collectionspace.services.client.PoxPayloadOut;
38 import org.collectionspace.services.jaxb.AbstractCommonList;
39 import org.jboss.resteasy.client.ClientResponse;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42 import org.testng.Assert;
43 import org.testng.annotations.AfterClass;
44 import org.testng.annotations.BeforeClass;
45 import org.testng.annotations.Test;
48 * PersonAuthoritySearchTest, carries out search (e.g. partial
49 * term matching) tests against a deployed and running PersonAuthority Service.
51 * $LastChangedRevision: 753 $
52 * $LastChangedDate: 2009-09-23 11:03:36 -0700 (Wed, 23 Sep 2009) $
54 public class PersonAuthoritySearchTest extends BaseServiceTest<AbstractCommonList> {
56 private final String CLASS_NAME = PersonAuthoritySearchTest.class.getName();
57 private final Logger logger = LoggerFactory.getLogger(CLASS_NAME);
60 public String getServicePathComponent() {
61 return PersonAuthorityClient.SERVICE_PATH_COMPONENT;
65 protected String getServiceName() {
66 return PersonAuthorityClient.SERVICE_NAME;
69 final String UTF8_CHARSET_NAME = "UTF-8";
71 // Test name for partial term matching: Lech Wałęsa
73 // For details regarding the łę characters in the last name, see:
74 // http://en.wikipedia.org/wiki/L_with_stroke
75 // http://en.wikipedia.org/wiki/%C4%98
78 final String TEST_PARTIAL_TERM_FORE_NAME = "Lech";
80 // Surname (contains single quote character)
81 final String TEST_PARTIAL_TERM_SUR_NAME_QUOTE = "O'Hara";
83 // Surname (contains two non-USASCII range Unicode UTF-8 characters)
84 final String TEST_PARTIAL_TERM_SUR_NAME_UNICODE = "Wałęsa";
85 // Wrong: "Wa" + "\u0142" + "\u0119" + "sa";
86 // Should also work: "Wa" + '\u0142' + '\u0119' + "sa";
87 // Should also work: "Wa\u0142\u0119sa";
91 final String TEST_PARTIAL_TERM_DISPLAY_NAME_UNICODE =
92 TEST_PARTIAL_TERM_FORE_NAME + " " + TEST_PARTIAL_TERM_SUR_NAME_UNICODE;
95 final String TEST_PARTIAL_TERM_DISPLAY_NAME_QUOTE =
96 TEST_PARTIAL_TERM_FORE_NAME + " " + TEST_PARTIAL_TERM_SUR_NAME_QUOTE;
99 final String TEST_SHORT_ID_UNICODE = "lechWalesa";
102 final String TEST_SHORT_ID_QUOTE = "lechOHara";
104 final String TEST_KWD_BIRTH_PLACE = "Popowo, Poland";
106 final String TEST_KWD_UTF8_STYLE = "Appliqu"+'\u00e8'+"d Arts";
108 final String TEST_KWD_BIO_NOTE_NO_QUOTES =
109 "This is a silly bionote with no so-called quotes.";
111 final String TEST_KWD_BIO_NOTE_DBL_QUOTES =
112 "This is a silly \"bionote\" for testing so called quote_handling";
114 final String TEST_KWD_NO_MATCH = "Foobar";
116 // Non-existent partial term name (first letters of each of the words
117 // in a pangram for the English alphabet).
118 private static final String TEST_PARTIAL_TERM_NON_EXISTENT = "jlmbsoq";
120 /** The known resource id. */
121 private String knownResourceId = null;
123 /** The known resource ref name. */
124 //private String knownResourceRefName = null;
126 /** The known item resource id. */
127 private String knownItemResourceId = null;
129 // The resource ID of an item resource used for partial term matching tests.
130 private String knownItemPartialTermResourceId = null;
132 private List<String> allResourceIdsCreated = new ArrayList<String>();
134 /** The all item resource ids created. */
135 private Map<String, String> allItemResourceIdsCreated =
136 new HashMap<String, String>();
138 // The number of matches expected on each partial term.
139 final int NUM_MATCHES_EXPECTED_COMMON = 2;
140 final int NUM_MATCHES_EXPECTED_SPECIFIC = 1;
142 // The minimum number of characters that must be included
143 // a partial term, in order to permit matching to occur.
144 final int PARTIAL_TERM_MIN_LENGTH = 1;
147 * @see org.collectionspace.services.client.test.BaseServiceTest#getClientInstance()
150 protected CollectionSpaceClient getClientInstance() {
151 return new PersonAuthorityClient();
155 * @see org.collectionspace.services.client.test.BaseServiceTest#getAbstractCommonList(org.jboss.resteasy.client.ClientResponse)
158 protected AbstractCommonList getCommonList(
159 ClientResponse<AbstractCommonList> response) {
160 return response.getEntity(AbstractCommonList.class);
163 private String getPartialTermCommon() {
164 return TEST_PARTIAL_TERM_FORE_NAME;
167 private String getPartialTermUtf8() {
168 return TEST_PARTIAL_TERM_SUR_NAME_UNICODE;
171 private String getPartialTermQuote() {
172 return TEST_PARTIAL_TERM_SUR_NAME_QUOTE;
175 private String getPartialTermNonExistent() {
176 return TEST_PARTIAL_TERM_NON_EXISTENT;
179 private String getPartialTermMinimumLength() {
180 String partialTerm = getPartialTermCommon();
181 if (partialTerm == null || partialTerm.trim().isEmpty()) {
184 if (partialTerm.length() > PARTIAL_TERM_MIN_LENGTH) {
185 return partialTerm.substring(0, PARTIAL_TERM_MIN_LENGTH);
191 private String getKwdTerm() {
192 return TEST_KWD_BIRTH_PLACE;
195 private String getKwdTermUTF8() {
196 return TEST_KWD_UTF8_STYLE;
199 private String getKwdTermNonExistent() {
200 return TEST_KWD_NO_MATCH;
204 public void setup() {
207 } catch (Exception e) {
208 Assert.fail("Could not create new Authority for search tests.", e);
211 createItemsInAuthorityForPartialTermMatch(knownResourceId, null ); //knownResourceRefName);
212 } catch (Exception e) {
213 Assert.fail("Could not create new item in Authority for search tests.", e);
217 // ---------------------------------------------------------------
218 // CRUD tests : READ_LIST tests by partial term match.
219 // ---------------------------------------------------------------
224 * Reads an item list by partial term.
226 @Test(dataProvider="testName", groups = {"readListByPartialTerm"})
227 public void partialTermMatch(String testName) {
228 int numMatchesFound = 0;
229 String partialTerm = getPartialTermCommon();
230 if (logger.isDebugEnabled()) {
231 logger.debug("Attempting match on partial term '" + partialTerm + "' ...");
233 numMatchesFound = readItemListWithFilters(testName, knownResourceId, partialTerm, null);
234 if (logger.isDebugEnabled()) {
235 logger.debug("Found " + numMatchesFound + " match(es), expected " +
236 NUM_MATCHES_EXPECTED_COMMON + " match(es).");
238 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_COMMON);
242 * Reads an item list by partial term, with a partial term that consists
243 * of an all-lowercase variation of the expected match, to test case-insensitive
246 @Test(dataProvider="testName", groups = {"readListByPartialTerm"},
247 dependsOnMethods = {"partialTermMatch"})
248 public void partialTermMatchCaseInsensitiveLowerCase(String testName) {
249 int numMatchesFound = 0;
251 final String partialTerm = getPartialTermCommon().toLowerCase();
252 if (logger.isDebugEnabled()) {
253 logger.debug("Attempting match on partial term '" + partialTerm + "' ...");
256 readItemListWithFilters(testName, knownResourceId, partialTerm, null);
257 if (logger.isDebugEnabled()) {
258 logger.debug("Found " + numMatchesFound + " match(es), expected " +
259 NUM_MATCHES_EXPECTED_COMMON + " match(es).");
261 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_COMMON);
265 * Reads an item list by partial term, with a partial term that consists
266 * of an all-uppercase variation of the expected match, to test case-insensitive
269 @Test(dataProvider="testName",
270 groups = {"readListByPartialTerm"}, dependsOnMethods = {"partialTermMatch"})
271 public void partialTermMatchCaseInsensitiveUpperCase(String testName) {
272 int numMatchesFound = 0;
274 final String partialTerm = getPartialTermCommon().toUpperCase();
275 if (logger.isDebugEnabled()) {
276 logger.debug("Attempting match on partial term '" + partialTerm + "' ...");
279 readItemListWithFilters(testName, knownResourceId, partialTerm, null);
280 if (logger.isDebugEnabled()) {
281 logger.debug("Found " + numMatchesFound + " match(es), expected " +
282 NUM_MATCHES_EXPECTED_COMMON + " match(es).");
284 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_COMMON);
288 * Reads an item list by partial term, with a partial term that is of
289 * the minimum character length that may be expected to be matched.
291 @Test(dataProvider="testName",
292 groups = {"readListByPartialTerm"}, dependsOnMethods = {"partialTermMatch"})
293 public void partialTermMatchMinimumLength(String testName) {
294 int numMatchesFound = 0;
295 String partialTerm = getPartialTermMinimumLength();
296 if (logger.isDebugEnabled()) {
297 logger.debug("Attempting match on partial term '" + partialTerm + "' ...");
299 numMatchesFound = readItemListWithFilters(testName, knownResourceId, partialTerm, null);
300 // Zero matches are expected on a non-existent term.
301 if (logger.isDebugEnabled()) {
302 logger.debug("Found " + numMatchesFound + " match(es), expected " +
303 NUM_MATCHES_EXPECTED_COMMON + " match(es).");
305 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_COMMON);
309 * Reads an item list by partial term, with a partial term that contains
310 * at least one Unicode UTF-8 character (outside the USASCII range).
312 @Test(dataProvider="testName",
313 groups = {"readListByPartialTerm"}, dependsOnMethods = {"partialTermMatch"})
314 public void partialTermMatchUTF8(String testName) {
315 int numMatchesFound = 0;
316 String partialTerm = getPartialTermUtf8();
319 ptEncoded = URLEncoder.encode(partialTerm, UTF8_CHARSET_NAME);
321 catch (UnsupportedEncodingException ex) {
322 throw new RuntimeException("Broken VM does not support UTF-8");
324 if (logger.isDebugEnabled()) {
325 logger.debug("Attempting match on partial term '" + partialTerm + "', Encoded:'"+ptEncoded+"' ...");
328 readItemListWithFilters(testName, knownResourceId, partialTerm, null);
329 if (logger.isDebugEnabled()) {
330 logger.debug("Found " + numMatchesFound + " match(es), expected " +
331 NUM_MATCHES_EXPECTED_SPECIFIC + " match(es).");
333 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_SPECIFIC);
337 * Reads an item list by partial term, with a partial term that contains
338 * at least one Unicode UTF-8 character (outside the USASCII range).
340 @Test(dataProvider="testName",
341 groups = {"readListByPartialTerm"}, dependsOnMethods = {"partialTermMatch"})
342 public void partialTermMatchQuote(String testName) {
343 int numMatchesFound = 0;
344 String partialTerm = getPartialTermQuote();
345 if (logger.isDebugEnabled()) {
346 logger.debug("Attempting match on partial term '" + partialTerm + "' ...");
349 readItemListWithFilters(testName, knownResourceId, partialTerm, null);
350 if (logger.isDebugEnabled()) {
351 logger.debug("Found " + numMatchesFound + " match(es), expected " +
352 NUM_MATCHES_EXPECTED_SPECIFIC + " match(es).");
354 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_SPECIFIC);
358 * Finds terms by keywords.
360 @Test(dataProvider="testName", groups = {"readListByKwdTerm"})
361 public void keywordTermMatch(String testName) {
362 int numMatchesFound = 0;
363 String kwdTerm = getKwdTerm();
364 if (logger.isDebugEnabled()) {
365 logger.debug("Attempting match on kwd term '" + kwdTerm + "' ...");
367 numMatchesFound = readItemListWithFilters(testName, knownResourceId, null, kwdTerm);
368 if (logger.isDebugEnabled()) {
369 logger.debug("Found " + numMatchesFound + " match(es), expected " +
370 NUM_MATCHES_EXPECTED_COMMON + " match(es).");
372 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_COMMON);
376 * Finds terms by keywords.
378 @Test(dataProvider="testName",
379 groups = {"readListByKwdTerm"}, dependsOnMethods = {"keywordTermMatch"})
380 public void keywordTermMatchUTF8(String testName) {
381 int numMatchesFound = 0;
382 String kwdTerm = getKwdTermUTF8();
383 if (logger.isDebugEnabled()) {
384 logger.debug("Attempting match on kwd term '" + kwdTerm + "' ...");
386 numMatchesFound = readItemListWithFilters(testName, knownResourceId, null, kwdTerm);
387 if (logger.isDebugEnabled()) {
388 logger.debug("Found " + numMatchesFound + " match(es), expected " +
389 NUM_MATCHES_EXPECTED_COMMON + " match(es).");
391 Assert.assertEquals(numMatchesFound, NUM_MATCHES_EXPECTED_COMMON);
399 * Reads an item list by partial term, with a partial term that is not
400 * expected to be matched by any term in any resource.
402 @Test(dataProvider="testName",
403 groups = {"readListByPartialTerm"}, dependsOnMethods = {"partialTermMatch"})
404 public void partialTermMatchOnNonexistentTerm(String testName) {
405 int numMatchesFound = 0;
406 int ZERO_MATCHES_EXPECTED = 0;
407 String partialTerm = getPartialTermNonExistent();
408 if (logger.isDebugEnabled()) {
409 logger.debug("Attempting match on partial term '" + partialTerm + "' ...");
411 numMatchesFound = readItemListWithFilters(testName, knownResourceId, partialTerm, null);
412 // Zero matches are expected on a non-existent term.
413 if (logger.isDebugEnabled()) {
414 logger.debug("Found " + numMatchesFound + " match(es), expected " +
415 ZERO_MATCHES_EXPECTED + " match(es).");
417 Assert.assertEquals(numMatchesFound, ZERO_MATCHES_EXPECTED);
421 * Reads an item list by partial term, with a partial term that is not
422 * expected to be matched by any term in any resource.
424 @Test(dataProvider="testName", groups = {"readListByKwdTerm"},
425 dependsOnMethods = {"keywordTermMatch"})
426 public void keywordTermMatchOnNonexistentTerm(String testName) {
427 int numMatchesFound = 0;
428 int ZERO_MATCHES_EXPECTED = 0;
429 String kwdTerm = getKwdTermNonExistent();
430 if (logger.isDebugEnabled()) {
431 logger.debug("Attempting match on kwd term '" + kwdTerm + "' ...");
433 numMatchesFound = readItemListWithFilters(testName, knownResourceId, null, kwdTerm);
434 // Zero matches are expected on a non-existent term.
435 if (logger.isDebugEnabled()) {
436 logger.debug("Found " + numMatchesFound + " match(es), expected " +
437 ZERO_MATCHES_EXPECTED + " match(es).");
439 Assert.assertEquals(numMatchesFound, ZERO_MATCHES_EXPECTED);
443 * Reads an item list by partial term or keywords, given an authority and a term.
444 * Only one of partialTerm or keywords should be specified.
445 * If both are specified, keywords will be ignored.
447 * @param testName Calling test name
448 * @param authorityCsid The CSID of the authority within which partial term matching
450 * @param partialTerm A partial term to match item resources.
451 * @param partialTerm A keyword list to match item resources.
452 * @return The number of item resources matched by the partial term.
454 private int readItemListWithFilters(String testName,
455 String authorityCsid, String partialTerm, String keywords) {
458 int expectedStatusCode = Response.Status.OK.getStatusCode();
459 ServiceRequestType requestType = ServiceRequestType.READ_LIST;
460 testSetup(expectedStatusCode, requestType);
462 // Submit the request to the service and store the response.
463 PersonAuthorityClient client = new PersonAuthorityClient();
464 ClientResponse<AbstractCommonList> res = null;
465 if (authorityCsid != null) {
466 res = client.readItemList(authorityCsid, partialTerm, keywords);
468 Assert.fail("readItemListByPartialTerm passed null csid!");
470 AbstractCommonList list = null;
472 assertStatusCode(res, testName);
473 list = res.getEntity();
476 res.releaseConnection();
480 List<AbstractCommonList.ListItem> items = list.getListItem();
481 int nItemsReturned = items.size();
483 return nItemsReturned;
486 // ---------------------------------------------------------------
487 // Cleanup of resources created during testing
488 // ---------------------------------------------------------------
491 * Deletes all resources created by tests, after all tests have been run.
493 * This cleanup method will always be run, even if one or more tests fail.
494 * For this reason, it attempts to remove all resources created
495 * at any point during testing, even if some of those resources
496 * may be expected to be deleted by certain tests.
498 @AfterClass(alwaysRun=true)
499 public void cleanUp() {
500 String noTest = System.getProperty("noTestCleanup");
501 if(Boolean.TRUE.toString().equalsIgnoreCase(noTest)) {
502 if (logger.isDebugEnabled()) {
503 logger.debug("Skipping Cleanup phase ...");
507 if (logger.isDebugEnabled()) {
508 logger.debug("Cleaning up temporary resources created for testing ...");
510 String parentResourceId;
511 String itemResourceId;
512 PersonAuthorityClient client = new PersonAuthorityClient();
513 parentResourceId = knownResourceId;
514 // Clean up item resources.
515 for (Map.Entry<String, String> entry : allItemResourceIdsCreated.entrySet()) {
516 itemResourceId = entry.getKey();
517 parentResourceId = entry.getValue();
518 // Note: Any non-success responses from the delete operation
519 // below are ignored and not reported.
520 ClientResponse<Response> res =
521 client.deleteItem(parentResourceId, itemResourceId);
522 res.releaseConnection();
524 // Clean up authority resources.
525 for (String resourceId : allResourceIdsCreated) {
526 // Note: Any non-success responses are ignored and not reported.
527 client.delete(resourceId).releaseConnection();
531 // ---------------------------------------------------------------
532 // Utility methods used by tests above
533 // ---------------------------------------------------------------
535 // ---------------------------------------------------------------
536 // Utilities: setup routines for search tests
537 // ---------------------------------------------------------------
539 public void createAuthority() throws Exception {
541 String testName = "createAuthority";
542 if (logger.isDebugEnabled()) {
543 logger.debug(getTestBanner(testName, CLASS_NAME));
547 int expectedStatusCode = Response.Status.CREATED.getStatusCode();
548 ServiceRequestType requestType = ServiceRequestType.CREATE;
549 testSetup(expectedStatusCode, requestType);
551 // Submit the request to the service and store the response.
552 PersonAuthorityClient client = new PersonAuthorityClient();
553 String shortId = createIdentifier();
554 String displayName = "displayName-" + shortId;
555 //String baseRefName = PersonAuthorityClientUtils.createPersonAuthRefName(shortId, null);
556 PoxPayloadOut multipart =
557 PersonAuthorityClientUtils.createPersonAuthorityInstance(
558 displayName, shortId, client.getCommonPartName());
561 ClientResponse<Response> res = client.create(multipart);
563 assertStatusCode(res, testName);
564 newID = PersonAuthorityClientUtils.extractId(res);
567 res.releaseConnection();
570 // Store the refname from the first resource created
571 // for additional tests below.
572 //knownResourceRefName = baseRefName;
573 // Store the ID returned from the first resource created
574 // for additional tests below.
575 if (knownResourceId == null){
576 knownResourceId = newID;
577 //knownResourceRefName = baseRefName;
580 // Store the IDs from every resource created by tests,
581 // so they can be deleted after tests have been run.
582 allResourceIdsCreated.add(newID);
586 * Creates an item in the authority, used for partial term matching tests.
588 * @param authorityCsid The CSID of the Authority in which the term will be created.
589 * @param authRefName The refName of the Authority in which the term will be created.
591 private void createItemsInAuthorityForPartialTermMatch(
592 String authorityCsid, String authRefName)
595 String testName = "createItemsInAuthorityForPartialTermMatch";
597 int expectedStatusCode = Response.Status.CREATED.getStatusCode();
598 ServiceRequestType requestType = ServiceRequestType.CREATE;
599 testSetup(expectedStatusCode, requestType);
601 // Submit the request to the service and store the response.
602 PersonAuthorityClient client = new PersonAuthorityClient();
603 Map<String, String> partialTermPersonMap = new HashMap<String,String>();
605 // Fill the property map for the UNICODE item
607 partialTermPersonMap.put(PersonJAXBSchema.SHORT_IDENTIFIER, TEST_SHORT_ID_UNICODE );
608 partialTermPersonMap.put(PersonJAXBSchema.DISPLAY_NAME_COMPUTED, "false");
609 partialTermPersonMap.put(PersonJAXBSchema.DISPLAY_NAME, TEST_PARTIAL_TERM_DISPLAY_NAME_UNICODE);
610 partialTermPersonMap.put(PersonJAXBSchema.FORE_NAME, TEST_PARTIAL_TERM_FORE_NAME);
611 partialTermPersonMap.put(PersonJAXBSchema.SUR_NAME, TEST_PARTIAL_TERM_SUR_NAME_UNICODE);
612 partialTermPersonMap.put(PersonJAXBSchema.BIRTH_PLACE, TEST_KWD_BIRTH_PLACE);
613 partialTermPersonMap.put(PersonJAXBSchema.GENDER, "male");
614 partialTermPersonMap.put(PersonJAXBSchema.BIO_NOTE, TEST_KWD_BIO_NOTE_NO_QUOTES);
616 Map<String, List<String>> partialTermRepeatablesMap = new HashMap<String, List<String>>();
617 ArrayList<String> styles = new ArrayList<String>();
618 styles.add(TEST_KWD_UTF8_STYLE);
619 partialTermRepeatablesMap.put(PersonJAXBSchema.SCHOOLS_OR_STYLES, styles);
621 createItem(testName, authorityCsid, null /*authRefName*/, client,
622 partialTermPersonMap, partialTermRepeatablesMap);
624 // Adjust the property map for the QUOTE item
626 partialTermPersonMap.put(PersonJAXBSchema.SHORT_IDENTIFIER, TEST_SHORT_ID_QUOTE );
627 partialTermPersonMap.put(PersonJAXBSchema.DISPLAY_NAME, TEST_PARTIAL_TERM_DISPLAY_NAME_QUOTE);
628 partialTermPersonMap.put(PersonJAXBSchema.SUR_NAME, TEST_PARTIAL_TERM_SUR_NAME_QUOTE);
629 partialTermPersonMap.put(PersonJAXBSchema.BIO_NOTE, TEST_KWD_BIO_NOTE_DBL_QUOTES);
631 createItem(testName, authorityCsid, null /*authRefName*/, client,
632 partialTermPersonMap, partialTermRepeatablesMap);
635 private void createItem(
637 String authorityCsid,
639 PersonAuthorityClient client,
640 Map<String, String> partialTermPersonMap,
641 Map<String, List<String>> partialTermRepeatablesMap) throws Exception {
642 PoxPayloadOut multipart =
643 PersonAuthorityClientUtils.createPersonInstance(authorityCsid, null, //authRefName,
644 partialTermPersonMap, partialTermRepeatablesMap, client.getItemCommonPartName() );
647 ClientResponse<Response> res = client.createItem(authorityCsid, multipart);
649 newID = PersonAuthorityClientUtils.extractId(res);
652 res.releaseConnection();
656 // Store the ID returned from the first item resource created
657 // for additional tests below.
658 if (knownItemResourceId == null){
659 knownItemResourceId = newID;
660 if (logger.isDebugEnabled()) {
661 logger.debug(testName + ": knownItemPartialTermResourceId=" + knownItemPartialTermResourceId);
665 // Store the IDs from any item resources created
666 // by tests, along with the IDs of their parents, so these items
667 // can be deleted after all tests have been run.
668 allItemResourceIdsCreated.put(newID, authorityCsid);