package marubinotto.piggydb.model.fragments;
import static marubinotto.util.time.DateTime.setCurrentTimeForTest;
import static org.junit.Assert.assertEquals;
import marubinotto.piggydb.model.Fragment;
import marubinotto.piggydb.model.FragmentRepository;
import marubinotto.piggydb.model.query.FragmentsAllButTrash;
import marubinotto.util.paging.Page;
import org.junit.Before;
import org.junit.Test;
/**
* Query: FragmentsAllButTrash
*/
public class FragmentsAllButTrashTest extends FragmentRepositoryTestBase {
protected long id1;
protected long id2;
protected long id3;
public FragmentsAllButTrashTest(RepositoryFactory<FragmentRepository> factory) {
super(factory);
}
@Before
public void given() throws Exception {
super.given();
setCurrentTimeForTest(2008, 1, 1);
this.id1 = this.object.register(newFragmentWithTitle("title1"));
setCurrentTimeForTest(2008, 1, 2);
this.id2 = this.object.register(newFragmentWithTitle("title2"));
setCurrentTimeForTest(2008, 1, 3);
this.id3 = this.object.register(newFragmentWithTitle("title3"));
setCurrentTimeForTest(null);
}
private FragmentsAllButTrash getQuery() throws Exception {
return (FragmentsAllButTrash)this.object.getQuery(FragmentsAllButTrash.class);
}
@Test
public void orderByUpdateDateDesc() throws Exception {
// When
Page<Fragment> page = getQuery().getPage(3, 0);
// Then
assertEquals(3, page.size());
assertEquals(this.id3, page.get(0).getId().longValue());
assertEquals(this.id2, page.get(1).getId().longValue());
assertEquals(this.id1, page.get(2).getId().longValue());
}
@Test
public void pageIndexOutOfBounds() throws Exception {
getQuery().getPage(3, -1);
getQuery().getPage(3, 10);
// should not throw any exception
}
@Test
public void shouldChangeOrderWhenUpdated() throws Exception {
// Given
setCurrentTimeForTest(2008, 1, 4);
Fragment fragment = this.object.get(this.id1);
fragment.touch(getPlainUser(), true);
this.object.update(fragment);
// When
Page<Fragment> page = getQuery().getPage(3, 0);
// Then
assertEquals(3, page.size());
assertEquals(this.id1, page.get(0).getId().longValue());
assertEquals(this.id3, page.get(1).getId().longValue());
assertEquals(this.id2, page.get(2).getId().longValue());
}
@Test
public void shouldExcludeHome() throws Exception {
this.object.getHome(false, getOwner());
Page<Fragment> page = getQuery().getPage(5, 0);
assertEquals(3, page.size());
}
}