package net.eusashead.bjugquerydsl.data.predicate; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import junit.framework.Assert; import net.eusashead.bjugquerydsl.config.JpaConfig; import net.eusashead.bjugquerydsl.controller.SkuSearchRequest; import net.eusashead.bjugquerydsl.controller.SkuSearchRequestBuilder; import net.eusashead.bjugquerydsl.data.entity.QStockKeepingUnit; import net.eusashead.bjugquerydsl.data.entity.StockKeepingUnit; 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.transaction.annotation.Transactional; import com.mysema.query.jpa.impl.JPAQuery; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={JpaConfig.class}) public class SkuPredicateTest { @PersistenceContext private EntityManager em; @Test @Transactional public void testSearchSku() throws Exception { // Basic search SkuSearchRequest search1 = new SkuSearchRequestBuilder().build(); List<StockKeepingUnit>res1 = searchSku(search1); Assert.assertEquals(Integer.valueOf(8), Integer.valueOf(res1.size())); // Min set SkuSearchRequest search2 = new SkuSearchRequestBuilder().minPrice(1100d).build(); List<StockKeepingUnit>res2 = searchSku(search2); Assert.assertEquals(Integer.valueOf(4), Integer.valueOf(res2.size())); // Max set SkuSearchRequest search3 = new SkuSearchRequestBuilder().maxPrice(1100d).build(); List<StockKeepingUnit>res3 = searchSku(search3); Assert.assertEquals(Integer.valueOf(4), Integer.valueOf(res3.size())); // Min and max set SkuSearchRequest search4 = new SkuSearchRequestBuilder().minPrice(1100d).maxPrice(1150d).build(); List<StockKeepingUnit>res4 = searchSku(search4); Assert.assertEquals(Integer.valueOf(2), Integer.valueOf(res4.size())); // One attr, one value SkuSearchRequest search5 = new SkuSearchRequestBuilder().attribute("neck", "maple").build(); List<StockKeepingUnit>res5 = searchSku(search5); Assert.assertEquals(Integer.valueOf(4), Integer.valueOf(res5.size())); // One attr, two values SkuSearchRequest search6 = new SkuSearchRequestBuilder().attribute("nEck", "maplE", "Rosewood").build(); List<StockKeepingUnit>res6 = searchSku(search6); Assert.assertEquals(Integer.valueOf(8), Integer.valueOf(res6.size())); // Two attr, one value each SkuSearchRequest search7 = new SkuSearchRequestBuilder().attribute("Neck", "Maple") .attribute("Colour", "Lake Placid Blue").build(); List<StockKeepingUnit>res7 = searchSku(search7); Assert.assertEquals(Integer.valueOf(1), Integer.valueOf(res7.size())); // Two attr, multi values value each SkuSearchRequest search8 = new SkuSearchRequestBuilder().attribute("Neck", "Maple", "Rosewood") .attribute("Colour", "Lake Placid Blue").build(); List<StockKeepingUnit>res8 = searchSku(search8); Assert.assertEquals(Integer.valueOf(2), Integer.valueOf(res8.size())); // Attributes, values, prices SkuSearchRequest search9 = new SkuSearchRequestBuilder().attribute("Neck", "Maple") .minPrice(1000d).maxPrice(1050d).build(); List<StockKeepingUnit>res9 = searchSku(search9); Assert.assertEquals(Integer.valueOf(2), Integer.valueOf(res9.size())); } private List<StockKeepingUnit> searchSku( SkuSearchRequest request) { JPAQuery query = new JPAQuery(em); QStockKeepingUnit path = QStockKeepingUnit.stockKeepingUnit; List<StockKeepingUnit> results = query.from(path) .where(path.search(request)) .list(path); return results; } }