WorkflowTest::isFinishedProvider()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 14
rs 9.7998
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: davis
5
 * Date: 1/23/19
6
 * Time: 10:20 AM
7
 */
8
9
namespace Davispeixoto\Workflow\Tests;
10
11
use Davispeixoto\Workflow\Exceptions\InvalidTransitionException;
12
use Davispeixoto\Workflow\Tests\Auxiliary\SalesStates;
13
use Davispeixoto\Workflow\Tests\Auxiliary\SalesWorkflow;
14
use PHPUnit\Framework\TestCase;
15
16
class WorkflowTest extends TestCase
17
{
18
    /**
19
     * @param SalesWorkflow $workflow
20
     * @param SalesStates $expected
21
     * @dataProvider getCurrentStatusProvider
22
     */
23
    public function testGetCurrentStatus(SalesWorkflow $workflow, SalesStates $expected)
24
    {
25
        $this->assertEquals($expected, $workflow->getCurrentStatus());
26
    }
27
28
    /**
29
     * @param SalesWorkflow $workflow
30
     * @param bool $expected
31
     * @dataProvider isFinishedProvider
32
     */
33
    public function testIsFinished(SalesWorkflow $workflow, bool $expected)
34
    {
35
        $this->assertEquals($expected, $workflow->isFinished());
36
    }
37
38
    /**
39
     * @param SalesStates $initialState
40
     * @param SalesStates $newState
41
     * @throws InvalidTransitionException
42
     * @dataProvider setCurrentStatusProvider
43
     */
44
    public function testSetCurrentStatus(SalesStates $initialState, SalesStates $newState)
45
    {
46
        $workflow = new SalesWorkflow($initialState);
47
        $workflow->setCurrentStatus($newState);
48
        $this->assertEquals($newState, $workflow->getCurrentStatus());
49
    }
50
51
    /**
52
     * @param SalesStates $initialState
53
     * @param SalesStates $newState
54
     * @throws InvalidTransitionException
55
     * @dataProvider setCurrentStatusExceptionProvider
56
     */
57
    public function testSetCurrentStatusException(SalesStates $initialState, SalesStates $newState)
58
    {
59
        $this->expectException(InvalidTransitionException::class);
60
        $workflow = new SalesWorkflow($initialState);
61
        $workflow->setCurrentStatus($newState);
62
    }
63
64
    // data providers
65
66
    public function getCurrentStatusProvider()
67
    {
68
        $status1 = new SalesStates(SalesStates::NEW);
69
        $status2 = new SalesStates(SalesStates::DEALING);
70
        $status3 = new SalesStates(SalesStates::WON);
71
        $status4 = new SalesStates(SalesStates::LOST);
72
73
        return [
74
            [new SalesWorkflow($status1), $status1],
75
            [new SalesWorkflow($status2), $status2],
76
            [new SalesWorkflow($status3), $status3],
77
            [new SalesWorkflow($status4), $status4]
78
        ];
79
    }
80
81
    public function isFinishedProvider()
82
    {
83
        $status1 = new SalesStates(SalesStates::NEW);
84
        $status2 = new SalesStates(SalesStates::DEALING);
85
        $status3 = new SalesStates(SalesStates::WON);
86
        $status4 = new SalesStates(SalesStates::LOST);
87
88
        return [
89
            [new SalesWorkflow($status1), false],
90
            [new SalesWorkflow($status2), false],
91
            [new SalesWorkflow($status3), true],
92
            [new SalesWorkflow($status4), true]
93
        ];
94
    }
95
96
    public function setCurrentStatusProvider()
97
    {
98
        $status1 = new SalesStates(SalesStates::NEW);
99
        $status2 = new SalesStates(SalesStates::DEALING);
100
        $status3 = new SalesStates(SalesStates::WON);
101
        $status4 = new SalesStates(SalesStates::LOST);
102
103
        return [
104
            [$status1, $status2],
105
            [$status2, $status3],
106
            [$status2, $status4]
107
        ];
108
    }
109
110
    public function setCurrentStatusExceptionProvider()
111
    {
112
        $status1 = new SalesStates(SalesStates::NEW);
113
        $status2 = new SalesStates(SalesStates::DEALING);
114
        $status3 = new SalesStates(SalesStates::WON);
115
        $status4 = new SalesStates(SalesStates::LOST);
116
117
        return [
118
            [$status1, $status3],
119
            [$status1, $status4],
120
            [$status2, $status1],
121
            [$status3, $status1],
122
            [$status3, $status2],
123
            [$status3, $status4],
124
            [$status4, $status1],
125
            [$status4, $status2],
126
            [$status4, $status3]
127
        ];
128
    }
129
}
130