package dk.statsbiblioteket.medieplatform.autonomous; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; import static org.mockito.Mockito.mock; import static org.testng.Assert.assertTrue; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; public class SBOIEventIndexTest { private static final String EVENT_ID = "event"; private static final long OLD_TIME = 0l; private static final long FUTURE_TIME = 2000l; private static final long NOW_TIME = 1000l; private SBOIEventIndex sboiEventIndex; private Event oldEvent; private Event newEvent; @BeforeMethod public void createSboiEventIndex() throws Exception { PremisManipulatorFactory pmf = mock(PremisManipulatorFactory.class); DomsEventStorage des = mock(DomsEventStorage.class); sboiEventIndex = new SBOIEventIndex("", pmf, des, 1); } @BeforeMethod public void createTestEvents() throws Exception { oldEvent = createEvent(OLD_TIME); newEvent = createEvent(FUTURE_TIME); } @Test public void testMatchOldEventOneOldEvent() throws Exception { Item item = createItem(oldEvent); EventTrigger.Query query = new EventTrigger.Query(); query.getOldEvents().add(EVENT_ID); boolean match = sboiEventIndex.match(item, query); assertTrue(match); } @Test public void testMatchOldEventOneNewEvent() throws Exception { Item item = createItem(newEvent); EventTrigger.Query query = new EventTrigger.Query(); query.getOldEvents().add(EVENT_ID); boolean match = sboiEventIndex.match(item, query); assertFalse(match); } @Test public void testMatchOldEventOneOldOneNewEvent() throws Exception { Item item = createItem(oldEvent, newEvent); EventTrigger.Query query = new EventTrigger.Query(); query.getOldEvents().add(EVENT_ID); boolean match = sboiEventIndex.match(item, query); assertFalse(match); } @Test public void testMatchFutureEventsFound() throws Exception { Item item = createItem(oldEvent); EventTrigger.Query query = new EventTrigger.Query(); query.getFutureEvents().add(EVENT_ID); boolean match = sboiEventIndex.match(item, query); assertFalse(match); } @Test public void testMatchFutureEventsNotFound() throws Exception { Item item = createItem(); EventTrigger.Query query = new EventTrigger.Query(); query.getFutureEvents().add(EVENT_ID); boolean match = sboiEventIndex.match(item, query); assertTrue(match); } @Test public void testMatchOldSuccessfulEventsFound() throws Exception { Item item = createItem(oldEvent); EventTrigger.Query query = new EventTrigger.Query(); query.getPastSuccessfulEvents().add(EVENT_ID); boolean match = sboiEventIndex.match(item, query); assertTrue(match); } @Test public void testMatchOldSuccessfulEventsNotFound() throws Exception { Item item = createItem(); EventTrigger.Query query = new EventTrigger.Query(); query.getPastSuccessfulEvents().add(EVENT_ID); boolean match = sboiEventIndex.match(item, query); assertFalse(match); } @Test public void testFilterOnlyNewestEvent() throws Exception { List<Event> list = sboiEventIndex.filterNewestEvent(Arrays.asList(oldEvent, newEvent)); assertEquals(Collections.singletonList(newEvent), list); } private Item createItem(Event... events) { Item item = new Item(); item.setLastModified(new Date(NOW_TIME)); item.setEventList(Arrays.asList(events)); return item; } private Event createEvent(long date) { Event event = new Event(); event.setDate(new Date(date)); event.setEventID(EVENT_ID); event.setSuccess(true); return event; } }