Files
sterivein/tests/phpunit/Thelia/Tests/Action/MetaDataTest.php
2020-11-19 15:36:28 +01:00

190 lines
6.5 KiB
PHP

<?php
/*************************************************************************************/
/* This file is part of the Thelia package. */
/* */
/* Copyright (c) OpenStudio */
/* email : dev@thelia.net */
/* web : http://www.thelia.net */
/* */
/* For the full copyright and license information, please view the LICENSE.txt */
/* file that was distributed with this source code. */
/*************************************************************************************/
namespace Thelia\Tests\Action;
use Thelia\Core\Event\MetaData\MetaDataDeleteEvent;
use Thelia\Model\MetaDataQuery;
use Thelia\Model\Product;
use Thelia\Action\MetaData;
use Thelia\Core\Event\MetaData\MetaDataCreateOrUpdateEvent;
use Thelia\Model\ProductQuery;
/**
* Class MetaDataTest
* @package Thelia\Tests\Action
* @author Julien Chanséaume <jchanseaume@openstudio.fr>
*/
class MetaDataTest extends BaseAction
{
public static function setUpBeforeClass()
{
$boom = MetaDataQuery::create()
->deleteAll();
}
public function testCreate()
{
// get a product
$product = ProductQuery::create()->findOne();
// simple
$event = new MetaDataCreateOrUpdateEvent();
$event
->setMetaKey('test')
->setElementKey(get_class($product))
->setElementId($product->getId())
->setValue('test');
$action = new MetaData();
$action->createOrUpdate($event);
$created = $event->getMetaData();
$this->assertInstanceOf('Thelia\Model\MetaData', $created);
$this->assertFalse($created->isNew());
$this->assertEquals('test', $created->getMetaKey());
$this->assertEquals(get_class($product), $created->getElementKey());
$this->assertEquals($product->getId(), $created->getElementId());
$this->assertEquals('test', $created->getValue());
$this->assertEquals(false, $created->getIsSerialized());
// complex
$event = new MetaDataCreateOrUpdateEvent();
$event
->setMetaKey('test2')
->setElementKey(get_class($product))
->setElementId($product->getId())
->setValue(array("fr_FR" => "bonjour", "en_US" => "Hello"));
$action = new MetaData();
$action->createOrUpdate($event);
$created = $event->getMetaData();
$this->assertInstanceOf('Thelia\Model\MetaData', $created);
$this->assertFalse($created->isNew());
$this->assertEquals('test2', $created->getMetaKey());
$this->assertEquals(get_class($product), $created->getElementKey());
$this->assertEquals($product->getId(), $created->getElementId());
$this->assertEquals(array("fr_FR" => "bonjour", "en_US" => "Hello"), $created->getValue());
$this->assertEquals(true, $created->getIsSerialized());
return $product;
}
/**
* @param Product $product
* @depends testCreate
* @return Product
*/
public function testRead(Product $product)
{
$metaDatas = MetaDataQuery::create()
->filterByElementKey(get_class($product))
->filterByElementId($product->getId())
->find();
$this->assertEquals($metaDatas->count(), 2);
$metaData = MetaDataQuery::create()
->filterByMetaKey('test')
->filterByElementKey(get_class($product))
->filterByElementId($product->getId())
->findOne();
$this->assertNotNull($metaData);
$this->assertEquals('test', $metaData->getMetaKey());
$this->assertEquals(get_class($product), $metaData->getElementKey());
$this->assertEquals($product->getId(), $metaData->getElementId());
$this->assertEquals('test', $metaData->getValue());
$this->assertEquals(false, $metaData->getIsSerialized());
$datas = MetaDataQuery::getAllVal(get_class($product), $product->getId());
$this->assertEquals(count($datas), 2);
$this->assertEquals($datas['test'], 'test');
$this->assertEquals($datas['test2'], array("fr_FR" => "bonjour", "en_US" => "Hello"));
return $product;
}
/**
* @param Product $product
* @depends testRead
* @return Product
*/
public function testUpdate(Product $product)
{
$metaData = MetaDataQuery::create()
->filterByMetaKey('test')
->filterByElementKey(get_class($product))
->filterByElementId($product->getId())
->findOne();
$this->assertNotNull($metaData);
$event = new MetaDataCreateOrUpdateEvent();
$event
->setMetaKey($metaData->getMetaKey())
->setElementKey($metaData->getElementKey())
->setElementId($metaData->getElementId())
->setValue(array("fr_FR" => "bonjour", "en_US" => "Hello"));
$action = new MetaData();
$action->createOrUpdate($event);
$updated = $event->getMetaData();
$this->assertInstanceOf('Thelia\Model\MetaData', $updated);
$this->assertFalse($updated->isNew());
$this->assertEquals('test', $updated->getMetaKey());
$this->assertEquals(get_class($product), $updated->getElementKey());
$this->assertEquals($product->getId(), $updated->getElementId());
$this->assertEquals(array("fr_FR" => "bonjour", "en_US" => "Hello"), $updated->getValue());
$this->assertEquals(true, $updated->getIsSerialized());
return $product;
}
/**
* @param Product $product
* @depends testUpdate
* @return Product
*/
public function testDelete(Product $product)
{
$metaData = MetaDataQuery::create()
->filterByMetaKey('test')
->filterByElementKey(get_class($product))
->filterByElementId($product->getId())
->findOne();
$this->assertNotNull($metaData);
$event = new MetaDataDeleteEvent('test', get_class($product), $product->getId());
$action = new MetaData();
$action->delete($event);
$deleted = $event->getMetaData();
$this->assertInstanceOf('Thelia\Model\MetaData', $deleted);
$this->assertTrue($deleted->isDeleted());
}
}