package jpasearch.repository.join;
import static org.assertj.core.api.Assertions.assertThat;
import javax.inject.Inject;
import javax.transaction.Transactional;
import jpasearch.TestApplication;
import jpasearch.domain.join.EntityMany;
import jpasearch.domain.join.EntityMany_;
import jpasearch.domain.join.EntityOne;
import jpasearch.domain.join.EntityOne_;
import jpasearch.repository.query.SearchParameters;
import jpasearch.repository.query.builder.SearchBuilder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
/**
* @author speralta
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestApplication.class)
@Transactional
@TransactionConfiguration(defaultRollback = true)
public class EntityManyRepositoryIT {
@Inject
private EntityManyRepository entityManyRepository;
@Inject
private EntityOneRepository entityOneRepository;
@Test
public void findByDeepString() {
final String testValue = "test";
assertThat(entityManyRepository.findCount(findByValue(testValue))).isEqualTo(0);
EntityOne entityOne = new EntityOne();
entityOne.setValue(testValue);
EntityMany entityMany = new EntityMany();
entityMany.setEntityOne(entityOne);
entityMany = entityManyRepository.save(entityMany);
assertThat(entityManyRepository.find(findByValue(testValue))).containsExactly(entityMany);
}
private SearchParameters<EntityMany> findByValue(String value) {
return new SearchBuilder<EntityMany>() //
.on(EntityMany_.entityOne).to(EntityOne_.value).equalsTo(value).and() //
.fetch(EntityMany_.entityOne).and() //
.build();
}
@Test
public void findByEntityOne() {
EntityOne entityOne = new EntityOne();
entityOne.setValue("test");
entityOne = entityOneRepository.save(entityOne);
assertThat(entityManyRepository.findCount(findByEntityOne(entityOne))).isEqualTo(0);
EntityMany entityMany = new EntityMany();
entityMany.setEntityOne(entityOne);
entityMany = entityManyRepository.save(entityMany);
assertThat(entityManyRepository.find(findByEntityOne(entityOne))).containsExactly(entityMany);
}
private SearchParameters<EntityMany> findByEntityOne(EntityOne entityOne) {
return new SearchBuilder<EntityMany>() //
.on(EntityMany_.entityOne).equalsTo(entityOne) //
.build();
}
@Test
public void orderByDeepString() {
assertThat(entityManyRepository.findCount(orderByValue())).isEqualTo(0);
EntityOne entityOne1 = new EntityOne();
entityOne1.setValue("test1");
EntityMany entityMany1 = new EntityMany();
entityMany1.setEntityOne(entityOne1);
entityMany1 = entityManyRepository.save(entityMany1);
EntityOne entityOne2 = new EntityOne();
entityOne2.setValue("test2");
EntityMany entityMany2 = new EntityMany();
entityMany2.setEntityOne(entityOne2);
entityMany2 = entityManyRepository.save(entityMany2);
assertThat(entityManyRepository.find(orderByValue())).containsExactly(entityMany2, entityMany1);
}
private SearchParameters<EntityMany> orderByValue() {
return new SearchBuilder<EntityMany>() //
.orderBy(EntityMany_.entityOne).and(EntityOne_.value).desc().build();
}
}