package org.springframework.data.simpledb.repository.query; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.simpledb.domain.SimpleDbUser; import org.springframework.data.simpledb.parser.TokenMgrError; import org.springframework.data.simpledb.repository.util.SimpleDbUserBuilder; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.List; import static org.hamcrest.Matchers.is; import static org.junit.Assert.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:simpledb-consistent-repository-context.xml") public class PagedAnnotatedQueryRepositoryTest { @Autowired PagedAnnotatedQueryRepository repository; static List<SimpleDbUser> simpleDbUsers; //Used for performance reasons to delete after class all simpleDbUsers created static PagedAnnotatedQueryRepository staticRepository; @Before public void setUp() { //for performance reasons create 3 entities once and use them to test all queries if(simpleDbUsers == null){ simpleDbUsers = SimpleDbUserBuilder.createUsersWithPrimitiveFields(new float[]{0f, 1.0f, 2.0f, 3.0f, 4.0f, 5f}); repository.save(simpleDbUsers); } } @After public void setUpStaticRepository(){ staticRepository = repository; } @AfterClass public static void tearDown() { staticRepository.deleteAll(); } @Test public void custom_queries_should_return_Page_results_for_PageRequests() { // created users with primitive fields 0f, 1.0f, 2.0f, 3.0f, 4.0f, 5f final int pageNumber = 1; final int pageSize = 1; final Page<SimpleDbUser> page = repository.findUsersWithPrimitiveFieldHigherThan(1.0f, new PageRequest( pageNumber, pageSize)); assertNotNull(page); List<SimpleDbUser> content = page.getContent(); assertEquals(1, content.size()); assertEquals(4, page.getTotalElements()); } @Test public void custom_queries_should_return_List_results_for_PageRequests() { // created users with primitive fields 0f, 1.0f, 2.0f, 3.0f, 4.0f, 5f final int pageNumber = 1; final int pageSize = 2; final List<SimpleDbUser> results = repository.findUserListWithPrimitiveFieldHigherThan(1f, new PageRequest( pageNumber, pageSize)); // 4 and 5 assertEquals(2, results.size()); SimpleDbUser firstResult = results.get(0); assertThat(firstResult.getPrimitiveField(), is(4f)); } @Test public void paged_request_should_work_for_no_elements() { // created users with primitive fields 0f, 1.0f, 2.0f, 3.0f, 4.0f, 5f final int pageNumber = 1; final int pageSize = 1; final Page<SimpleDbUser> page = repository.findUsersWithPrimitiveFieldHigherThan(6.0f, new PageRequest( pageNumber, pageSize)); assertNotNull(page); assertEquals(0, page.getTotalElements()); assertEquals(0, page.getTotalPages()); assertEquals(1, page.getNumber()); assertEquals(0, page.getNumberOfElements()); assertNotNull(page.getContent()); } @Test(expected = TokenMgrError.class) public void paged_request_for_invalid_query_should_throw_exception() { final int pageNumber = 0; final int pageSize = 1; repository.invalidQuery(new PageRequest(pageNumber, pageSize)); } @Test public void paged_request_for_partial_field_should_return_list_of_entities_only_with_requested_fields() { // created users with primitive fields 0f, 1.0f, 2.0f, 3.0f, 4.0f, 5f final int pageNumber = 1; final int pageSize = 2; final List<SimpleDbUser> results = repository.pagedPartialQuery(1.0f, new PageRequest(pageNumber, pageSize)); assertEquals(2, results.size()); SimpleDbUser firstResult = results.get(0); assertThat(firstResult.getPrimitiveField(), is(4f)); assertNotNull(firstResult.getItemName()); /* the rest of the fields should be empty */ assertNull(firstResult.getCoreField()); assertNull(firstResult.getCoreTypeList()); assertNull(firstResult.getObjectField()); } }