Пример #1
0
 /**
  * Insert product data.
  */
 public function migrate()
 {
     $this->msg('Adding product base performance data', 0);
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->getContext());
     $productTypeItem = $this->getTypeItem('product/type', 'product', 'default');
     $productItem = $productManager->createItem();
     $productItem->setTypeId($productTypeItem->getId());
     $productItem->setStatus(1);
     $productItem->setDateStart('1970-01-01 00:00:00');
     if ($this->count >= 1000) {
         $count = (int) $this->count / 1000;
         $size = 1000;
     } else {
         $count = 1;
         $size = $this->count;
     }
     for ($i = 0; $i < $count; $i++) {
         $this->txBegin();
         for ($j = 0; $j < $size; $j++) {
             $code = 'perf-' . str_pad($i * 1000 + $j, 5, '0', STR_PAD_LEFT);
             $productItem->setId(null);
             $productItem->setCode($code);
             $productItem->setLabel($code);
             $productManager->saveItem($productItem, false);
         }
         $this->txCommit();
     }
     $this->status('done');
 }
Пример #2
0
 public function testSearchItemsWithReference()
 {
     $context = \TestHelperExtjs::getContext();
     $params = (object) array('site' => 'unittest', 'condition' => (object) array('&&' => array(0 => (object) array('==' => (object) array('price.quantity' => 1000)))), 'sort' => 'price.quantity', 'dir' => 'ASC', 'start' => 0, 'limit' => 1);
     $price = $this->object->searchItems($params);
     // find refs
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $productsList = $productManager->getSubManager('lists');
     $search = $productsList->createSearch();
     $expr = array($search->compare('==', 'product.lists.domain', 'price'), $search->compare('==', 'product.lists.refid', $price['items'][0]->{'price.id'}));
     $search->setConditions($search->combine('&&', $expr));
     $sort = array($search->sort('+', 'product.lists.id'));
     $search->setSortations($sort);
     $search->setSlice(0, 1);
     $items = $productsList->searchItems($search);
     if (($productItem = reset($items)) === false) {
         throw new \Exception('No item found');
     }
     $parentid = $productItem->getParentId();
     // search with refs
     $params = (object) array('site' => 'unittest', 'condition' => (object) array('&&' => array(0 => (object) array('==' => (object) array('price.quantity' => 1000)))), 'sort' => 'price.quantity', 'dir' => 'ASC', 'start' => 0, 'limit' => 1, 'domain' => 'product', 'parentid' => $parentid);
     $result = $this->object->searchItems($params);
     $this->assertEquals(1, count($result['items']));
     $this->assertEquals(1, $result['total']);
     $this->assertTrue($result['success']);
     $this->assertEquals($price['items'], $result['items']);
 }
Пример #3
0
 /**
  * Sets up the fixture, for example, opens a network connection.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $context = \TestHelper::getContext();
     $paths = \TestHelper::getHtmlTemplatePaths();
     $this->object = new \Aimeos\Client\Html\Catalog\Lists\Items\Standard($context, $paths);
     $catalogManager = \Aimeos\MShop\Catalog\Manager\Factory::createManager($context);
     $search = $catalogManager->createSearch();
     $search->setConditions($search->compare('==', 'catalog.code', 'cafe'));
     $catItems = $catalogManager->searchItems($search);
     if (($catItem = reset($catItems)) === false) {
         throw new \Exception('No catalog item found');
     }
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNC', 'CNE')));
     $total = 0;
     $view = \TestHelper::getView();
     $view->listProductItems = $productManager->searchItems($search, array('media', 'price', 'text'), $total);
     $view->listProductTotal = $total;
     $view->listPageSize = 100;
     $view->listPageCurr = 1;
     $view->listParams = array();
     $view->listCatPath = array($catalogManager->createItem(), $catItem);
     $this->object->setView($view);
 }
Пример #4
0
 /**
  * Sets up the fixture.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $this->editor = \TestHelper::getContext()->getEditor();
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager(\TestHelper::getContext());
     $listManager = $manager->getSubManager('lists');
     $this->object = $listManager->getSubManager('type');
 }
 /**
  * Adds the product property test data.
  *
  * @param array $testdata Associative list of key/list pairs
  * @throws \Aimeos\MW\Setup\Exception If no type ID is found
  */
 private function addProductPropertyData(array $testdata)
 {
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->additional, 'Standard');
     $productPropertyManager = $productManager->getSubManager('property', 'Standard');
     $productPropertyTypeManager = $productPropertyManager->getSubManager('type', 'Standard');
     $typeIds = array();
     $type = $productPropertyTypeManager->createItem();
     $prodIds = $this->getProductIds($productManager);
     $this->conn->begin();
     foreach ($testdata['product/property/type'] as $key => $dataset) {
         $type->setId(null);
         $type->setCode($dataset['code']);
         $type->setDomain($dataset['domain']);
         $type->setLabel($dataset['label']);
         $type->setStatus($dataset['status']);
         $productPropertyTypeManager->saveItem($type);
         $typeIds[$key] = $type->getId();
     }
     $prodProperty = $productPropertyManager->createItem();
     foreach ($testdata['product/property'] as $key => $dataset) {
         if (!isset($typeIds[$dataset['typeid']])) {
             throw new \Aimeos\MW\Setup\Exception(sprintf('No product property type ID found for "%1$s"', $dataset['typeid']));
         }
         $prodProperty->setId(null);
         $prodProperty->setParentId($prodIds[$dataset['parentid']]);
         $prodProperty->setTypeId($typeIds[$dataset['typeid']]);
         $prodProperty->setLanguageId($dataset['langid']);
         $prodProperty->setValue($dataset['value']);
         $productPropertyManager->saveItem($prodProperty, false);
     }
     $this->conn->commit();
 }
Пример #6
0
 /**
  * Sets up the fixture, for example, opens a network connection.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $pluginManager = \Aimeos\MShop\Plugin\Manager\Factory::createManager(\TestHelperMShop::getContext());
     $this->plugin = $pluginManager->createItem();
     $this->plugin->setProvider('PropertyAdd');
     $this->plugin->setStatus('1');
     $this->plugin->setConfig(array('product.stock.parentid' => array('product.stock.warehouseid', 'product.stock.editor', 'product.stock.stocklevel', 'product.stock.dateback')));
     $orderManager = \Aimeos\MShop\Order\Manager\Factory::createManager(\TestHelperMShop::getContext());
     $orderBaseManager = $orderManager->getSubManager('base');
     $orderBaseProductManager = $orderBaseManager->getSubManager('product');
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager(\TestHelperMShop::getContext());
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNE', 'CNC')));
     $products = $manager->searchItems($search);
     if (count($products) !== 2) {
         throw new \Exception('Wrong number of products');
     }
     $this->products = array();
     foreach ($products as $product) {
         $item = $orderBaseProductManager->createItem();
         $item->copyFrom($product);
         $this->products[$product->getCode()] = $item;
     }
     $this->order = $orderBaseManager->createItem();
     $this->object = new \Aimeos\MShop\Plugin\Provider\Order\PropertyAdd(\TestHelperMShop::getContext(), $this->plugin);
 }
Пример #7
0
 public function testSaveDeleteItem()
 {
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager(\TestHelperMShop::getContext());
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', 'CNC'));
     $result = $productManager->searchItems($search, array('attribute'));
     if (($product = reset($result)) === false) {
         throw new \Exception('No product item with code CNE found!');
     }
     $attributes = $product->getRefItems('attribute');
     if (($attrItem = reset($attributes)) === false) {
         throw new \Exception('Product doesnt have any attribute item');
     }
     $product->setId(null);
     $product->setCode('ModifiedCNC');
     $productManager->saveItem($product);
     $this->object->saveItem($product);
     $search = $this->object->createSearch();
     $search->setConditions($search->compare('==', 'index.attribute.id', $attrItem->getId()));
     $result = $this->object->searchItems($search);
     $this->object->deleteItem($product->getId());
     $productManager->deleteItem($product->getId());
     $search = $this->object->createSearch();
     $search->setConditions($search->compare('==', 'index.attribute.id', $attrItem->getId()));
     $result2 = $this->object->searchItems($search);
     $this->assertContains($product->getId(), array_keys($result));
     $this->assertFalse(in_array($product->getId(), array_keys($result2)));
 }
Пример #8
0
 /**
  * Adds the product test data.
  *
  * @param array $testdata Associative list of key/list pairs
  * @throws \Aimeos\MW\Setup\Exception If no type ID is found
  */
 private function addProductData(array $testdata)
 {
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->additional, 'Standard');
     $productTypeManager = $productManager->getSubManager('type', 'Standard');
     $typeIds = array();
     $type = $productTypeManager->createItem();
     $this->conn->begin();
     foreach ($testdata['product/type'] as $key => $dataset) {
         $type->setId(null);
         $type->setCode($dataset['code']);
         $type->setDomain($dataset['domain']);
         $type->setLabel($dataset['label']);
         $type->setStatus($dataset['status']);
         $productTypeManager->saveItem($type);
         $typeIds[$key] = $type->getId();
     }
     $product = $productManager->createItem();
     foreach ($testdata['product'] as $key => $dataset) {
         if (!isset($typeIds[$dataset['typeid']])) {
             throw new \Aimeos\MW\Setup\Exception(sprintf('No product type ID found for "%1$s"', $dataset['typeid']));
         }
         $product->setId(null);
         $product->setTypeId($typeIds[$dataset['typeid']]);
         $product->setCode($dataset['code']);
         $product->setLabel($dataset['label']);
         $product->setStatus($dataset['status']);
         if (isset($dataset['config'])) {
             $product->setConfig($dataset['config']);
         } else {
             $product->setConfig(array());
         }
         $productManager->saveItem($product, false);
     }
     $this->conn->commit();
 }
Пример #9
0
 /**
  * Sets up the fixture, especially creates products.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $orderProducts = array();
     $context = \TestHelper::getContext();
     $this->couponItem = \Aimeos\MShop\Coupon\Manager\Factory::createManager($context)->createItem();
     $provider = new \Aimeos\MShop\Coupon\Provider\Example($context, $this->couponItem, 'abcd');
     $this->object = new \Aimeos\MShop\Coupon\Provider\Decorator\Required($context, $this->couponItem, 'abcd', $provider);
     $this->object->setObject($this->object);
     $orderManager = \Aimeos\MShop\Order\Manager\Factory::createManager($context);
     $orderBaseManager = $orderManager->getSubManager('base');
     $orderProductManager = $orderBaseManager->getSubManager('product');
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNC')));
     $products = $productManager->searchItems($search);
     $priceManager = \Aimeos\MShop\Price\Manager\Factory::createManager($context);
     $price = $priceManager->createItem();
     $price->setValue(321);
     foreach ($products as $product) {
         $orderProduct = $orderProductManager->createItem();
         $orderProduct->copyFrom($product);
         $orderProducts[$product->getCode()] = $orderProduct;
     }
     $orderProducts['CNC']->setPrice($price);
     $this->orderBase = new \Aimeos\MShop\Order\Item\Base\Standard($priceManager->createItem(), $context->getLocale());
     $this->orderBase->addProduct($orderProducts['CNC']);
 }
Пример #10
0
 /**
  * Sets up the fixture, for example, opens a network connection.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $pluginManager = \Aimeos\MShop\Plugin\Manager\Factory::createManager(\TestHelper::getContext());
     $this->plugin = $pluginManager->createItem();
     $this->plugin->setTypeId(2);
     $this->plugin->setProvider('ProductLimit');
     $this->plugin->setConfig(array('single-number-max' => 10));
     $this->plugin->setStatus('1');
     $orderManager = \Aimeos\MShop\Order\Manager\Factory::createManager(\TestHelper::getContext());
     $orderBaseManager = $orderManager->getSubManager('base');
     $orderBaseProductManager = $orderBaseManager->getSubManager('product');
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager(\TestHelper::getContext());
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNE', 'CNC')));
     $products = $manager->searchItems($search);
     if (count($products) !== 2) {
         throw new \Exception('Wrong number of products');
     }
     $this->products = array();
     foreach ($products as $product) {
         $item = $orderBaseProductManager->createItem();
         $item->copyFrom($product);
         $this->products[$product->getCode()] = $item;
     }
     $this->order = $orderBaseManager->createItem();
     $this->object = new \Aimeos\MShop\Plugin\Provider\Order\ProductLimit(\TestHelper::getContext(), $this->plugin);
 }
Пример #11
0
 public function testSaveDeleteItem()
 {
     $ctx = \TestHelperExtjs::getContext();
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($ctx);
     $warehouseManager = $productManager->getSubManager('stock')->getSubManager('warehouse');
     $search = $warehouseManager->createSearch();
     $search->setConditions($search->compare('==', 'product.stock.warehouse.code', 'default'));
     $search->setSlice(0, 1);
     $items = $warehouseManager->searchItems($search);
     if (($warehouseItem = reset($items)) === false) {
         throw new \RuntimeException('No item found');
     }
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('~=', 'product.label', 'Cheapest'));
     $items = $productManager->searchItems($search);
     if (($productItem = reset($items)) === false) {
         throw new \RuntimeException('No item found');
     }
     $saveParams = (object) array('site' => 'unittest', 'items' => (object) array('product.stock.parentid' => $productItem->getId(), 'product.stock.warehouseid' => $warehouseItem->getId(), 'product.stock.stocklevel' => 999, 'product.stock.dateback' => '2000-01-01 00:00:01'));
     $saved = $this->object->saveItems($saveParams);
     $searchParams = (object) array('site' => 'unittest', 'condition' => (object) array('&&' => array(0 => (object) array('==' => (object) array('product.stock.dateback' => '2000-01-01 00:00:01')))));
     $searched = $this->object->searchItems($searchParams);
     $deleteParams = (object) array('site' => 'unittest', 'items' => $saved['items']->{'product.stock.id'});
     $this->object->deleteItems($deleteParams);
     $result = $this->object->searchItems($searchParams);
     $this->assertInternalType('object', $saved['items']);
     $this->assertNotNull($saved['items']->{'product.stock.id'});
     $this->assertEquals($saved['items']->{'product.stock.id'}, $searched['items'][0]->{'product.stock.id'});
     $this->assertEquals($saved['items']->{'product.stock.parentid'}, $searched['items'][0]->{'product.stock.parentid'});
     $this->assertEquals($saved['items']->{'product.stock.warehouseid'}, $searched['items'][0]->{'product.stock.warehouseid'});
     $this->assertEquals($saved['items']->{'product.stock.stocklevel'}, $searched['items'][0]->{'product.stock.stocklevel'});
     $this->assertEquals($saved['items']->{'product.stock.dateback'}, $searched['items'][0]->{'product.stock.dateback'});
     $this->assertEquals(1, count($searched['items']));
     $this->assertEquals(0, count($result['items']));
 }
Пример #12
0
 /**
  * Adds product stock test data.
  */
 protected function process()
 {
     $iface = '\\Aimeos\\MShop\\Context\\Item\\Iface';
     if (!$this->additional instanceof $iface) {
         throw new \Aimeos\MW\Setup\Exception(sprintf('Additionally provided object is not of type "%1$s"', $iface));
     }
     $this->msg('Adding warehouse data', 0);
     $ds = DIRECTORY_SEPARATOR;
     $path = __DIR__ . $ds . 'default' . $ds . 'data' . $ds . 'warehouse.php';
     if (($data = (include $path)) == false) {
         throw new \Aimeos\MShop\Exception(sprintf('No file "%1$s" found for product stock domain', $path));
     }
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->additional);
     $warehouseManager = $manager->getSubManager('stock')->getSubManager('warehouse');
     $num = $total = 0;
     $item = $warehouseManager->createItem();
     foreach ($data['warehouse'] as $key => $dataset) {
         $total++;
         $item->setId(null);
         $item->setCode($dataset['code']);
         $item->setLabel($dataset['label']);
         $item->setStatus($dataset['status']);
         try {
             $warehouseManager->saveItem($item);
             $num++;
         } catch (\Aimeos\MW\DB\Exception $e) {
         }
         // if warehouse was already available
     }
     $this->status($num > 0 ? $num . '/' . $total : 'OK');
 }
Пример #13
0
 /**
  * Sets up the fixture, for example, opens a network connection.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $context = \TestHelperHtml::getContext();
     $config = $context->getConfig();
     $config->set('client/html/catalog/lists/basket-add', true);
     $paths = \TestHelperHtml::getHtmlTemplatePaths();
     $this->object = new \Aimeos\Client\Html\Catalog\Lists\Items\Standard($context, $paths);
     $catalogManager = \Aimeos\MShop\Catalog\Manager\Factory::createManager($context);
     $search = $catalogManager->createSearch();
     $search->setConditions($search->compare('==', 'catalog.code', 'cafe'));
     $catItems = $catalogManager->searchItems($search);
     if (($catItem = reset($catItems)) === false) {
         throw new \RuntimeException('No catalog item found');
     }
     $domains = array('media', 'price', 'text', 'attribute', 'product');
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNE', 'U:TEST', 'U:BUNDLE')));
     $total = 0;
     $view = \TestHelperHtml::getView('unittest', $config);
     $view->listProductItems = $productManager->searchItems($search, $domains, $total);
     $view->listProductTotal = $total;
     $view->listPageSize = 100;
     $view->listPageCurr = 1;
     $view->listParams = array();
     $view->listCatPath = array($catalogManager->createItem(), $catItem);
     $this->object->setView($view);
 }
Пример #14
0
 /**
  * Adds product test data.
  */
 protected function process()
 {
     $iface = '\\Aimeos\\MShop\\Context\\Item\\Iface';
     if (!$this->additional instanceof $iface) {
         throw new \Aimeos\MW\Setup\Exception(sprintf('Additionally provided object is not of type "%1$s"', $iface));
     }
     $this->msg('Adding product-list test data', 0);
     $this->additional->setEditor('core:unittest');
     $ds = DIRECTORY_SEPARATOR;
     $path = __DIR__ . $ds . 'data' . $ds . 'product-list.php';
     if (($testdata = (include $path)) == false) {
         throw new \Aimeos\MShop\Exception(sprintf('No file "%1$s" found for product domain', $path));
     }
     $refKeys = array();
     foreach ($testdata['product/lists'] as $dataset) {
         $refKeys[$dataset['domain']][] = $dataset['refid'];
     }
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->additional, 'Standard');
     $refIds = array();
     $refIds['attribute'] = $this->getAttributeData($refKeys['attribute']);
     $refIds['media'] = $this->getMediaData($refKeys['media']);
     $refIds['price'] = $this->getPriceData($refKeys['price']);
     $refIds['text'] = $this->getTextData($refKeys['text']);
     $refIds['tag'] = $this->getTagData($refKeys['tag']);
     $this->addProductData($testdata, $productManager, $refIds, $refKeys['product']);
     $this->status('done');
 }
Пример #15
0
 public function testFinish()
 {
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager(\TestHelper::getContext());
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNC', 'CNE')));
     $result = $productManager->searchItems($search);
     $this->object->finish((object) array('site' => 'unittest', 'items' => array_keys($result)));
 }
Пример #16
0
 public function testExportCSVFile()
 {
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->context);
     $criteria = $productManager->createSearch();
     $expr = array();
     $expr[] = $criteria->compare('==', 'product.code', 'CNE');
     $criteria->setConditions($criteria->compare('==', 'product.code', 'CNE'));
     $searchResult = $productManager->searchItems($criteria);
     if (($productItem = reset($searchResult)) === false) {
         throw new \Exception('No item with product code CNE found');
     }
     $params = new \stdClass();
     $params->site = $this->context->getLocale()->getSite()->getCode();
     $params->items = $productItem->getId();
     $params->lang = 'de';
     $result = $this->object->exportFile($params);
     $file = substr($result['file'], 9, -14);
     $this->assertTrue(file_exists($file));
     $zip = new \ZipArchive();
     $zip->open($file);
     $testdir = 'tmp' . DIRECTORY_SEPARATOR . 'csvexport';
     if (!is_dir($testdir) && mkdir($testdir, 0755, true) === false) {
         throw new \Aimeos\Controller\ExtJS\Exception(sprintf('Couldn\'t create directory "csvexport"'));
     }
     $zip->extractTo($testdir);
     $zip->close();
     if (unlink($file) === false) {
         throw new \Exception('Unable to remove export file');
     }
     $deCSV = $testdir . DIRECTORY_SEPARATOR . 'de.csv';
     $this->assertTrue(file_exists($deCSV));
     $fh = fopen($deCSV, 'r');
     $lines = array();
     while (($data = fgetcsv($fh)) != false) {
         $lines[] = $data;
     }
     fclose($fh);
     if (unlink($deCSV) === false) {
         throw new \Exception('Unable to remove export file');
     }
     if (rmdir($testdir) === false) {
         throw new \Exception('Unable to remove test export directory');
     }
     $this->assertEquals($lines[0][0], 'Language ID');
     $this->assertEquals($lines[0][1], 'Product type');
     $this->assertEquals($lines[0][2], 'Product code');
     $this->assertEquals($lines[0][3], 'List type');
     $this->assertEquals($lines[0][4], 'Text type');
     $this->assertEquals($lines[0][5], 'Text ID');
     $this->assertEquals($lines[0][6], 'Text');
     $this->assertEquals('de', $lines[2][0]);
     $this->assertEquals('default', $lines[2][1]);
     $this->assertEquals('CNE', $lines[2][2]);
     $this->assertEquals('unittype13', $lines[2][3]);
     $this->assertEquals('meta-description', $lines[2][4]);
     $this->assertEquals('Expresso', $lines[2][6]);
 }
Пример #17
0
 protected function getProductItem()
 {
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->context);
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', 'CNC'));
     $items = $manager->searchItems($search);
     if (($item = reset($items)) === false) {
         throw new \RuntimeException('No product item with code "CNC" found');
     }
     return $item;
 }
Пример #18
0
 protected function getProductItem()
 {
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager(\TestHelper::getContext());
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', 'CNE'));
     $items = $manager->searchItems($search, array('product'));
     if (($item = reset($items)) === false) {
         throw new \Exception('No product item with code "CNE" found');
     }
     return $item;
 }
Пример #19
0
 /**
  * @param string $code
  */
 protected function getProductItem($code)
 {
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->context);
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', $code));
     $items = $manager->searchItems($search, array('price'));
     if (($item = reset($items)) === false) {
         throw new \Exception(sprintf('No product item with code "%1$s" found', $code));
     }
     return $item;
 }
 /**
  * Insert catalog nodes and product/catalog relations.
  */
 public function migrate()
 {
     $this->msg('Adding product categories performance data', 0);
     $context = $this->getContext();
     $catalogManager = \Aimeos\MShop\Catalog\Manager\Factory::createManager($context);
     $catalogListManager = $catalogManager->getSubManager('lists');
     $catalogListTypeManager = $catalogListManager->getSubManager('type');
     $search = $catalogListTypeManager->createSearch();
     $expr = array($search->compare('==', 'catalog.lists.type.domain', 'product'), $search->compare('==', 'catalog.lists.type.code', 'default'));
     $search->setConditions($search->combine('&&', $expr));
     $types = $catalogListTypeManager->searchItems($search);
     if (($typeItem = reset($types)) === false) {
         throw new \RuntimeException('Catalog list type item not found');
     }
     $search = $catalogManager->createSearch();
     $search->setSortations(array($search->sort('+', 'catalog.level'), $search->sort('+', 'catalog.left')));
     $search->setSlice(0, 0x7fffffff);
     $catIds = array_keys($catalogManager->searchItems($search));
     $listItem = $catalogListManager->createItem();
     $listItem->setTypeId($typeItem->getId());
     $listItem->setDomain('product');
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $search = $productManager->createSearch();
     $search->setSortations(array($search->sort('+', 'product.id')));
     $search->setSlice(0, 1000);
     $start = $pos = 0;
     do {
         $catId = current($catIds);
         if (($catId2 = next($catIds)) === false) {
             $catId2 = reset($catIds);
         }
         $result = $productManager->searchItems($search);
         $this->txBegin();
         foreach ($result as $id => $item) {
             $listItem->setId(null);
             $listItem->setParentId($catId);
             $listItem->setRefId($id);
             $listItem->setPosition($pos++);
             $catalogListManager->saveItem($listItem, false);
             $listItem->setId(null);
             $listItem->setParentId($catId2);
             $listItem->setRefId($id);
             $listItem->setPosition($pos++);
             $catalogListManager->saveItem($listItem, false);
         }
         $this->txCommit();
         $count = count($result);
         $start += $count;
         $search->setSlice($start, 1000);
     } while ($count == $search->getSliceSize());
     $this->status('done');
 }
Пример #21
0
 /**
  * Sets up the fixture, for example, opens a network connection.
  * This method is called before a test is executed.
  *
  * @access protected
  */
 protected function setUp()
 {
     $context = \TestHelperMShop::getContext();
     $pluginManager = \Aimeos\MShop\Plugin\Manager\Factory::createManager($context);
     $this->plugin = $pluginManager->createItem();
     $this->plugin->setTypeId(2);
     $this->plugin->setProvider('Shipping');
     $this->plugin->setConfig(array('threshold' => array('EUR' => '34.00')));
     $this->plugin->setStatus('1');
     $orderManager = \Aimeos\MShop\Order\Manager\Factory::createManager($context);
     $orderBaseManager = $orderManager->getSubManager('base');
     $orderBaseProductManager = $orderBaseManager->getSubManager('product');
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNE', 'CNC', 'IJKL')));
     $pResults = $manager->searchItems($search, array('price'));
     if (count($pResults) !== 3) {
         throw new \RuntimeException('Wrong number of products');
     }
     $products = array();
     foreach ($pResults as $prod) {
         $products[$prod->getCode()] = $prod;
     }
     if (($price = current($products['IJKL']->getRefItems('price'))) === false) {
         throw new \RuntimeException('No price item found');
     }
     $price->setValue(10.0);
     $this->product = $orderBaseProductManager->createItem();
     $this->product->copyFrom($products['CNE']);
     $this->product->setPrice($price);
     $product2 = $orderBaseProductManager->createItem();
     $product2->copyFrom($products['CNC']);
     $product2->setPrice($price);
     $product3 = $orderBaseProductManager->createItem();
     $product3->copyFrom($products['IJKL']);
     $product3->setPrice($price);
     $orderBaseServiceManager = $orderBaseManager->getSubManager('service');
     $serviceSearch = $orderBaseServiceManager->createSearch();
     $exp = array($serviceSearch->compare('==', 'order.base.service.type', 'delivery'), $serviceSearch->compare('==', 'order.base.service.costs', '5.00'));
     $serviceSearch->setConditions($serviceSearch->combine('&&', $exp));
     $results = $orderBaseServiceManager->searchItems($serviceSearch);
     if (($delivery = reset($results)) === false) {
         throw new \RuntimeException('No order base item found');
     }
     $this->order = $orderBaseManager->createItem();
     $this->order->setService($delivery, 'delivery');
     $this->order->addProduct($this->product);
     $this->order->addProduct($product2);
     $this->order->addProduct($product3);
     $this->object = new \Aimeos\MShop\Plugin\Provider\Order\Shipping($context, $this->plugin);
 }
 /**
  * Insert product data.
  */
 public function migrate()
 {
     $this->msg('Adding product suggestion performance data', 0);
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->getContext());
     $productListManager = $productManager->getSubManager('lists');
     $productListTypeManager = $productListManager->getSubManager('type');
     $expr = array();
     $search = $productListTypeManager->createSearch();
     $expr[] = $search->compare('==', 'product.lists.type.code', 'suggestion');
     $expr[] = $search->compare('==', 'product.lists.type.domain', 'product');
     $search->setConditions($search->combine('&&', $expr));
     $types = $productListTypeManager->searchItems($search);
     if (($listTypeItem = reset($types)) === false) {
         throw new \RuntimeException('Product list type item not found');
     }
     $search = $productManager->createSearch();
     $search->setSortations(array($search->sort('+', 'product.id')));
     $search->setSlice(0, 1000);
     $refsearch = $productManager->createSearch();
     $refsearch->setSortations(array($refsearch->sort('+', 'product.id')));
     $refsearch->setSlice(1, 1000);
     $listItem = $productListManager->createItem();
     $listItem->setTypeId($listTypeItem->getId());
     $listItem->setDomain('product');
     $start = 0;
     do {
         $num = 0;
         $result = $productManager->searchItems($search);
         $refresult = $productManager->searchItems($refsearch);
         $this->txBegin();
         foreach ($result as $id => $product) {
             $pos = 0;
             $length = $num % 4 + 3;
             foreach (array_slice($refresult, $num, $length, true) as $refid => $refproduct) {
                 $listItem->setId(null);
                 $listItem->setParentId($id);
                 $listItem->setRefId($refid);
                 $listItem->setPosition($pos++);
                 $productListManager->saveItem($listItem, false);
             }
             $num++;
         }
         $this->txCommit();
         $count = count($result);
         $start += $count;
         $search->setSlice($start, 1000);
         $refsearch->setSlice($start + 1, 1000);
     } while ($count == $search->getSliceSize());
     $this->status('done');
 }
 /**
  * Adds the product stock test data.
  *
  * @param array $testdata Associative list of key/list pairs
  * @throws \Aimeos\MW\Setup\Exception If no type ID is found
  */
 private function addProductStockData(array $testdata)
 {
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->additional, 'Standard');
     $productStockManager = $productManager->getSubManager('stock', 'Standard');
     $productStockWarehouse = $productStockManager->getSubManager('warehouse', 'Standard');
     $prodcode = array();
     foreach ($testdata['product/stock'] as $dataset) {
         if (($pos = strpos($dataset['prodid'], '/')) === false || ($str = substr($dataset['prodid'], $pos + 1)) === false) {
             throw new \Aimeos\MW\Setup\Exception(sprintf('Some keys for prodid are set wrong "%1$s"', $dataset['prodid']));
         }
         $prodcode[] = $str;
     }
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', $prodcode));
     $parentIds = array();
     foreach ($productManager->searchItems($search) as $item) {
         $parentIds['product/' . $item->getCode()] = $item->getId();
     }
     $wareIds = array();
     $ware = $productStockWarehouse->createItem();
     $this->conn->begin();
     foreach ($testdata['product/stock/warehouse'] as $key => $dataset) {
         $ware->setId(null);
         $ware->setCode($dataset['code']);
         $ware->setLabel($dataset['label']);
         $ware->setStatus($dataset['status']);
         $productStockWarehouse->saveItem($ware);
         $wareIds[$key] = $ware->getId();
     }
     $stock = $productStockManager->createItem();
     foreach ($testdata['product/stock'] as $dataset) {
         if (!isset($parentIds[$dataset['prodid']])) {
             throw new \Aimeos\MW\Setup\Exception(sprintf('No product ID found for "%1$s"', $dataset['prodid']));
         }
         if (!isset($wareIds[$dataset['warehouseid']])) {
             throw new \Aimeos\MW\Setup\Exception(sprintf('No warehouse ID found for "%1$s"', $dataset['warehouseid']));
         }
         $stock->setId(null);
         $stock->setProductId($parentIds[$dataset['prodid']]);
         $stock->setWarehouseId($wareIds[$dataset['warehouseid']]);
         $stock->setStocklevel($dataset['stocklevel']);
         $stock->setDateBack($dataset['backdate']);
         $productStockManager->saveItem($stock, false);
     }
     $this->conn->commit();
 }
Пример #24
0
 public function testDetail()
 {
     $start = microtime(true);
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->context);
     $product = $productManager->getItem($this->item->getId(), array('text', 'media', 'price', 'product', 'attribute'));
     $ids = array();
     foreach ($product->getRefItems('product') as $subproduct) {
         $ids[] = $subproduct->getId();
     }
     if (count($ids) > 0) {
         $search = $productManager->createSearch(true);
         $search->setConditions($search->compare('==', 'product.id', $ids));
         $productManager->searchItems($search, array('text', 'media', 'price', 'product', 'attribute'));
     }
     $stop = microtime(true);
     echo "\n    product detail: " . ($stop - $start) * 1000 . " msec\n";
 }
 /**
  * Insert attribute items and product/attribute relations.
  */
 public function migrate()
 {
     $this->msg('Adding product config attribute performance data', 0);
     $this->txBegin();
     $attrList = $this->getAttributeList();
     $this->txCommit();
     $context = $this->getContext();
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $productListManager = $productManager->getSubManager('lists');
     $productListTypeManager = $productListManager->getSubManager('type');
     $expr = array();
     $search = $productListTypeManager->createSearch();
     $expr[] = $search->compare('==', 'product.lists.type.domain', 'attribute');
     $expr[] = $search->compare('==', 'product.lists.type.code', 'config');
     $search->setConditions($search->combine('&&', $expr));
     $types = $productListTypeManager->searchItems($search);
     if (($productListTypeItem = reset($types)) === false) {
         throw new \RuntimeException('Product list type item not found');
     }
     $search = $productManager->createSearch();
     $search->setSortations(array($search->sort('+', 'product.id')));
     $search->setSlice(0, 1000);
     $listItem = $productListManager->createItem();
     $listItem->setTypeId($productListTypeItem->getId());
     $listItem->setDomain('attribute');
     $start = 0;
     do {
         $result = $productManager->searchItems($search);
         $this->txBegin();
         foreach ($result as $id => $item) {
             $pos = 0;
             foreach ($attrList as $attrId => $attrItem) {
                 $listItem->setId(null);
                 $listItem->setParentId($id);
                 $listItem->setRefId($attrId);
                 $listItem->setPosition($pos++);
                 $productListManager->saveItem($listItem, false);
             }
         }
         $this->txCommit();
         $count = count($result);
         $start += $count;
         $search->setSlice($start, 1000);
     } while ($count == $search->getSliceSize());
     $this->status('done');
 }
Пример #26
0
 /**
  * Gets required product item ids.
  *
  * @param array $keys List of keys for search
  * @throws \Aimeos\MW\Setup\Exception If no type ID is found
  */
 protected function getProductData(array $keys)
 {
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->additional, 'Standard');
     $codes = array();
     foreach ($keys as $dataset) {
         if (($pos = strpos($dataset, '/')) === false || ($str = substr($dataset, $pos + 1)) === false) {
             throw new \Aimeos\MW\Setup\Exception(sprintf('Some keys for ref products are set wrong "%1$s"', $dataset));
         }
         $codes[] = $str;
     }
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', $codes));
     $refIds = array();
     foreach ($manager->searchItems($search) as $item) {
         $refIds['product/' . $item->getCode()] = $item->getId();
     }
     return $refIds;
 }
Пример #27
0
 public static function setUpBeforeClass()
 {
     $context = \TestHelper::getContext();
     $manager = \Aimeos\MShop\Customer\Manager\Factory::createManager($context);
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'customer.code', 'UTC001'));
     $result = $manager->searchItems($search);
     if ((self::$customerItem = reset($result)) === false) {
         throw new \Exception('No customer found');
     }
     $manager = \Aimeos\MShop\Product\Manager\Factory::createManager($context);
     $search = $manager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', array('CNC', 'CNE')));
     foreach ($manager->searchItems($search, array('text', 'price', 'media')) as $id => $product) {
         $prices = $product->getRefItems('price', 'default', 'default');
         self::$productItems[$id]['price'] = reset($prices);
         self::$productItems[$id]['item'] = $product;
     }
 }
Пример #28
0
 /**
  * Insert product data.
  */
 protected function process()
 {
     $this->msg('Adding product base performance data', 0);
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->getContext());
     $productTypeItem = $this->getTypeItem('product/type', 'product', 'default');
     $this->txBegin();
     $productItem = $productManager->createItem();
     $productItem->setTypeId($productTypeItem->getId());
     $productItem->setStatus(1);
     $productItem->setDateStart('1970-01-01 00:00:00');
     for ($i = 0; $i < $this->count; $i++) {
         $code = 'perf-' . str_pad($i, 5, '0', STR_PAD_LEFT);
         $productItem->setId(null);
         $productItem->setCode($code);
         $productItem->setLabel($code);
         $productManager->saveItem($productItem, false);
     }
     $this->txCommit();
     $this->status('done');
 }
Пример #29
0
 public function testExportXLSFile()
 {
     $this->object = new \Aimeos\Controller\ExtJS\Product\Export\Text\Standard($this->context);
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager($this->context);
     $criteria = $productManager->createSearch();
     $expr = array();
     $expr[] = $criteria->compare('==', 'product.code', 'CNE');
     $criteria->setConditions($criteria->compare('==', 'product.code', 'CNE'));
     $searchResult = $productManager->searchItems($criteria);
     if (($productItem = reset($searchResult)) === false) {
         throw new \RuntimeException('No item with product code CNE found');
     }
     $params = new \stdClass();
     $params->site = $this->context->getLocale()->getSite()->getCode();
     $params->items = $productItem->getId();
     $params->lang = 'de';
     $result = $this->object->exportFile($params);
     $this->assertTrue(array_key_exists('file', $result));
     $file = substr($result['file'], 9, -14);
     $this->assertTrue(file_exists($file));
     $inputFileType = \PHPExcel_IOFactory::identify($file);
     $objReader = \PHPExcel_IOFactory::createReader($inputFileType);
     $objReader->setLoadSheetsOnly($params->lang);
     $objPHPExcel = $objReader->load($file);
     if (unlink($file) === false) {
         throw new \RuntimeException('Unable to remove export file');
     }
     $objWorksheet = $objPHPExcel->getActiveSheet();
     $product = $productItem->toArray();
     for ($i = 2; $i < 8; $i++) {
         $this->assertEquals($params->lang, $objWorksheet->getCellByColumnAndRow(0, $i)->getValue());
         $this->assertEquals($product['product.type'], $objWorksheet->getCellByColumnAndRow(1, $i)->getValue());
         $this->assertEquals($product['product.code'], $objWorksheet->getCellByColumnAndRow(2, $i)->getValue());
     }
     $this->assertEquals('List type', $objWorksheet->getCellByColumnAndRow(3, 1)->getValue());
     $this->assertEquals('Text type', $objWorksheet->getCellByColumnAndRow(4, 1)->getValue());
     $this->assertEquals('Text ID', $objWorksheet->getCellByColumnAndRow(5, 1)->getValue());
     $this->assertEquals('Text', $objWorksheet->getCellByColumnAndRow(6, 1)->getValue());
 }
Пример #30
0
 public function testSaveDeleteItem()
 {
     $productManager = \Aimeos\MShop\Product\Manager\Factory::createManager(\TestHelper::getContext());
     $search = $productManager->createSearch();
     $search->setConditions($search->compare('==', 'product.code', 'CNC'));
     $result = $productManager->searchItems($search);
     if (($product = reset($result)) === false) {
         throw new \Exception('No product item with code CNE found!');
     }
     $catalogManager = \Aimeos\MShop\Catalog\Manager\Factory::createManager(\TestHelper::getContext());
     $listManager = $catalogManager->getSubManager('lists');
     $search = $listManager->createSearch(true);
     $search->setConditions($search->compare('==', 'catalog.lists.domain', 'product'));
     $catListItems = $listManager->searchItems($search);
     if (($catListItem = reset($catListItems)) === false) {
         throw new \Exception('No catalog list item found!');
     }
     //new product item
     $product->setId(null);
     $product->setCode('ModifiedCNC');
     $productManager->saveItem($product);
     //new catalog list item
     $catListItem->setId(null);
     $catListItem->setRefId($product->getId());
     $listManager->saveItem($catListItem);
     $this->object->saveItem($product);
     $search = $this->object->createSearch();
     $search->setConditions($search->compare('==', 'index.catalog.id', $catListItem->getParentId()));
     $result = $this->object->searchItems($search);
     $this->object->deleteItem($product->getId());
     $listManager->deleteItem($catListItem->getId());
     $productManager->deleteItem($product->getId());
     $search = $this->object->createSearch();
     $search->setConditions($search->compare('==', 'index.catalog.id', $catListItem->getParentId()));
     $result2 = $this->object->searchItems($search);
     $this->assertContains($product->getId(), array_keys($result));
     $this->assertFalse(in_array($product->getId(), array_keys($result2)));
 }