@Test
public void testMutateWithList() {

  Put put = new Put(Bytes.toBytes("rowKey"));
  Delete delete = new Delete(Bytes.toBytes("to-be-deleted-row"));
  Append append = new Append(Bytes.toBytes("appended-row"));
  RowMutationEntry rowEntryForPut = RowMutationEntry.create("rowKey");
  RowMutationEntry rowEntryForDelete = RowMutationEntry.create("to-be-deleted-row");
  ReadModifyWriteRow readModifyWriteRow = ReadModifyWriteRow.create(TABLE_ID, "appended-row");
  when(mockRequestAdapter.adaptEntry(put)).thenReturn(rowEntryForPut);
  when(mockRequestAdapter.adaptEntry(delete)).thenReturn(rowEntryForDelete);
  when(mockRequestAdapter.adapt(append)).thenReturn(readModifyWriteRow);
  when(mockBulkMutation.add(rowEntryForPut)).thenReturn(ApiFutures.immediateFuture(null));
  when(mockBulkMutation.add(rowEntryForDelete)).thenReturn(ApiFutures.immediateFuture(null));
  when(mockDataClient.readModifyWriteRowAsync(readModifyWriteRow))
      .thenReturn(ApiFutures.immediateFuture(Result.EMPTY_RESULT));
  asyncBufferedMutator
      .mutate(Arrays.asList(put, delete, append))
      .forEach(
          future -> {
            try {
              future.get();
            } catch (InterruptedException | ExecutionException e) {
              throw new AssertionError("BigtableAsyncBufferedMutator#mutate test failed");
            }
          });
  verify(mockRequestAdapter).adaptEntry(put);
  verify(mockRequestAdapter).adaptEntry(delete);
  verify(mockRequestAdapter).adapt(append);
  verify(mockBulkMutation).add(rowEntryForPut);
  verify(mockBulkMutation).add(rowEntryForDelete);
  verify(mockDataClient).readModifyWriteRowAsync(readModifyWriteRow);
}