Initial commit
This commit is contained in:
18
tests/OrderState.php
Normal file
18
tests/OrderState.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\StateMachine;
|
||||
|
||||
use NoccyLabs\StateMachine\StateTrait;
|
||||
use NoccyLabs\StateMachine\Attributes\ValidTransitions;
|
||||
|
||||
enum OrderState {
|
||||
use StateTrait;
|
||||
#[ValidTransitions([OrderState::PROCESSING])]
|
||||
case PENDING;
|
||||
#[ValidTransitions([OrderState::PROCESSED,OrderState::PENDING])]
|
||||
case PROCESSING;
|
||||
#[ValidTransitions([OrderState::SHIPPED])]
|
||||
case PROCESSED;
|
||||
#[NoValidTransitions]
|
||||
case SHIPPED;
|
||||
}
|
||||
26
tests/StateMachineTraitTest.php
Normal file
26
tests/StateMachineTraitTest.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\StateMachine;
|
||||
|
||||
use NoccyLabs\StateMachine\StateMachineTrait;
|
||||
use NoccyLabs\StateMachine\StateTrait;
|
||||
use NoccyLabs\StateMachine\Attributes\ValidTransitions;
|
||||
|
||||
require_once __DIR__."/OrderState.php";
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\CoversClass(StateMachineTrait::class)]
|
||||
class StateMachineTraitTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
use StateMachineTrait;
|
||||
|
||||
private OrderState $state = OrderState::PENDING;
|
||||
|
||||
public function testValidTransitions()
|
||||
{
|
||||
|
||||
$this->tryTransition($this->state, OrderState::PROCESSING);
|
||||
$this->expectException(\Exception::class);
|
||||
$this->tryTransition($this->state, OrderState::SHIPPED);
|
||||
|
||||
}
|
||||
}
|
||||
30
tests/StateTraitTest.php
Normal file
30
tests/StateTraitTest.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace NoccyLabs\StateMachine;
|
||||
|
||||
use NoccyLabs\StateMachine\StateMachineTrait;
|
||||
use NoccyLabs\StateMachine\StateTrait;
|
||||
use NoccyLabs\StateMachine\Attributes\ValidTransitions;
|
||||
|
||||
require_once __DIR__."/OrderState.php";
|
||||
|
||||
#[\PHPUnit\Framework\Attributes\CoversClass(StateTrait::class)]
|
||||
class StateTraitTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
public function testValidTransitions()
|
||||
{
|
||||
$os = OrderState::PENDING;
|
||||
$this->assertTrue($os->canTransitionTo(OrderState::PROCESSING));
|
||||
$this->assertFalse($os->canTransitionTo(OrderState::PROCESSED));
|
||||
|
||||
$os = OrderState::PROCESSING;
|
||||
$this->assertTrue($os->canTransitionTo(OrderState::PENDING));
|
||||
$this->assertTrue($os->canTransitionTo(OrderState::PROCESSED));
|
||||
$this->assertFalse($os->canTransitionTo(OrderState::SHIPPED));
|
||||
|
||||
$os = OrderState::SHIPPED;
|
||||
$this->assertFalse($os->canTransitionTo(OrderState::PENDING));
|
||||
$this->assertFalse($os->canTransitionTo(OrderState::PROCESSED));
|
||||
$this->assertFalse($os->canTransitionTo(OrderState::SHIPPED));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user