refactored State pattern example

This commit is contained in:
Dominik Liebler
2018-06-14 22:49:28 +02:00
parent ea85485b85
commit 93d4ebf90f
11 changed files with 133 additions and 113 deletions

View File

@@ -2,30 +2,42 @@
namespace DesignPatterns\Behavioral\State\Tests;
use DesignPatterns\Behavioral\State\ContextOrder;
use DesignPatterns\Behavioral\State\CreateOrder;
use DesignPatterns\Behavioral\State\OrderContext;
use PHPUnit\Framework\TestCase;
class StateTest extends TestCase
{
public function testCanShipCreatedOrder()
public function testIsCreatedWithStateCreated()
{
$order = new CreateOrder();
$contextOrder = new ContextOrder();
$contextOrder->setState($order);
$contextOrder->done();
$orderContext = OrderContext::create();
$this->assertEquals('shipping', $contextOrder->getStatus());
$this->assertEquals('created', $orderContext->toString());
}
public function testCanCompleteShippedOrder()
public function testCanProceedToStateShipped()
{
$order = new CreateOrder();
$contextOrder = new ContextOrder();
$contextOrder->setState($order);
$contextOrder->done();
$contextOrder->done();
$contextOrder = OrderContext::create();
$contextOrder->proceedToNext();
$this->assertEquals('completed', $contextOrder->getStatus());
$this->assertEquals('shipped', $contextOrder->toString());
}
public function testCanProceedToStateDone()
{
$contextOrder = OrderContext::create();
$contextOrder->proceedToNext();
$contextOrder->proceedToNext();
$this->assertEquals('done', $contextOrder->toString());
}
public function testStateDoneIsTheLastPossibleState()
{
$contextOrder = OrderContext::create();
$contextOrder->proceedToNext();
$contextOrder->proceedToNext();
$contextOrder->proceedToNext();
$this->assertEquals('done', $contextOrder->toString());
}
}