private LifecycleInfo addLifecycle(String name) throws Exception {

    LifecycleInfo origLife = new LifecycleInfo();
    RichTextInfo rti = new RichTextInfo();
    rti.setFormatted("<b>Formatted</b> lifecycle for testing purposes");
    rti.setPlain("Plain lifecycle for testing purposes");
    origLife.setDescr(rti);
    origLife.setKey(name);
    origLife.setName("TEST_NAME");
    origLife.setRefObjectUri("TEST_URI");
    AttributeInfo attr = new AttributeInfo();
    attr.setKey("attribute.key");
    attr.setValue("attribute value");
    origLife.getAttributes().add(attr);

    return stateService.createLifecycle(origLife.getKey(), origLife, callContext);
  }
  private StateInfo addState(LifecycleInfo lifecycleInfo, String state, boolean isInitialState)
      throws Exception {

    StateInfo orig = new StateInfo();
    orig.setKey(state);
    orig.setLifecycleKey(lifecycleInfo.getKey());
    RichTextInfo rti = new RichTextInfo();
    rti.setFormatted("<b>Formatted again</b> state for testing purposes");
    rti.setPlain("Plain state again for testing purposes");
    orig.setDescr(rti);
    orig.setName("Testing state");
    Date effDate = new Date();
    orig.setEffectiveDate(effDate);
    Calendar cal = Calendar.getInstance();
    cal.set(2022, 8, 23);
    orig.setExpirationDate(cal.getTime());
    AttributeInfo attr = new AttributeInfo();
    attr.setKey("attribute.key");
    attr.setValue("attribute value");
    orig.getAttributes().add(attr);
    orig.setIsInitialState(isInitialState);

    return stateService.createState(orig.getLifecycleKey(), orig.getKey(), orig, callContext);
  }
  @Test
  public void testLuiServiceLuiSetMethods() throws Throwable {
    System.out.println("starting tests...");

    String luiSetTypeKey = "test.lui.set.type.key.test";
    LuiSetInfo luiSetInfo = new LuiSetInfo();
    RichTextInfo descr = new RichTextInfo();
    descr.setPlain("descr");
    luiSetInfo.setDescr(descr);
    luiSetInfo.setStateKey("test.lui.set.state.key.test");
    luiSetInfo.setTypeKey(luiSetTypeKey);
    luiSetInfo.setName("name");
    luiSetInfo.setEffectiveDate(new Date());
    luiSetInfo.setExpirationDate(new Date());
    luiSetInfo.setMeta(new MetaInfo());
    luiSetInfo.setAttributes(new ArrayList<AttributeInfo>());

    // create
    LuiSetInfo created = luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext);
    assertNotNull(created);
    assertTrue(UUIDHelper.isUUID(created.getId()));

    // read
    LuiSetInfo retrieved = luiService.getLuiSet(created.getId(), callContext);
    assertNotNull(retrieved);
    assertEquals(created.getId(), retrieved.getId());

    // update
    retrieved.setName("updated_name");
    LuiSetInfo replaced = luiService.updateLuiSet(created.getId(), retrieved, callContext);
    LuiSetInfo updated = luiService.getLuiSet(created.getId(), callContext);
    assertNotNull(replaced);
    assertNotNull(updated);
    assertEquals(created.getId(), replaced.getId());
    assertEquals(created.getId(), updated.getId());
    assertEquals(created.getName(), replaced.getName());
    assertEquals(retrieved.getName(), updated.getName());

    // delete
    StatusInfo deleteStatus = luiService.deleteLuiSet(created.getId(), callContext);
    assertNotNull(deleteStatus);
    assertTrue(deleteStatus.getIsSuccess());
    try {
      luiService.getLuiSet(created.getId(), callContext);
      fail("should have thrown DoesNotExistException");
    } catch (DoesNotExistException ex) {
      assertNotNull(ex.getMessage());
      assertEquals("luiSetId not found: " + retrieved.getId(), ex.getMessage());
    }

    // bulk operation -- get a bunch of luis using a list of their ids
    List<String> createdLuiSetIds = new ArrayList<String>();
    createdLuiSetIds.add(luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext).getId());
    createdLuiSetIds.add(luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext).getId());
    createdLuiSetIds.add(luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext).getId());
    List<LuiSetInfo> bulkRetrieved_luiSets =
        luiService.getLuiSetsByIds(createdLuiSetIds, callContext);
    assertNotNull(bulkRetrieved_luiSets);
    assertTrue(bulkRetrieved_luiSets.size() == 3);
    for (LuiSetInfo r : bulkRetrieved_luiSets) {
      assertTrue(createdLuiSetIds.contains(r.getId()));
    }

    // bulk operation -- get the list of lui-ids of a lui-set
    List<String> luiIds = new ArrayList<String>();
    luiIds.add(UUIDHelper.genStringUUID());
    luiIds.add(UUIDHelper.genStringUUID());
    luiSetInfo.setLuiIds(luiIds);
    created = luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext);
    List<String> bulkRetrieved_luiIds =
        luiService.getLuiIdsFromLuiSet(created.getId(), callContext);
    assertNotNull(bulkRetrieved_luiIds);
    assertEquals(luiIds.size(), bulkRetrieved_luiIds.size());
    assertTrue(bulkRetrieved_luiIds.containsAll(luiIds));

    // bulk operation -- get a list of lui-ids that contain a specific lui-id
    String targetLuiId = UUIDHelper.genStringUUID();
    List<String> targetLuiIdsList = new ArrayList<String>();
    targetLuiIdsList.add(targetLuiId);
    luiSetInfo.setLuiIds(targetLuiIdsList);
    // create a bunch of lui-sets containing references to that lui-id
    List<LuiSetInfo> bulkCreated_luiSets = new ArrayList<LuiSetInfo>();
    bulkCreated_luiSets.add(luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext));
    bulkCreated_luiSets.add(luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext));
    bulkCreated_luiSets.add(luiService.createLuiSet(luiSetTypeKey, luiSetInfo, callContext));
    bulkRetrieved_luiSets = luiService.getLuiSetsByLui(targetLuiId, callContext);
    assertNotNull(bulkRetrieved_luiSets);
    assertEquals(3, bulkRetrieved_luiSets.size());
    for (LuiSetInfo luiSet : bulkRetrieved_luiSets) {
      assertTrue(luiSet.getLuiIds().contains(targetLuiId));
    }

    // bulk operation -- get a list of lui-set ids by lui-set type
    luiService.createLuiSet("test.alternate.lui.set.type.key.test", luiSetInfo, callContext);
    bulkRetrieved_luiIds = luiService.getLuiSetIdsByType(luiSetTypeKey, callContext);
    assertEquals(7, bulkRetrieved_luiIds.size());
    for (String id : bulkRetrieved_luiIds) {
      assertEquals(luiSetTypeKey, luiService.getLuiSet(id, callContext).getTypeKey());
    }
    assertEquals(
        1,
        luiService.getLuiSetIdsByType("test.alternate.lui.set.type.key.test", callContext).size());
  }