//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.history.helpers;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import uk.gov.dstl.baleen.core.history.BaleenHistory;
import uk.gov.dstl.baleen.core.history.DocumentHistory;
import uk.gov.dstl.baleen.core.history.HistoryEvent;
import uk.gov.dstl.baleen.core.history.HistoryEvents;
import uk.gov.dstl.baleen.core.history.Recordable;
import uk.gov.dstl.baleen.core.history.RecordableHistoryEvent;
import uk.gov.dstl.baleen.core.history.impl.RecordableImpl;
public class AbstractHistoryTest {
private static final String TEST_EVENT_TYPE = "testing";
private Recordable rA= new RecordableImpl(1, "a", 0, 1, "trA");
private Recordable rB = new RecordableImpl(2, "b", 0, 1, "trB");
private String ref1 = "ref1";
private String ref2 = "ref2";
public AbstractHistoryTest() {
super();
}
public void testGenericHistory(BaleenHistory history) {
DocumentHistory dh1 = history.getHistory("doc1");
dh1.add(HistoryEvents.createAdded(rA, ref1));
dh1.add(HistoryEvents.createAdded(rB, ref1));
dh1.add(new RecordableHistoryEvent(TEST_EVENT_TYPE, rA, ref1, TEST_EVENT_TYPE));
dh1.add(HistoryEvents.createMerged(rA, ref2, 3));
dh1.add(HistoryEvents.createMerged(rB, ref2, rA.getInternalId()));
dh1.add(HistoryEvents.createRemoved(rA, ref2));
DocumentHistory dh2 = history.getHistory("doc2");
dh1.add(HistoryEvents.createAdded(rB, ref1));
dh2.close();
Collection<HistoryEvent> allHistory = dh1.getAllHistory();
Collection<HistoryEvent> aHistory = dh1.getHistory(rA.getInternalId());
Collection<HistoryEvent> bHistory = dh1.getHistory(rB.getInternalId());
assertFalse(allHistory.isEmpty());
assertEquals(allHistory.size(), aHistory.size() + bHistory.size());
List<HistoryEvent> ahe = new ArrayList<>(aHistory);
assertEquals(4, aHistory.size());
assertEquals(HistoryEvents.ADDED_TYPE, ahe.get(0).getEventType());
assertEquals(TEST_EVENT_TYPE, ahe.get(1).getEventType());
assertEquals(HistoryEvents.MERGED_TYPE, ahe.get(2).getEventType());
assertEquals(HistoryEvents.REMOVED_TYPE, ahe.get(3).getEventType());
dh1.close();
// Should still be able to get the history after DocumentHistory is closed
DocumentHistory reopened = history.getHistory("doc1");
Collection<HistoryEvent> reopenedAHistory = reopened.getAllHistory();
// We could test that the are the same here (give or take ordering)
assertEquals(allHistory.size(), reopenedAHistory.size());
// Close a nonexistent document
history.closeHistory("missing doc");
}
}