/** * 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'); }
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']); }
/** * 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); }
/** * 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(); }
/** * 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); }
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))); }
/** * 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(); }
/** * 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']); }
/** * 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); }
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'])); }
/** * 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'); }
/** * 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); }
/** * 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'); }
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))); }
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]); }
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; }
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; }
/** * @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'); }
/** * 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(); }
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'); }
/** * 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; }
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; } }
/** * 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'); }
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()); }
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))); }