package jpasearch.repository.comparable;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Date;
import javax.inject.Inject;
import javax.transaction.Transactional;
import jpasearch.TestApplication;
import jpasearch.domain.comparable.EntityWithComparableField;
import jpasearch.domain.comparable.EntityWithComparableField_;
import jpasearch.domain.comparable.EntityWithDeepComparableField;
import jpasearch.domain.comparable.EntityWithDeepComparableField_;
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 EntityWithDeepComparableFieldRepositoryIT {
@Inject
private EntityWithDeepComparableFieldRepository entityWithDeepComparableFieldRepository;
@Test
public void test() {
final Date testValue = new Date();
assertThat(entityWithDeepComparableFieldRepository.findCount(findByRange(testValue))).isEqualTo(0);
EntityWithDeepComparableField entityWithDeepComparableField = new EntityWithDeepComparableField();
EntityWithComparableField entityWithComparableField = new EntityWithComparableField();
entityWithComparableField.setDate(testValue);
entityWithDeepComparableField.setEntityWithComparableField(entityWithComparableField);
entityWithDeepComparableField = entityWithDeepComparableFieldRepository.save(entityWithDeepComparableField);
assertThat(entityWithDeepComparableFieldRepository.find(findByRange(testValue))).containsExactly(entityWithDeepComparableField);
}
private SearchParameters<EntityWithDeepComparableField> findByRange(Date value) {
Date from = new Date();
from.setTime(value.getTime() - 10000);
Date to = new Date();
to.setTime(value.getTime() + 10000);
return new SearchBuilder<EntityWithDeepComparableField>() //
.range(EntityWithDeepComparableField_.entityWithComparableField) //
.finallyOn(EntityWithComparableField_.date).between(from, to) //
.build();
}
}