/* * Copyright 2014-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.data.map; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.util.List; import org.junit.Test; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.keyvalue.Person; import org.springframework.data.keyvalue.QPerson; import org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactory; import org.springframework.data.keyvalue.repository.support.QuerydslKeyValueRepository; import org.springframework.data.map.QuerydslKeyValueRepositoryUnitTests.QPersonRepository; import org.springframework.data.querydsl.QSort; import org.springframework.data.querydsl.QuerydslPredicateExecutor; import com.google.common.collect.Lists; /** * Unit tests for {@link QuerydslKeyValueRepository}. * * @author Christoph Strobl * @author Oliver Gierke * @author Thomas Darimont */ public class QuerydslKeyValueRepositoryUnitTests extends AbstractRepositoryUnitTests<QPersonRepository> { @Test // DATACMNS-525 public void findOneIsExecutedCorrectly() { repository.saveAll(LENNISTERS); Person result = repository.findOne(QPerson.person.firstname.eq(CERSEI.getFirstname())); assertThat(result, is(CERSEI)); } @Test // DATACMNS-525 public void findAllIsExecutedCorrectly() { repository.saveAll(LENNISTERS); Iterable<Person> result = repository.findAll(QPerson.person.age.eq(CERSEI.getAge())); assertThat(result, containsInAnyOrder(CERSEI, JAIME)); } @Test // DATACMNS-525 public void findWithPaginationWorksCorrectly() { repository.saveAll(LENNISTERS); Page<Person> page1 = repository.findAll(QPerson.person.age.eq(CERSEI.getAge()), PageRequest.of(0, 1)); assertThat(page1.getTotalElements(), is(2L)); assertThat(page1.getContent(), hasSize(1)); assertThat(page1.hasNext(), is(true)); Page<Person> page2 = ((QPersonRepository) repository).findAll(QPerson.person.age.eq(CERSEI.getAge()), page1.nextPageable()); assertThat(page2.getTotalElements(), is(2L)); assertThat(page2.getContent(), hasSize(1)); assertThat(page2.hasNext(), is(false)); } @Test // DATACMNS-525 public void findAllUsingOrderSpecifierWorksCorrectly() { repository.saveAll(LENNISTERS); Iterable<Person> result = repository.findAll(QPerson.person.age.eq(CERSEI.getAge()), QPerson.person.firstname.desc()); assertThat(result, contains(JAIME, CERSEI)); } @Test // DATACMNS-525 public void findAllUsingPageableWithSortWorksCorrectly() { repository.saveAll(LENNISTERS); Iterable<Person> result = repository.findAll(QPerson.person.age.eq(CERSEI.getAge()), PageRequest.of(0, 10, Direction.DESC, "firstname")); assertThat(result, contains(JAIME, CERSEI)); } @Test // DATACMNS-525 public void findAllUsingPagableWithQSortWorksCorrectly() { repository.saveAll(LENNISTERS); Iterable<Person> result = repository.findAll(QPerson.person.age.eq(CERSEI.getAge()), PageRequest.of(0, 10, new QSort(QPerson.person.firstname.desc()))); assertThat(result, contains(JAIME, CERSEI)); } @Test // DATAKV-90 public void findAllWithOrderSpecifierWorksCorrectly() { repository.saveAll(LENNISTERS); Iterable<Person> result = repository.findAll(new QSort(QPerson.person.firstname.desc())); assertThat(result, contains(TYRION, JAIME, CERSEI)); } @Test // DATAKV-90 public void findAllShouldIgnoreNullOrderSpecifier() { repository.saveAll(LENNISTERS); Iterable<Person> result = repository.findAll((QSort) null); assertThat(result, containsInAnyOrder(TYRION, JAIME, CERSEI)); } @Test // DATAKV-95 public void executesExistsCorrectly() { repository.saveAll(LENNISTERS); assertThat(repository.exists(QPerson.person.age.eq(CERSEI.getAge())), is(true)); } @Test // DATAKV-96 public void shouldSupportFindAllWithPredicateAndSort() { repository.saveAll(LENNISTERS); List<Person> users = Lists.newArrayList(repository.findAll(person.age.gt(0), Sort.by(Direction.ASC, "firstname"))); assertThat(users, hasSize(3)); assertThat(users.get(0).getFirstname(), is(CERSEI.getFirstname())); assertThat(users.get(2).getFirstname(), is(TYRION.getFirstname())); assertThat(users, hasItems(CERSEI, JAIME, TYRION)); } /* * (non-Javadoc) * @see org.springframework.data.map.SimpleKeyValueRepositoryUnitTests#getRepository(org.springframework.data.keyvalue.repository.support.KeyValueRepositoryFactory) */ @Override protected QPersonRepository getRepository(KeyValueRepositoryFactory factory) { return factory.getRepository(QPersonRepository.class); } static interface QPersonRepository extends org.springframework.data.map.AbstractRepositoryUnitTests.PersonRepository, QuerydslPredicateExecutor<Person> {} }