public function testAssignmentsXml()
 {
     $document = new Document('TestCatalog');
     foreach (['PROD1' => 'CAT1', 'PROD1' => 'CAT2', 'PROD2' => 'CAT1', 'PROD3' => 'CAT3'] as $product => $category) {
         // simulate some application logic
         $primary = 'PROD1' === $product && 'CAT2' === $category;
         $deleted = 'PROD2' === $product && 'CAT1' === $category;
         $element = new Assignment($product, $category);
         // flag as deleted if app logic says so, otherwise handle primary flag...
         if ($deleted) {
             $element->setDeleted();
         } else {
             $element->setPrimary($primary);
         }
         $document->addObject($element);
         // simulate some more application logic, put all primary products in CAT42
         if ($primary) {
             $element = new Assignment($product, 'CAT42');
             $document->addObject($element);
         }
     }
     $sampleXml = $this->loadFixture('assignments.xml');
     $outputXml = $document->getDomDocument();
     $this->assertEqualXMLStructure($sampleXml->firstChild, $outputXml->firstChild);
 }
 public function setUp()
 {
     $document = new Document('TestCatalog');
     foreach (['Product', 'Set', 'Bundle', 'Variation'] as $index => $example) {
         $element = new Product(strtoupper($example) . '123');
         $element->setName($example . ' number 123');
         $element->setDescription('The description for an <i>example</i> ' . strtolower($example) . '! • Bullet Point', true);
         $element->setUpc('50000000000' . $index);
         $element->setQuantities();
         // include, but use defaults
         $element->setRank(1);
         $element->setSitemap();
         // include, but use defaults
         $element->setBrand('SampleBrand™');
         $element->setFlags(true, false);
         $element->setDates('2015-01-23 01:23:45', '2025-01-23 01:23:45');
         $element->setPageAttributes('Amazing ' . $example, 'Buy our ' . $example . ' today!', $example . ', test, example', 'http://example.com/' . strtolower($example) . '/123');
         $element->setCustomAttributes(['type' => 'Examples', 'zzz' => 'Should be exported last within custom-attributes', 'primaryImage' => strtolower($example) . '-123.png', 'multiWow' => ['so', 'such', 'many', 'much', 'very'], 'boolTrue' => true, 'boolFalse' => false]);
         // elements/attributes specific to bundle/set/product
         if ('Bundle' === $example) {
             $element->setProductQuantities(['SKU0000001' => 10, 'SKU0000002' => 20]);
             $element->setTax(20);
         } elseif ('Set' === $example) {
             $element->setProducts(['PRODUCT123', 'PRODUCT456']);
         } elseif ('Product' === $example) {
             $element->setSharedAttributes(['AT001', 'AT002']);
             $element->setVariants(['SKU0000001' => false, 'SKU0000002' => false, 'SKU0000003' => true]);
         }
         if ('Variation' !== $example) {
             $element->setClassification('CAT123', 'TestCatalog');
         }
         $document->addObject($element);
     }
     $this->document = $document;
 }
 public function testVariantsXml()
 {
     $document = new Document('TestCatalog');
     $variants = ['colour' => ['red' => 'Red', 'blue' => 'Blue'], 'height' => ['H1' => 'Grande', 'H2' => 'Tall']];
     foreach ($variants as $variant => $values) {
         $element = new Variant($variant);
         $element->addTags($values);
         $document->addObject($element);
     }
     $sampleXml = $this->loadFixture('variants.xml');
     $outputXml = $document->getDomDocument();
     $this->assertEqualXMLStructure($sampleXml->firstChild, $outputXml->firstChild);
 }
 public function testAssignmentsXml()
 {
     $document = new Document('TestCatalog');
     // PROD1 has a primary assignment, non-primary, and unspecified
     $element = new Assignment('PROD1', 'CAT1');
     $element->setPrimary(false);
     $document->addObject($element);
     $element = new Assignment('PROD1', 'CAT2');
     $element->setPrimary(true);
     $document->addObject($element);
     $element = new Assignment('PROD1', 'CAT42');
     $document->addObject($element);
     // PROD2 has a deleted assignment
     $element = new Assignment('PROD2', 'CAT1');
     $element->setDeleted();
     $document->addObject($element);
     // PROD3 has a primary assignment
     $element = new Assignment('PROD3', 'CAT3');
     $element->setPrimary(false);
     $document->addObject($element);
     $sampleXml = $this->loadFixture('assignments.xml');
     $outputXml = $document->getDomDocument();
     $this->assertEqualXMLStructure($sampleXml->firstChild, $outputXml->firstChild);
 }