/* * #%L * BroadleafCommerce Integration * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * 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. * #L% */ package org.broadleafcommerce.core.catalog.dao; import org.broadleafcommerce.core.catalog.ProductDataProvider; import org.broadleafcommerce.core.catalog.domain.CrossSaleProductImpl; import org.broadleafcommerce.core.catalog.domain.Product; import org.broadleafcommerce.core.catalog.domain.RelatedProduct; import org.broadleafcommerce.core.catalog.domain.UpSaleProductImpl; import org.broadleafcommerce.core.catalog.service.CatalogService; import org.broadleafcommerce.test.BaseTest; import org.springframework.test.annotation.Rollback; import org.springframework.transaction.annotation.Transactional; import org.testng.annotations.Test; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; public class ProductDaoTest extends BaseTest { @Resource private ProductDao productDao; @Resource private CatalogService catalogService; private List<Product> savedProducts = new ArrayList<Product>(); private static RelatedProduct getRelatedUpSaleProduct(Product prod, Product prodToRelate, List<RelatedProduct> upSales){ RelatedProduct rp1 = new UpSaleProductImpl(); rp1.setProduct(prod); rp1.setPromotionMessage("brand new coffee"); rp1.setRelatedProduct(prodToRelate); upSales.add(rp1); return rp1; } private static RelatedProduct getRelatedCrossProduct(Product prod, Product prodToRelate, List<RelatedProduct> upSales){ RelatedProduct rp1 = new CrossSaleProductImpl(); rp1.setProduct(prod); rp1.setPromotionMessage("brand new coffee"); rp1.setRelatedProduct(prodToRelate); upSales.add(rp1); return rp1; } @Test(groups="createProducts", dataProvider="setupProducts", dataProviderClass=ProductDataProvider.class) @Rollback(false) @Transactional public void createProducts(Product product) { product = catalogService.saveProduct(product); assert(product.getId() != null); savedProducts.add(product); } @Test(groups="createUpSaleValues", dependsOnGroups="createProducts") @Rollback(false) @Transactional public void createUpSaleValues(){ Product prod1 = savedProducts.get(0); List<RelatedProduct> upSales = new ArrayList<RelatedProduct>(); getRelatedUpSaleProduct(prod1, savedProducts.get(2), upSales); getRelatedUpSaleProduct(prod1, savedProducts.get(3), upSales); getRelatedUpSaleProduct(prod1, savedProducts.get(4), upSales); prod1.setUpSaleProducts(upSales); prod1 = catalogService.saveProduct(prod1); assert(prod1.getId() != null); Product prod2 = savedProducts.get(1); List<RelatedProduct> upSales2 = new ArrayList<RelatedProduct>(); getRelatedUpSaleProduct(prod2, savedProducts.get(5), upSales2); getRelatedUpSaleProduct(prod2, savedProducts.get(6), upSales2); prod2.setUpSaleProducts(upSales2); prod2 = catalogService.saveProduct(prod2); assert(prod2.getId() != null); } @Test(groups="testReadProductsWithUpSaleValues", dependsOnGroups="createUpSaleValues") @Transactional public void testReadProductsWithUpSaleValues() { Product result = productDao.readProductById(savedProducts.get(0).getId()); List<RelatedProduct> related = result.getUpSaleProducts(); assert(related != null); assert(!related.isEmpty()); assert(related.size() == 2 || related.size() == 3); for(RelatedProduct rp : related){ assert(rp instanceof UpSaleProductImpl); } } @Test(groups="createCrossSaleValues", dependsOnGroups="testReadProductsWithUpSaleValues") @Rollback(false) @Transactional public void createCrossSaleValues(){ Product prod1 = savedProducts.get(0); List<RelatedProduct> crossSale = new ArrayList<RelatedProduct>(); getRelatedCrossProduct(prod1, savedProducts.get(2), crossSale); getRelatedCrossProduct(prod1, savedProducts.get(3), crossSale); getRelatedCrossProduct(prod1, savedProducts.get(4), crossSale); prod1.setCrossSaleProducts(crossSale); prod1 = catalogService.saveProduct(prod1); assert(prod1.getId() != null); Product prod2 = savedProducts.get(1); List<RelatedProduct> crossSale2 = new ArrayList<RelatedProduct>(); getRelatedCrossProduct(prod2, savedProducts.get(5), crossSale2); getRelatedCrossProduct(prod2, savedProducts.get(6), crossSale2); prod2.setCrossSaleProducts(crossSale2); prod2 = catalogService.saveProduct(prod2); assert(prod2.getId() != null); } @Test(groups="testReadProductsWithCrossSaleValues", dependsOnGroups="createCrossSaleValues") @Transactional public void testReadProductsWithCrossSaleValues() { Product result = productDao.readProductById(savedProducts.get(1).getId()); List<RelatedProduct> related = result.getCrossSaleProducts(); assert(related != null); assert(!related.isEmpty()); assert(related.size() == 2 || related.size() == 3); for(RelatedProduct rp : related){ assert(rp instanceof CrossSaleProductImpl); } } @Test(dataProvider="basicProduct", dataProviderClass=ProductDataProvider.class) @Transactional public void testReadProductsById(Product product) { product = catalogService.saveProduct(product); Product result = productDao.readProductById(product.getId()); assert product.equals(result); } @Test(dataProvider="basicProduct", dataProviderClass=ProductDataProvider.class) @Transactional public void testReadProductsByName(Product product) { String name = product.getName(); product = catalogService.saveProduct(product); List<Product> result = productDao.readProductsByName(name); assert result.contains(product); } @Test(dataProvider="basicProduct", dataProviderClass=ProductDataProvider.class) @Transactional public void testFeaturedProduct(Product product) { product = catalogService.saveProduct(product); Long productId = product.getId(); product.setFeaturedProduct(true); catalogService.saveProduct(product); Product testProduct = productDao.readProductById(productId); assert (testProduct.isFeaturedProduct() == true); } }