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

227 lines
7.9 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 Propel\Runtime\ActiveQuery\Criteria;
use Thelia\Action\OrderStatus as OrderStatusAction;
use Thelia\Core\Event\OrderStatus\OrderStatusCreateEvent;
use Thelia\Core\Event\OrderStatus\OrderStatusDeleteEvent;
use Thelia\Core\Event\OrderStatus\OrderStatusUpdateEvent;
use Thelia\Core\Event\UpdatePositionEvent;
use Thelia\Model\OrderStatusQuery;
use Thelia\Tests\TestCaseWithURLToolSetup;
use Thelia\Model\OrderStatus as OrderStatusModel;
/**
* Class OrderStatusTest
* @package Thelia\Tests\Action
* @author Gilles Bourgeat <gbourgeat@openstudio.fr>
*/
class OrderStatusTest extends TestCaseWithURLToolSetup
{
/**
* @param OrderStatusModel $orderStatus
* @return OrderStatusUpdateEvent
*/
public function getUpdateEvent(OrderStatusModel $orderStatus)
{
$event = new OrderStatusUpdateEvent($orderStatus->getId());
$event
->setLocale($orderStatus->getLocale())
->setTitle($orderStatus->getTitle())
->setChapo($orderStatus->getChapo())
->setDescription($orderStatus->getDescription())
->setPostscriptum($orderStatus->getPostscriptum())
->setColor($orderStatus->getColor())
->setCode($orderStatus->getCode())
;
return $event;
}
/**
* @param OrderStatusUpdateEvent $event
* @return OrderStatusModel
*/
public function processUpdateAction($event)
{
$orderStatusAction = new OrderStatusAction();
$orderStatusAction->update($event);
return $event->getOrderStatus();
}
/**
* test order status creation
* @covers Thelia\Action\OrderStatus::create
*/
public function testCreateOrderStatus()
{
OrderStatusQuery::create()->filterByCode(['order_status_test', 'order_status_test2'], Criteria::IN)->delete();
$code = 'order_status_test';
$event = new OrderStatusCreateEvent();
$event
->setLocale('en_US')
->setTitle('order status creation test')
->setCode($code);
$orderStatusAction = new OrderStatusAction();
$orderStatusAction->create($event);
$orderStatus = $event->getOrderStatus();
$this->assertInstanceOf('Thelia\Model\OrderStatus', $orderStatus);
$this->assertEquals('order status creation test', $orderStatus->getTitle());
$this->assertEquals($code, $orderStatus->getCode());
}
/**
* test update creation
* @covers Thelia\Action\OrderStatus::update
*/
public function testUpdateOrderStatusProtected()
{
if (null !== $find = OrderStatusQuery::create()->findOneByCode('paid_force_update')) {
$find->setCode('paid')->save();
}
if (null === OrderStatusQuery::create()->findOneByCode('paid')) {
$this->fail('It\'s not possible to run the tests, because the order status "paid" not found');
}
$event = $this->getUpdateEvent(OrderStatusQuery::create()->findOneByCode('paid'));
$event->setDescription('test');
$event->setCode('paid_force_update');
$orderStatusAction = new OrderStatusAction();
$orderStatusAction->update($event);
$orderStatus = $event->getOrderStatus();
$this->assertInstanceOf('Thelia\Model\OrderStatus', $orderStatus);
$this->assertEquals('test', $orderStatus->getDescription());
$this->assertEquals('paid', $orderStatus->getCode());
}
/**
* test update creation
* @covers Thelia\Action\OrderStatus::update
* @depends testCreateOrderStatus
*/
public function testUpdateOrderStatusNotProtected()
{
$event = $this->getUpdateEvent(OrderStatusQuery::create()->findOneByCode('order_status_test'));
$event->setDescription('test');
$event->setCode('order_status_test2');
$orderStatusAction = new OrderStatusAction();
$orderStatusAction->update($event);
$orderStatus = $event->getOrderStatus();
$this->assertInstanceOf('Thelia\Model\OrderStatus', $orderStatus);
$this->assertEquals('test', $orderStatus->getDescription());
$this->assertEquals('order_status_test2', $orderStatus->getCode());
}
/**
* test order status removal
* @covers Thelia\Action\OrderStatus::delete
* @depends testUpdateOrderStatusNotProtected
*/
public function testDeleteOrderStatus()
{
$orderStatus = OrderStatusQuery::create()->findOneByCode('order_status_test2');
$event = new OrderStatusDeleteEvent($orderStatus->getId());
$orderStatusAction = new OrderStatusAction();
$orderStatusAction->delete($event);
$orderStatus = $event->getOrderStatus();
$this->assertInstanceOf('Thelia\Model\OrderStatus', $orderStatus);
$this->assertTrue($orderStatus->isDeleted());
}
/**
* test order status removal
* @covers Thelia\Action\OrderStatus::delete
* @depends testUpdateOrderStatusProtected
*/
public function testDeleteOrderStatusProtected()
{
$orderStatus = OrderStatusQuery::create()->findOneByCode('paid');
$event = new OrderStatusDeleteEvent($orderStatus->getId());
$orderStatusAction = new OrderStatusAction();
try {
$orderStatusAction->delete($event);
$this->fail("A protected order status has been removed");
} catch (\Exception $e) {
$this->assertTrue(true);
}
}
/**
* test order status removal
* @covers Thelia\Action\OrderStatus::delete
* @depends testUpdateOrderStatusNotProtected
*/
public function testDeleteOrderStatusWithOrders()
{
$orderStatus = OrderStatusQuery::create()->findOneByCode('paid');
$event = new OrderStatusDeleteEvent($orderStatus->getId());
$orderStatusAction = new OrderStatusAction();
try {
$orderStatusAction->delete($event);
$this->fail("A protected order status with orders has been removed");
} catch (\Exception $e) {
$this->assertTrue(true);
}
}
/**
* test order status update position
* @covers Thelia\Action\OrderStatus::updatePosition
*/
public function testUpdatePositionUp()
{
$orderStatus = OrderStatusQuery::create()
->filterByPosition(2)
->findOne();
if (null === $orderStatus) {
$this->fail('Use fixtures before launching test, there is not enough folder in database');
}
$newPosition = $orderStatus->getPosition()-1;
$event = new UpdatePositionEvent($orderStatus->getId(), UpdatePositionEvent::POSITION_UP);
$orderStatusAction = new OrderStatusAction();
$orderStatusAction->updatePosition($event, null, $this->getMockEventDispatcher());
$orderStatusUpdated = OrderStatusQuery::create()->findOneById($orderStatus->getId());
$this->assertEquals($newPosition, $orderStatusUpdated->getPosition(), sprintf("new position is %d, new position expected is %d for order status %d", $newPosition, $orderStatusUpdated->getPosition(), $orderStatusUpdated->getCode()));
}
}