// escidoc:2148921 released item with components escidoc:2149144, 2149275, 2149276, 2149277,
  // 2149278
  // has no reference
  @Test
  public void testReleasedItemWithManyComponents() throws Exception {

    indexer.indexItemsStart(new File(TEST_RESOURCES_OBJECTS + "escidoc_2148921"));
    indexer.finalizeIndex();

    validator = new Validator(indexer);
    Map<String, Set<Fieldable>> fieldMap = validator.getFieldsOfDocument();

    assertTrue(
        "Expected 1 Found " + indexer.getIndexingReport().getFilesIndexingDone(),
        indexer.getIndexingReport().getFilesIndexingDone() == 1);
    assertTrue(indexer.getIndexingReport().getFilesErrorOccured() == 0);
    assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfTime() == 0);

    assertTrue(fieldMap != null);

    switch (indexer.getCurrentIndexMode()) {
      case LATEST_RELEASE:
        break;

      case LATEST_VERSION:
        assertTrue(fieldMap.get("/properties/latest-release/id") != null);
        assertTrue(fieldMap.get("sort/properties/latest-release/id") == null);
        assertTrue(
            fieldMap
                .get("/components/component/properties/creation-date")
                .iterator()
                .next()
                .stringValue()
                .startsWith("2015"));
        break;
    }
  }
  // escidoc:2087580 item without component in status pending
  // has no reference
  @Test
  public void testPendingItem() throws Exception {

    indexer.indexItemsStart(new File(TEST_RESOURCES_OBJECTS + "escidoc_2087580"));
    indexer.finalizeIndex();

    validator = new Validator(indexer);
    Map<String, Set<Fieldable>> fieldMap = validator.getFieldsOfDocument();

    switch (indexer.getCurrentIndexMode()) {
      case LATEST_RELEASE:
        assertTrue(
            "Expected 0 Found " + indexer.getIndexingReport().getFilesIndexingDone(),
            indexer.getIndexingReport().getFilesIndexingDone() == 0);
        assertTrue(indexer.getIndexingReport().getFilesErrorOccured() == 0);
        assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfTime() == 0);

        assertTrue(fieldMap == null);
        break;

      case LATEST_VERSION:
        assertTrue(
            "Expected 1 Found " + indexer.getIndexingReport().getFilesIndexingDone(),
            indexer.getIndexingReport().getFilesIndexingDone() == 1);
        assertTrue(indexer.getIndexingReport().getFilesErrorOccured() == 0);
        assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfTime() == 0);

        assertTrue(fieldMap != null);

        assertTrue(fieldMap.get("/properties/latest-release/id") == null);
        assertTrue(fieldMap.get("sort/properties/latest-release/id") == null);
        break;
    }
  }
  // escidoc:2146780 item with 1 component (escidoc:2147085 internal-managed, visibility private)
  // has no reference
  @Test
  public void testItemWithPrivateComponent() throws Exception {

    indexer.indexItemsStart(new File(TEST_RESOURCES_OBJECTS + "escidoc_2146780"));
    indexer.finalizeIndex();

    assertTrue(
        "Expected 1 Found " + indexer.getIndexingReport().getFilesIndexingDone(),
        indexer.getIndexingReport().getFilesIndexingDone() == 1);
    assertTrue(indexer.getIndexingReport().getFilesErrorOccured() == 0);
    assertTrue(indexer.getIndexingReport().getFilesIndexingDone() == 1);
    assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfTime() == 0);

    validator = new Validator(indexer);
    Map<String, Set<Fieldable>> fieldMap = validator.getFieldsOfDocument();

    Set<Fieldable> fields = fieldMap.get(getFieldNameFor("stored_filename1"));
    assertTrue(fields == null);
    fields = fieldMap.get(getFieldNameFor("stored_fulltext"));

    switch (indexer.getCurrentIndexMode()) {
      case LATEST_RELEASE:
        assertTrue(fields == null);
        break;
      case LATEST_VERSION:
        assertTrue(fields != null);
        break;
    }
  }
 private String getFieldNameFor(String name) {
   switch (indexer.getCurrentIndexMode()) {
     case LATEST_RELEASE:
       return name;
     case LATEST_VERSION:
       return "aa_" + name;
   }
   return null;
 }
  @Test
  // escidoc_2110119 with component escidoc_2110752
  // escidoc:2110541 item mit 1 components (escidoc:2111415 internal, public visibility)
  // escidoc:2095302 item mit 1 locator
  // some items have no reference
  public void testDir() throws Exception {

    indexer.indexItemsStart(new File(TEST_RESOURCES_OBJECTS));
    indexer.finalizeIndex();

    switch (indexer.getCurrentIndexMode()) {
      case LATEST_RELEASE:
        assertTrue(
            "Expected "
                + INDEXING_DONE_LATEST_RELEASE
                + " Found "
                + indexer.getIndexingReport().getFilesIndexingDone(),
            indexer.getIndexingReport().getFilesIndexingDone() == INDEXING_DONE_LATEST_RELEASE);
        assertTrue(
            "Is " + indexer.getIndexingReport().getFilesSkippedBecauseOfStatusOrType(),
            indexer.getIndexingReport().getFilesSkippedBecauseOfStatusOrType()
                == SKIPPED_LATEST_RELEASE);
        break;
      case LATEST_VERSION:
        assertTrue(
            "Expected "
                + INDEXING_DONE_LATEST_VERSION
                + " Found "
                + indexer.getIndexingReport().getFilesIndexingDone(),
            indexer.getIndexingReport().getFilesIndexingDone() == INDEXING_DONE_LATEST_VERSION);
        assertTrue(
            "Is " + indexer.getIndexingReport().getFilesSkippedBecauseOfStatusOrType(),
            indexer.getIndexingReport().getFilesSkippedBecauseOfStatusOrType()
                == SKIPPED_LATEST_VERSION);
        break;
    }

    assertTrue(indexer.getIndexingReport().getFilesErrorOccured() == INDEXING_ERROR_OCCURED);
    assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfTime() == 0);
  }
  // escidoc:2111711 released item with 3 component; escidoc:2111710 locator and escidoc:2111713 pdf
  // (audience), escidoc:2111714 htm (public)
  // has reference
  @Test
  public void testReleasedItem_2111711() throws Exception {
    indexer.indexItemsStart(new File(TEST_RESOURCES_OBJECTS + "escidoc_2111711"));
    indexer.finalizeIndex();

    assertTrue(
        "Expected 1 found " + indexer.getIndexingReport().getFilesIndexingDone(),
        indexer.getIndexingReport().getFilesIndexingDone() == 1);
    assertTrue(indexer.getIndexingReport().getFilesErrorOccured() == 0);
    assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfTime() == 0);
    assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfStatusOrType() == 0);

    validator = new Validator(indexer);

    Map<String, Set<Fieldable>> fieldMap = validator.getFieldsOfDocument();

    // one component has audience visibility, the other is of mime-type text/html (non supported for
    // text extraction)
    Set<Fieldable> fields = fieldMap.get(getFieldNameFor("stored_filename"));

    switch (indexer.getCurrentIndexMode()) {
      case LATEST_RELEASE:
        assertTrue(fields == null);
        assertTrue(fieldMap.get(getFieldNameFor("stored_filename")) == null);
        assertTrue(fieldMap.get(getFieldNameFor("stored_fulltext")) == null);
        break;

      case LATEST_VERSION:
        assertTrue(fields != null);
        assertTrue(fieldMap.get(getFieldNameFor("stored_filename")) != null);
        assertTrue(fieldMap.get(getFieldNameFor("stored_fulltext")) != null);
        break;
    }
    validator.compareToReferenceIndex();
    assertTrue(
        Arrays.toString(indexer.getIndexingReport().getErrorList().toArray()),
        indexer.getIndexingReport().getErrorList().size() == 0);
  }
  // escidoc:2149549 released item, no component, no locator
  // has no reference - test for organizational unit resolution
  @Test
  public void testItem_2149549() throws Exception {
    indexer.createDatabase();
    indexer.indexItemsStart(new File(TEST_RESOURCES_OBJECTS + "escidoc_2149549"));
    indexer.finalizeIndex();

    assertTrue(
        "Expected 1 found " + indexer.getIndexingReport().getFilesIndexingDone(),
        indexer.getIndexingReport().getFilesIndexingDone() == 1);
    assertTrue(indexer.getIndexingReport().getFilesErrorOccured() == 0);
    assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfTime() == 0);
    assertTrue(indexer.getIndexingReport().getFilesSkippedBecauseOfStatusOrType() == 0);

    validator = new Validator(indexer);
    Map<String, Set<Fieldable>> fieldMap = validator.getFieldsOfDocument();

    Set<Fieldable> fields = null;

    switch (indexer.getCurrentIndexMode()) {
      case LATEST_RELEASE:
        fields = fieldMap.get("escidoc.publication.creator.compound.organization-path-identifiers");
        break;
      case LATEST_VERSION:
        fields =
            fieldMap.get(
                "/md-records/md-record/publication/creator/compound/organization-path-identifiers");
    }
    assertTrue(fields != null);

    Iterator<Fieldable> it = fields.iterator();

    while (it.hasNext()) {
      String s = ((Fieldable) it.next()).stringValue();
      assertTrue(s.contains("escidoc:24022"));
      assertTrue(s.contains("escidoc:24021"));
      assertTrue(s.contains("escidoc:persistent13"));
    }
  }