@Test
  public void testGenerateIdWithDupeStringScopes() throws Exception {
    List<String> ids = Lists.newArrayList("r1", "Fonds 1", "Thing 1", "Thing 1", "Thing 2");
    String id = IdGeneratorUtils.joinPath(ids);
    assertEquals("r1-fonds_1-thing_1-thing_1-thing_2", id);

    List<String> ids2 = Lists.newArrayList("il-002798", "M.40", "MAP", "map");
    String id2 = IdGeneratorUtils.joinPath(ids2);
    assertEquals("il_002798-m_40-map-map", id2);

    List<String> ids3 =
        Lists.newArrayList("de-002409", "DE ITS 1.1.0", "1.1.0", "1.1.0", "2399000");
    String id3 = IdGeneratorUtils.joinPath(ids3);
    assertEquals("de_002409-de_its_1_1_0-1_1_0-1_1_0-2399000", id3);
  }
  @Test
  public void testGenerateIdWithPartialDupeStringScopes() throws Exception {
    List<String> ids =
        Lists.newArrayList(
            "r1", "Fonds 1", "Fonds 1 / Subfonds 1", "Fonds 1 / Subfonds 1 / Item 3");
    String id = IdGeneratorUtils.joinPath(ids);
    assertEquals("r1-fonds_1-subfonds_1-item_3", id);

    List<String> ids2 = Lists.newArrayList("il-002798", "M.40", "M.40.MAP");
    String id2 = IdGeneratorUtils.joinPath(ids2);
    assertEquals("il_002798-m_40-map", id2);

    List<String> ids3 =
        Lists.newArrayList("de-002409", "DE ITS 1.1.0", "DE ITS 1.1.0.2", "2399000");
    String id3 = IdGeneratorUtils.joinPath(ids3);
    assertEquals("de_002409-de_its_1_1_0-2-2399000", id3);

    List<String> ids4 =
        Lists.newArrayList(
            "cz-002279",
            "COLLECTION.JMP.SHOAH/T",
            "COLLECTION.JMP.SHOAH/T/2",
            "COLLECTION.JMP.SHOAH/T/2/A",
            "COLLECTION.JMP.SHOAH/T/2/A/1",
            "COLLECTION.JMP.SHOAH/T/2/A/1a",
            "COLLECTION.JMP.SHOAH/T/2/A/1a/028",
            "DOCUMENT.JMP.SHOAH/T/2/A/1a/028");
    String id4 = IdGeneratorUtils.joinPath(ids4);
    // special prefixes are not treated in 'smart' way
    assertEquals(
        "cz_002279-collection_jmp_shoah_t-2-a-1-a-028-document_jmp_shoah_t_2_a_1a_028", id4);

    // The check is case sensitive, so prefix is repeated if case is different
    List<String> ids5 =
        Lists.newArrayList("de-002409", "DE ITS 1.1.0", "de ITS 1.1.0.2", "2399000");
    String id5 = IdGeneratorUtils.joinPath(ids5);
    assertEquals("de_002409-de_its_1_1_0-de_its_1_1_0_2-2399000", id5);
  }
 @Test
 public void testHierarchyCollisions() throws Exception {
   List<String> path1 = Lists.newArrayList("r1", "1-a", "b");
   List<String> path2 = Lists.newArrayList("r1", "1", "a-b");
   assertNotEquals(IdGeneratorUtils.joinPath(path1), IdGeneratorUtils.joinPath(path2));
 }