ShoppingCartTest.java
Home
/
sm-core /
src /
test /
java /
com /
salesmanager /
test /
shoppingcart /
ShoppingCartTest.java
package com.salesmanager.test.shoppingcart;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import org.junit.Assert;
import org.junit.Ignore;
import org.junit.Test;
import com.salesmanager.core.business.exception.ServiceException;
import com.salesmanager.core.model.catalog.category.Category;
import com.salesmanager.core.model.catalog.category.CategoryDescription;
import com.salesmanager.core.model.catalog.product.Product;
import com.salesmanager.core.model.catalog.product.attribute.ProductAttribute;
import com.salesmanager.core.model.catalog.product.attribute.ProductOption;
import com.salesmanager.core.model.catalog.product.attribute.ProductOptionDescription;
import com.salesmanager.core.model.catalog.product.attribute.ProductOptionType;
import com.salesmanager.core.model.catalog.product.attribute.ProductOptionValue;
import com.salesmanager.core.model.catalog.product.attribute.ProductOptionValueDescription;
import com.salesmanager.core.model.catalog.product.availability.ProductAvailability;
import com.salesmanager.core.model.catalog.product.description.ProductDescription;
import com.salesmanager.core.model.catalog.product.manufacturer.Manufacturer;
import com.salesmanager.core.model.catalog.product.manufacturer.ManufacturerDescription;
import com.salesmanager.core.model.catalog.product.price.FinalPrice;
import com.salesmanager.core.model.catalog.product.price.ProductPrice;
import com.salesmanager.core.model.catalog.product.price.ProductPriceDescription;
import com.salesmanager.core.model.catalog.product.type.ProductType;
import com.salesmanager.core.model.merchant.MerchantStore;
import com.salesmanager.core.model.reference.language.Language;
import com.salesmanager.core.model.shoppingcart.ShoppingCart;
import com.salesmanager.core.model.shoppingcart.ShoppingCartAttributeItem;
import com.salesmanager.core.model.shoppingcart.ShoppingCartItem;
/**
* Test
*
* - Add a product to persistent shopping cart
* - Retrieve an item from the persistent shopping cart
* - Rebuild a shopping cart item after the product definition has been modified
* @author Carl Samson
*
*/
@Ignore
public class ShoppingCartTest extends com.salesmanager.test.common.AbstractSalesManagerCoreTestCase {
@Test
public void createShoppingCart() throws Exception {
MerchantStore store = merchantService.getByCode( MerchantStore.DEFAULT_STORE );
Language en = languageService.getByCode("en");
/** CATALOG CREATION **/
ProductType generalType = productTypeService.getProductType(ProductType.GENERAL_TYPE);
/**
* Create the category
*/
Category shirts = new Category();
shirts.setMerchantStore(store);
shirts.setCode("shirts");
CategoryDescription shirtsEnglishDescription = new CategoryDescription();
shirtsEnglishDescription.setName("Shirts");
shirtsEnglishDescription.setCategory(shirts);
shirtsEnglishDescription.setLanguage(en);
List<CategoryDescription> descriptions = new ArrayList<CategoryDescription>();
descriptions.add(shirtsEnglishDescription);
shirts.setDescriptions(descriptions);
categoryService.create(shirts);
/**
* Create a manufacturer
*/
Manufacturer addidas = new Manufacturer();
addidas.setMerchantStore(store);
addidas.setCode("addidas");
ManufacturerDescription addidasDesc = new ManufacturerDescription();
addidasDesc.setLanguage(en);
addidasDesc.setManufacturer(addidas);
addidasDesc.setName("Addidas");
addidas.getDescriptions().add(addidasDesc);
manufacturerService.create(addidas);
/**
* Create an option
*/
ProductOption option = new ProductOption();
option.setMerchantStore(store);
option.setCode("color");
option.setProductOptionType(ProductOptionType.Radio.name());
ProductOptionDescription optionDescription = new ProductOptionDescription();
optionDescription.setLanguage(en);
optionDescription.setName("Color");
optionDescription.setDescription("Item color");
optionDescription.setProductOption(option);
option.getDescriptions().add(optionDescription);
productOptionService.saveOrUpdate(option);
/** first option value **/
ProductOptionValue white = new ProductOptionValue();
white.setMerchantStore(store);
white.setCode("white");
ProductOptionValueDescription whiteDescription = new ProductOptionValueDescription();
whiteDescription.setLanguage(en);
whiteDescription.setName("White");
whiteDescription.setDescription("White color");
whiteDescription.setProductOptionValue(white);
white.getDescriptions().add(whiteDescription);
productOptionValueService.saveOrUpdate(white);
ProductOptionValue black = new ProductOptionValue();
black.setMerchantStore(store);
black.setCode("black");
/** second option value **/
ProductOptionValueDescription blackDesc = new ProductOptionValueDescription();
blackDesc.setLanguage(en);
blackDesc.setName("Black");
blackDesc.setDescription("Black color");
blackDesc.setProductOptionValue(black);
black.getDescriptions().add(blackDesc);
productOptionValueService.saveOrUpdate(black);
/**
* Create a complex product
*/
Product product = new Product();
product.setProductHeight(new BigDecimal(4));
product.setProductLength(new BigDecimal(3));
product.setProductWidth(new BigDecimal(1));
product.setSku("TB12345");
product.setManufacturer(addidas);
product.setType(generalType);
product.setMerchantStore(store);
// Product description
ProductDescription description = new ProductDescription();
description.setName("Short sleeves shirt");
description.setLanguage(en);
description.setProduct(product);
product.getDescriptions().add(description);
product.getCategories().add(shirts);
//availability
ProductAvailability availability = new ProductAvailability();
availability.setProductDateAvailable(new Date());
availability.setProductQuantity(100);
availability.setRegion("*");
availability.setProduct(product);// associate with product
//price
ProductPrice dprice = new ProductPrice();
dprice.setDefaultPrice(true);
dprice.setProductPriceAmount(new BigDecimal(29.99));
dprice.setProductAvailability(availability);
ProductPriceDescription dpd = new ProductPriceDescription();
dpd.setName("Base price");
dpd.setProductPrice(dprice);
dpd.setLanguage(en);
dprice.getDescriptions().add(dpd);
availability.getPrices().add(dprice);
product.getAvailabilities().add(availability);
//attributes
//white
ProductAttribute whiteAttribute = new ProductAttribute();
whiteAttribute.setProduct(product);
whiteAttribute.setProductOption(option);
whiteAttribute.setAttributeDefault(true);
whiteAttribute.setProductAttributePrice(new BigDecimal(0));//no price variation
whiteAttribute.setProductAttributeWeight(new BigDecimal(0));//no weight variation
whiteAttribute.setProductOption(option);
whiteAttribute.setProductOptionValue(white);
product.getAttributes().add(whiteAttribute);
//black
ProductAttribute blackAttribute = new ProductAttribute();
blackAttribute.setProduct(product);
blackAttribute.setProductOption(option);
blackAttribute.setProductAttributePrice(new BigDecimal(5));//5 + dollars
blackAttribute.setProductAttributeWeight(new BigDecimal(0));//no weight variation
blackAttribute.setProductOption(option);
blackAttribute.setProductOptionValue(black);
product.getAttributes().add(blackAttribute);
productService.saveOrUpdate(product);
/** Create Shopping cart **/
ShoppingCart shoppingCart = new ShoppingCart();
shoppingCart.setMerchantStore(store);
UUID cartCode = UUID.randomUUID();
shoppingCart.setShoppingCartCode(cartCode.toString());
ShoppingCartItem item = new ShoppingCartItem(shoppingCart,product);
item.setShoppingCart(shoppingCart);
FinalPrice price = pricingService.calculateProductPrice(product);
//FinalPrice price = productPriceUtil.getFinalPrice(product);
item.setItemPrice(price.getFinalPrice());
item.setQuantity(1);
/** user selects black **/
ShoppingCartAttributeItem attributeItem = new ShoppingCartAttributeItem(item,blackAttribute);
item.getAttributes().add(attributeItem);
shoppingCart.getLineItems().add(item);
System.out.println("Before create cart");
shoppingCartService.create(shoppingCart);
/** Now modify product definition **/
System.out.println("Before getting product");
Product retrievedProduct = productService.getById(product.getId());
Set<ProductAttribute> attributes = retrievedProduct.getAttributes();
Assert.assertNotNull(attributes);
for(ProductAttribute attr : attributes) {
productAttributeService.delete(attr);
}
/** Retrieve cart **/
System.out.println("Before getting cart");
ShoppingCart retrievedCart = shoppingCartService.getByCode(cartCode.toString(), store);
Assert.assertNotNull(retrievedCart);
Product deletedProduct = productService.getById(product.getId());
productService.delete(deletedProduct);
//TODO delete product
//expect shopping cart to be deleted since no products are attached
}
}