package jpasearch.repository.embedded;
import static org.assertj.core.api.Assertions.assertThat;
import javax.inject.Inject;
import javax.transaction.Transactional;
import jpasearch.TestApplication;
import jpasearch.domain.embedded.EmbeddableField;
import jpasearch.domain.embedded.EmbeddableField_;
import jpasearch.domain.embedded.EntityEmbedded;
import jpasearch.domain.embedded.EntityEmbedded_;
import jpasearch.domain.embedded.EntityWithEmbeddedField;
import jpasearch.domain.embedded.EntityWithEmbeddedField_;
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 EntityWithEmbeddedFieldRepositoryIT {
@Inject
private EntityWithEmbeddedFieldRepository entityWithEmbeddedFieldRepository;
@Test
public void test() {
final String testValue = "test";
assertThat(entityWithEmbeddedFieldRepository.findCount(findByEmbedded(testValue))).isEqualTo(0);
EntityWithEmbeddedField entityWithEmbeddedField = new EntityWithEmbeddedField();
EmbeddableField embeddableField = new EmbeddableField();
EntityEmbedded entityEmbedded = new EntityEmbedded();
entityEmbedded.setValue(testValue);
embeddableField.setEntityEmbedded(entityEmbedded);
entityWithEmbeddedField.setEmbeddableField(embeddableField);
entityWithEmbeddedField = entityWithEmbeddedFieldRepository.save(entityWithEmbeddedField);
assertThat(entityWithEmbeddedFieldRepository.find(findByEmbedded(testValue))).containsExactly(entityWithEmbeddedField);
}
private SearchParameters<EntityWithEmbeddedField> findByEmbedded(String value) {
return new SearchBuilder<EntityWithEmbeddedField>() //
.on(EntityWithEmbeddedField_.embeddableField) //
.to(EmbeddableField_.entityEmbedded) //
.to(EntityEmbedded_.value).equalsTo(value) //
.build();
}
}