package com.mozu.test;
import static org.junit.Assert.assertEquals;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpStatus;
import org.joda.time.DateTime;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.mozu.api.ApiContext;
import com.mozu.api.DataViewMode;
import com.mozu.api.MozuApiContext;
import com.mozu.api.contracts.customer.CustomerAccountAndAuthInfo;
import com.mozu.api.contracts.customer.CustomerUserAuthInfo;
import com.mozu.api.contracts.location.Location;
import com.mozu.api.contracts.location.LocationCollection;
import com.mozu.api.contracts.productadmin.Attribute;
import com.mozu.api.contracts.productadmin.AttributeInProductType;
import com.mozu.api.contracts.productadmin.Category;
import com.mozu.api.contracts.productadmin.CategoryPagedCollection;
import com.mozu.api.contracts.productadmin.LocationInventory;
import com.mozu.api.contracts.productadmin.MasterCatalog;
import com.mozu.api.contracts.productadmin.Product;
import com.mozu.api.contracts.productadmin.ProductCategory;
import com.mozu.api.contracts.productadmin.ProductInCatalogInfo;
import com.mozu.api.contracts.productadmin.ProductInventoryInfo;
import com.mozu.api.contracts.productadmin.ProductProperty;
import com.mozu.api.contracts.productadmin.ProductPropertyValue;
import com.mozu.api.contracts.productadmin.ProductType;
import com.mozu.api.contracts.productadmin.ProductTypeCollection;
import com.mozu.api.contracts.productadmin.ProductVariation;
import com.mozu.api.contracts.productadmin.ProductVariationPagedCollection;
import com.mozu.api.contracts.productruntime.ProductCollection;
import com.mozu.api.security.CustomerAuthenticationProfile;
import com.mozu.api.security.CustomerAuthenticator;
import com.mozu.test.framework.core.MozuApiTestBase;
import com.mozu.test.framework.core.TestFailException;
import com.mozu.test.framework.datafactory.AdminProductFactory;
import com.mozu.test.framework.datafactory.AttributeFactory;
import com.mozu.test.framework.datafactory.AttributedefinitionAttributeFactory;
import com.mozu.test.framework.datafactory.CategoryFactory;
import com.mozu.test.framework.datafactory.CommerceLocationFactory;
import com.mozu.test.framework.datafactory.CustomerAccountFactory;
import com.mozu.test.framework.datafactory.LocationFactory;
import com.mozu.test.framework.datafactory.LocationInventoryFactory;
import com.mozu.test.framework.datafactory.MasterCatalogFactory;
import com.mozu.test.framework.datafactory.ProductFactory;
import com.mozu.test.framework.datafactory.ProductTypeFactory;
import com.mozu.test.framework.datafactory.ProductVariationFactory;
import com.mozu.test.framework.datafactory.PublishingScopeFactory;
import com.mozu.test.framework.helper.CustomerGenerator;
import com.mozu.test.framework.helper.Generator;
import com.mozu.test.framework.helper.ProductAttributeGenerator;
import com.mozu.test.framework.helper.ProductGenerator;
import com.mozu.test.framework.helper.ProductTypeGenerator;
public class ProductTests extends MozuApiTestBase {
private static List<String> attrs = new ArrayList<String>();
private static List<Integer> productTypes = new ArrayList<Integer>();
private static List<String> products = new ArrayList<String>();
private static ApiContext apiContext;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
for (int i = 0; i < products.size(); i++)
{
AdminProductFactory.deleteProduct(apiContext, DataViewMode.Live, products.get(i), HttpStatus.SC_NO_CONTENT);
}
for (int i = 0; i < productTypes.size(); i++)
{
ProductTypeFactory.deleteProductType(apiContext, DataViewMode.Live, productTypes.get(i), HttpStatus.SC_NO_CONTENT);
}
for (int i = 0; i < attrs.size(); i++)
{
AttributedefinitionAttributeFactory.deleteAttribute(apiContext, attrs.get(i), HttpStatus.SC_NO_CONTENT);
}
}
@Before
public void setUp() throws Exception {
apiContext = new MozuApiContext(tenantId, null, masterCatalogId, null);
}
@After
public void tearDown() throws Exception {
}
@Test
public void createProductTest1() throws Exception {
//Create attribute
Attribute attr1 = ProductAttributeGenerator.generate(Generator.randomString(6, Generator.AlphaChars), "List", "Predefined", "String", false, false, true);
Attribute createdAttr = AttributedefinitionAttributeFactory.addAttribute(apiContext, attr1, HttpStatus.SC_CREATED);
attrs.add(createdAttr.getAttributeFQN());
//Create product type
ProductType myPT = ProductTypeGenerator.generate(createdAttr, Generator.randomString(5, Generator.AlphaChars));
ProductType createdPT = ProductTypeFactory.addProductType(apiContext, DataViewMode.Live, myPT, HttpStatus.SC_CREATED);
productTypes.add(createdPT.getId());
//Create product
Product myProduct = ProductGenerator.generate(createdPT);
Product createdProduct = AdminProductFactory.addProduct(apiContext, DataViewMode.Live, myProduct, HttpStatus.SC_CREATED);
products.add(createdProduct.getProductCode());
//Get product
Product getProduct = AdminProductFactory.getProduct(apiContext, DataViewMode.Live, createdProduct.getProductCode(), HttpStatus.SC_OK);
assertEquals(createdProduct.getContent().getProductName(), getProduct.getContent().getProductName());
assertEquals(createdProduct.getPrice().getPrice(), getProduct.getPrice().getPrice());
}
@Test
public void updateProductTest1() throws Exception {
//Create product type
ProductType myPT = ProductTypeGenerator.generate(Generator.randomString(5, Generator.AlphaChars));
ProductType createdPT = ProductTypeFactory.addProductType(apiContext, DataViewMode.Live, myPT, HttpStatus.SC_CREATED);
productTypes.add(createdPT.getId());
Product myProduct = ProductGenerator.generate(createdPT);
MasterCatalog mc = MasterCatalogFactory.getMasterCatalog(apiContext, masterCatalogId, HttpStatus.SC_OK);
mc.setProductPublishingMode("Pending");
MasterCatalogFactory.updateMasterCatalog(apiContext, mc, masterCatalogId, HttpStatus.SC_OK);
Product createdProduct = AdminProductFactory.addProduct(apiContext, DataViewMode.Live, myProduct, HttpStatus.SC_CREATED);
AdminProductFactory.getProduct(apiContext, DataViewMode.Pending, createdProduct.getProductCode(), HttpStatus.SC_OK);
AdminProductFactory.getProduct(apiContext, DataViewMode.Live, createdProduct.getProductCode(), HttpStatus.SC_NOT_FOUND);
PublishingScopeFactory.publishDrafts(apiContext, DataViewMode.Live, ProductGenerator.generatePublishingScope(true, null), HttpStatus.SC_OK);
products.add(createdProduct.getProductCode());
AdminProductFactory.getProduct(apiContext, DataViewMode.Live, createdProduct.getProductCode(), HttpStatus.SC_OK);
mc.setProductPublishingMode("Live");
MasterCatalogFactory.updateMasterCatalog(apiContext, mc, masterCatalogId, HttpStatus.SC_OK);
}
@Test
public void updateProductTest2() throws Exception {
// Add a new attribute
Attribute attr1 = ProductAttributeGenerator.generate(Generator.randomString(6, Generator.AlphaChars), "Date", "AdminEntered", "Datetime", false, false, true);
Attribute createdAttr = AttributedefinitionAttributeFactory.addAttribute(apiContext, attr1, HttpStatus.SC_CREATED);
//update product type
ProductType myPT = ProductTypeGenerator.generate(createdAttr, Generator.randomString(5, Generator.AlphaChars));
ProductType createdPT = ProductTypeFactory.addProductType(apiContext, DataViewMode.Live, myPT, HttpStatus.SC_CREATED);
Product myProduct = ProductGenerator.generate(createdPT);
List<ProductPropertyValue> salePriceDateValue = new ArrayList<ProductPropertyValue>();
ProductPropertyValue salePriceValue = new ProductPropertyValue();
DateTime date = DateTime.now();
salePriceValue.setValue(date);
salePriceDateValue.add(salePriceValue);
myProduct.getProperties().get(myProduct.getProperties().size()-1).setValues(salePriceDateValue);
Product createdProduct = AdminProductFactory.addProduct(apiContext, DataViewMode.Live, myProduct, HttpStatus.SC_CREATED);
}
@Test
public void getProductTest1() throws Exception {
//Create product type
ProductType myPT = ProductTypeGenerator.generate(Generator.randomString(5, Generator.AlphaChars));
ProductType createdPT = ProductTypeFactory.addProductType(apiContext, DataViewMode.Live, myPT, HttpStatus.SC_CREATED);
productTypes.add(createdPT.getId());
//Create product
Product myProduct = ProductGenerator.generate(createdPT);
Product createdProduct = AdminProductFactory.addProduct(apiContext, DataViewMode.Live, myProduct, HttpStatus.SC_CREATED);
products.add(createdProduct.getProductCode());
AdminProductFactory.getProducts(apiContext, DataViewMode.Live, null, null, null, "ProductSequence eq "+ createdProduct.getProductSequence(), null, null, null, null, HttpStatus.SC_OK);
}
@Test
public void getProductsTest1() throws Exception {
ApiContext localapiContext = new MozuApiContext(tenantId, siteId, masterCatalogId, catalogId);
ProductCollection products = ProductFactory.getProducts(localapiContext, DataViewMode.Live, HttpStatus.SC_OK);
System.out.println("Total products expected is: " + products.getTotalCount());
int pagesize = 10;
int page;
ProductCollection productPerPage;
for (page=0; page<=products.getPageCount(); page++)
{
productPerPage = ProductFactory.getProducts(localapiContext, DataViewMode.Live, null, page*pagesize, pagesize, null, null, HttpStatus.SC_OK);
/* if (productPerPage.getItems().size() < 10)
{
System.out.println("Wrong Page" + page + " :" + products.getItems().size());
break;
}
*/ System.out.println("Page" + page + " :" + productPerPage.getItems().size());
}
// int count = products.getTotalCount();
// int variationCount = 0;
/* int startIndex = 0;
int pageSize = 200;
int file_number = Generator.randomInt(1, 1000);
PrintWriter writer1 = new PrintWriter("C:\\Users\\eileen_zhuang\\Documents\\tmp\\file" + file_number +".txt", "UTF-8");
PrintWriter writer2 = new PrintWriter("C:\\Users\\eileen_zhuang\\Documents\\tmp\\variationfile" + file_number +".txt", "UTF-8");
while (true)
{
ProductCollection prods = ProductFactory.getProducts(localapiContext, DataViewMode.Live, null, startIndex, pageSize, "productCode", null, HttpStatus.SC_OK, HttpStatus.SC_OK);
for (com.mozu.api.contracts.productruntime.Product pro : prods.getItems())
{
writer1.println(pro.getProductCode());
if (pro.getOptions() == null)
{
continue;
}
try
{
ProductVariationPagedCollection varies = ProductVariationFactory.getProductVariations(apiContext, DataViewMode.Live, pro.getProductCode(), 0, pageSize, "variationProductCode", null, null, HttpStatus.SC_OK, HttpStatus.SC_OK);
for (ProductVariation vari: varies.getItems())
{
if (vari.getIsActive() && vari.getVariationExists())
{
writer2.println(vari.getVariationProductCode());
variationCount ++;
}
}
}
catch(TestFailException e)
{
continue;
}
}
startIndex += pageSize;
if (prods.getItems().size() < pageSize)
{
break;
}
}
// writer1.close();
// writer2.close();
System.out.println("Total products expected in xml is: " + count);
System.out.println("Total variations expected in xml is: " + variationCount);
*/ }
@Test
public void populateProductTest1() throws Exception {
//Create product type
ProductType myPT = ProductTypeFactory.getProductType(apiContext, DataViewMode.Live, 2, HttpStatus.SC_OK);
for (int i = 0; i<300; i++)
{
/* Product myProduct = ProductGenerator.generate(myPT);
myProduct.setProductCode("shoes" + i);
myProduct.getContent().setProductName("shoes " + i);
Product createdProduct = AdminProductFactory.addProduct(apiContext, DataViewMode.Live, myProduct, HttpStatus.SC_CREATED, HttpStatus.SC_CREATED);
*/
Product myProduct = AdminProductFactory.getProduct(apiContext, DataViewMode.Live, "shoes" + i, HttpStatus.SC_OK);
/* List<ProductInCatalogInfo> productInCatalogs = new ArrayList<ProductInCatalogInfo>();
ProductInCatalogInfo info = new ProductInCatalogInfo();
info.setCatalogId(1);
productInCatalogs.add(info);
myProduct.setProductInCatalogs(productInCatalogs );
List<ProductProperty> properties = new ArrayList<ProductProperty>();
ProductProperty pp = new ProductProperty();
pp.setAttributeFQN("com.mozu.bvconversations~bazaarvoice-category");
List<ProductPropertyValue> values = new ArrayList<ProductPropertyValue>();
ProductPropertyValue value = new ProductPropertyValue();
value.setValue("1-Cate1");
values.add(value);
pp.setValues(values );
properties.add(pp);
myProduct.setProperties(properties);
*/ myProduct.getProductInCatalogs().get(0).setIsActive(true);
AdminProductFactory.updateProduct(apiContext, DataViewMode.Live, myProduct, myProduct.getProductCode(), HttpStatus.SC_OK);
/* Product myProduct = AdminProductFactory.getProduct(apiContext, DataViewMode.Live, "shoes" + i, HttpStatus.SC_OK, HttpStatus.SC_OK);
ProductInventoryInfo inventoryInfo = new ProductInventoryInfo();
inventoryInfo.setManageStock(true);
inventoryInfo.setOutOfStockBehavior("HideProduct");
myProduct.setInventoryInfo(inventoryInfo);
AdminProductFactory.updateProduct(apiContext, DataViewMode.Live, myProduct, myProduct.getProductCode(), HttpStatus.SC_OK, HttpStatus.SC_OK);
List<LocationInventory> locationInventoryList = new ArrayList<LocationInventory>();
LocationInventory li = new LocationInventory();
li.setLocationCode("andersonmillwarehouse");
li.setProductCode(myProduct.getProductCode());
li.setStockOnHand(Generator.randomInt(50, 500));
locationInventoryList.add(li);
LocationInventoryFactory.addLocationInventory(apiContext, DataViewMode.Live, locationInventoryList, myProduct.getProductCode(), HttpStatus.SC_OK, HttpStatus.SC_OK);
*/ }
}
}