@Test
  public void testCalculateIndexUpdates_DeleteRow() throws IOException {

    KeyValue keyValue =
        new KeyValue("_row_".getBytes(), "".getBytes(), "".getBytes(), 0L, Type.Delete);
    RowData rowData = createEventRowData("_row_", keyValue);
    indexer.calculateIndexUpdates(ImmutableList.of(rowData), updateCollector);

    assertEquals(Lists.newArrayList("_row_"), updateCollector.getIdsToDelete());
    assertTrue(updateCollector.getDocumentsToAdd().isEmpty());
  }
  @Test
  public void testCalculateIndexUpdates_AddDocument() throws IOException {

    KeyValue keyValue =
        new KeyValue(
            "_row_".getBytes(), "_cf_".getBytes(), "_qual_".getBytes(), "value".getBytes());
    RowData rowData = createEventRowData("_row_", keyValue);
    indexer.calculateIndexUpdates(ImmutableList.of(rowData), updateCollector);

    assertEquals(1, updateCollector.getDocumentsToAdd().size());
    assertEquals("_row_", updateCollector.getDocumentsToAdd().get("_row_").getFieldValue("id"));
    assertTrue(updateCollector.getIdsToDelete().isEmpty());
  }
  @Test
  public void testCalculateIndexUpdates_AddDocumentWithTableName() throws IOException {

    doReturn("custom-table-name").when(indexerConf).getTableNameField();

    KeyValue keyValue =
        new KeyValue(
            "_row_".getBytes(), "_cf_".getBytes(), "_qual_".getBytes(), "value".getBytes());
    RowData rowData = createEventRowData("_row_", keyValue);
    indexer.calculateIndexUpdates(ImmutableList.of(rowData), updateCollector);

    assertEquals(1, updateCollector.getDocumentsToAdd().size());
    List<SolrInputDocument> documents =
        Lists.newArrayList(updateCollector.getDocumentsToAdd().values());
    assertEquals(TABLE_NAME, documents.get(0).getFieldValue("custom-table-name"));
  }
  @Test
  public void testCalculateIndexUpdates_UpdateAndDeleteCombinedForSameCell_UpdateFirst()
      throws IOException {
    KeyValue toAdd =
        new KeyValue(
            "_row_".getBytes(), "_cf_".getBytes(), "_qual_".getBytes(), "value".getBytes());
    KeyValue toDelete =
        new KeyValue("_row_".getBytes(), "_cf_".getBytes(), "_qual_".getBytes(), 0L, Type.Delete);
    RowData addEventRowData = createEventRowData("_row_", toAdd);
    RowData deleteEventRowData = createEventRowData("_row_", toDelete);

    indexer.calculateIndexUpdates(
        Lists.newArrayList(addEventRowData, deleteEventRowData), updateCollector);

    assertEquals(Lists.newArrayList("_row_"), updateCollector.getIdsToDelete());
    assertTrue(updateCollector.getDocumentsToAdd().isEmpty());
  }
  @Test
  public void testCalculateIndexUpdates_UpdateAndDeleteCombinedForSameCell_DeleteFirst()
      throws IOException {
    KeyValue toDelete =
        new KeyValue("_row_".getBytes(), "_cf_".getBytes(), "_qual_".getBytes(), 0L, Type.Delete);
    KeyValue toAdd =
        new KeyValue(
            "_row_".getBytes(), "_cf_".getBytes(), "_qual_".getBytes(), "value".getBytes());
    RowData deleteEventRowData = createEventRowData("_row_", toDelete);
    RowData addEventRowData = createEventRowData("_row_", toAdd);

    indexer.calculateIndexUpdates(
        ImmutableList.of(deleteEventRowData, addEventRowData), updateCollector);

    assertTrue(updateCollector.getIdsToDelete().isEmpty());
    List<SolrInputDocument> documents =
        Lists.newArrayList(updateCollector.getDocumentsToAdd().values());
    assertEquals(1, documents.size());
    assertEquals("_row_", documents.get(0).getFieldValue("id"));
  }