package marubinotto.piggydb.model.fragments; import static marubinotto.util.time.DateTime.setCurrentTimeForTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import marubinotto.piggydb.model.Fragment; import marubinotto.piggydb.model.FragmentRepository; import marubinotto.piggydb.model.enums.FragmentField; import marubinotto.piggydb.model.query.FragmentsByTime; import marubinotto.util.paging.Page; import marubinotto.util.time.DateTime; import marubinotto.util.time.Month; import org.junit.Before; import org.junit.Test; public class FragmentsByTimeTest extends FragmentRepositoryTestBase { protected long id1; protected long id2; protected long id3; public FragmentsByTimeTest(RepositoryFactory<FragmentRepository> factory) { super(factory); } @Before public void given() throws Exception { super.given(); // Register setCurrentTimeForTest(2008, 1, 1); this.object.getHome(false, getOwner()); this.id1 = this.object.register(newFragmentWithTitle("title1")); setCurrentTimeForTest(2008, 1, 2, 10, 0, 0); this.id2 = this.object.register(newFragmentWithTitle("title2")); setCurrentTimeForTest(2008, 1, 2, 15, 0, 0); this.id3 = this.object.register(newFragmentWithTitle("title3")); // Update setCurrentTimeForTest(2008, 1, 3); this.object.update(this.object.get(this.id1)); setCurrentTimeForTest(2008, 1, 4, 10, 0, 0); this.object.update(this.object.get(this.id2)); setCurrentTimeForTest(2008, 1, 4, 15, 0, 0); this.object.update(this.object.get(this.id3)); setCurrentTimeForTest(null); } private FragmentsByTime getQuery() throws Exception { return (FragmentsByTime)this.object.getQuery(FragmentsByTime.class); } // By creation month @Test public void noCreationInSpecifiedMonth() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria(new Month(2008, 2), FragmentField.CREATION_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertTrue(page.isEmpty()); } @Test public void threeCreationsInSpecifiedMonth() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria(new Month(2008, 1), FragmentField.CREATION_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertEquals(3, page.size()); assertEquals("title3", page.get(0).getTitle()); assertEquals("title2", page.get(1).getTitle()); assertEquals("title1", page.get(2).getTitle()); } // By creation day @Test public void noCreationOnSpecifiedDay() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria( new DateTime(2008, 1, 3).toDayInterval(), FragmentField.CREATION_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertTrue(page.isEmpty()); } @Test public void oneCreationOnSpecifiedDay() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria( new DateTime(2008, 1, 1).toDayInterval(), FragmentField.CREATION_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertEquals(1, page.size()); assertEquals("title1", page.get(0).getTitle()); } @Test public void twoCreationsOnSpecifiedDay() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria( new DateTime(2008, 1, 2).toDayInterval(), FragmentField.CREATION_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertEquals(2, page.size()); assertEquals("title3", page.get(0).getTitle()); assertEquals("title2", page.get(1).getTitle()); } // By update day @Test public void noUpdateOnSpecifiedDay() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria( new DateTime(2007, 1, 1).toDayInterval(), FragmentField.UPDATE_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertTrue(page.isEmpty()); } @Test public void oneUpdateOnSpecifiedDay() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria( new DateTime(2008, 1, 3).toDayInterval(), FragmentField.UPDATE_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertEquals(1, page.size()); assertEquals("title1", page.get(0).getTitle()); } @Test public void twoUpdatesOnSpecifiedDay() throws Exception { FragmentsByTime query = getQuery(); query.setCriteria( new DateTime(2008, 1, 4).toDayInterval(), FragmentField.UPDATE_DATETIME); Page<Fragment> page = query.getPage(5, 0); assertEquals(2, page.size()); assertEquals("title3", page.get(0).getTitle()); assertEquals("title2", page.get(1).getTitle()); } }