//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.core.history;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import org.apache.uima.resource.ResourceInitializationException;
import org.apache.uima.resource.impl.CustomResourceSpecifier_impl;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import com.google.common.collect.Maps;
import uk.gov.dstl.baleen.core.history.memory.InMemoryBaleenHistory;
@RunWith(MockitoJUnitRunner.Silent.class)
public class InMemoryBaleenHistoryTest {
@Mock
Recordable recordable1;
@Mock
Recordable recordable2;
@Before
public void setUp() {
doReturn(1L).when(recordable1).getInternalId();
doReturn(2L).when(recordable2).getInternalId();
}
@Test
public void testKeySameAndDifferent() throws ResourceInitializationException {
InMemoryBaleenHistory bh = new InMemoryBaleenHistory();
bh.initialize(new CustomResourceSpecifier_impl(), Maps.newHashMap());
DocumentHistory dh1a = bh.getHistory("doc1");
DocumentHistory dh1b = bh.getHistory("doc1");
assertSame(dh1a, dh1b);
DocumentHistory dh2 = bh.getHistory("doc2");
assertNotSame(dh1a, dh2);
}
@Test
public void testClearOnClose() throws ResourceInitializationException {
InMemoryBaleenHistory bh = new InMemoryBaleenHistory();
bh.initialize(new CustomResourceSpecifier_impl(), Maps.newHashMap());
DocumentHistory dh1 = bh.getHistory("doc1");
DocumentHistory dh2 = bh.getHistory("doc2");
dh1.add(HistoryEvents.createAdded(recordable1, null));
dh1.add(HistoryEvents.createAdded(recordable2, null));
dh2.add(HistoryEvents.createAdded(recordable1, null));
dh2.add(HistoryEvents.createAdded(recordable2, null));
assertEquals(2, dh2.getAllHistory().size());
assertEquals(1, dh2.getHistory(1).size());
bh.closeHistory("doc2");
// If reopens should be new
DocumentHistory dh2reopen = bh.getHistory("doc2");
assertNotSame(dh2reopen, dh2);
assertTrue(dh2reopen.getAllHistory().isEmpty());
dh1.close();
assertTrue(dh1.getAllHistory().isEmpty());
dh1.add( HistoryEvents.createAdded(recordable1, null));
assertTrue(dh1.getAllHistory().isEmpty());
DocumentHistory dh1reopen = bh.getHistory("doc1");
assertTrue(dh1reopen.getAllHistory().isEmpty());
bh.destroy();
}
}