public function testGetProductGroups() { // new product $product = Product::getNewInstance($this->rootCategory, 'test'); $product->save(); $groups = array(); foreach (range(1, 3) as $i) { $groups[$i] = ProductRelationshipGroup::getNewInstance($product, ProductRelationship::TYPE_CROSS); $groups[$i]->position->set($i); $groups[$i]->setValueByLang('name', 'en', 'TEST_GROUP_' . $i); $groups[$i]->save(); } $this->assertEqual(count($groups), ProductRelationshipGroup::getProductGroups($product, ProductRelationship::TYPE_CROSS)->getTotalRecordCount()); $i = 1; foreach (ProductRelationshipGroup::getProductGroups($product, ProductRelationship::TYPE_CROSS) as $group) { $this->assertTrue($groups[$i] === $group); $i++; } }
public function testClone() { $image = ActiveRecordModel::getNewInstance('ProductImage'); $image->product->set($this->product); $image->save(); $this->assertSame($image, $this->product->defaultImage->get()); $numField = SpecField::getNewInstance($this->productCategory, SpecField::DATATYPE_NUMBERS, SpecField::TYPE_NUMBERS_SIMPLE); $numField->save(); $this->product->setAttributeValue($numField, 100); $this->product->save(); $option = ProductOption::getNewInstance($this->product); $option->type->set(ProductOption::TYPE_SELECT); $option->setValueByLang('name', 'en', 'test'); $option->save(); $related = Product::getNewInstance($this->productCategory, 'related'); $related->save(); $relGroup = ProductRelationshipGroup::getNewInstance($this->product, ProductRelationship::TYPE_CROSS); $relGroup->save(); $rel = ProductRelationship::getNewInstance($this->product, $related, $relGroup); $rel->save(); $this->assertEquals(1, $this->product->getRelationships()->size()); $cloned = clone $this->product; $this->assertEquals(100, $cloned->getSpecification()->getAttribute($numField)->value->get()); $cloned->setAttributeValue($numField, 200); $cloned->setPrice($this->usd, 80); $cloned->save(); $this->assertNotEquals($cloned->getID(), $this->product->getID()); ActiveRecordModel::clearPool(); $reloaded = Product::getInstanceByID($cloned->getID(), true); $reloaded->loadPricing(); $this->assertEquals(80, $reloaded->getPrice($this->usd)); $reloaded->loadSpecification(); $this->assertEquals(200, $reloaded->getSpecification()->getAttribute($numField)->value->get()); // related products $rel = $reloaded->getRelationships(); $this->assertEquals(1, $rel->size()); $this->assertSame($reloaded, $rel->get(0)->productRelationshipGroup->get()->product->get()); // options $clonedOpts = ProductOption::getProductOptions($reloaded); $this->assertEquals(1, $clonedOpts->size()); // image $this->assertTrue(is_object($reloaded->defaultImage->get())); $this->assertNotEquals($reloaded->defaultImage->get()->getID(), $this->product->defaultImage->get()->getID()); }
public function testGetRelatedProducts() { // new product $product = Product::getNewInstance($this->rootCategory, 'test'); $product->save(); // groups $groups = array(0 => null); foreach (range(1, 2) as $i) { $groups[$i] = ProductRelationshipGroup::getNewInstance($product, ProductRelationship::TYPE_CROSS); $groups[$i]->position->set($i); $groups[$i]->setValueByLang('name', 'en', 'TEST_GROUP_' . $i); $groups[$i]->save(); } // related products $relatedProducts = array(); $relationships = array(); foreach (range(1, 9) as $i) { $relatedProducts[$i] = Product::getNewInstance($this->rootCategory, 'test'); $relatedProducts[$i]->save(); $relationships[$i] = ProductRelationship::getNewInstance($product, $relatedProducts[$i], $groups[floor(($i - 1) / 3)]); $relationships[$i]->position->set(9 - $i); $relationships[$i]->save(); } // test order $groupPosition = -1; $productPosition = -1; foreach (ProductRelationship::getRelationships($product, false, ProductRelationship::TYPE_CROSS) as $relationship) { $currentGroupPosition = $relationship->productRelationshipGroup->get() ? $relationship->productRelationshipGroup->get()->position->get() : $groupPosition; $currentProductPosition = $relationship->position->get(); $this->assertTrue($productPosition <= $currentProductPosition || $groupPosition <= $currentGroupPosition, "{$productPosition} <= {$currentProductPosition} || {$groupPosition} <= {$currentGroupPosition}"); $groupPosition = $currentGroupPosition; $productPosition = $currentProductPosition; } }
/** * @role update */ public function create() { $group = ProductRelationshipGroup::getNewInstance($this->getOwnerInstanceByID($this->request->get('ownerID')), $this->request->get('type')); return $this->save($group); }