ScenarioTest   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 150
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 7
dl 0
loc 150
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 4 1
A testCanFormatFeatureDescription() 0 37 1
A testCanFormatScenarioWithoutTags() 0 22 1
A testCanFormatMultiLineDescription() 0 25 1
A testShouldReturnVoidIfThereIsNoStepOnScenario() 0 17 1
A testShouldCallExampleFormatterWhenExamplesIsProvided() 0 28 1
1
<?php
2
/*
3
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
4
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
6
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
7
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
8
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
9
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
10
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
11
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
12
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
13
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
14
 *
15
 * This software consists of voluntary contributions made by many individuals
16
 * and is licensed under the MIT license.
17
 */
18
19
namespace KawaiiGherkinTest\Formatter;
20
21
use Behat\Gherkin\Node\ExampleTableNode;
22
use Behat\Gherkin\Node\OutlineNode;
23
use Behat\Gherkin\Node\ScenarioNode;
24
use Behat\Gherkin\Node\StepNode;
25
use Behat\Gherkin\Node\TableNode;
26
use KawaiiGherkin\Formatter\Scenario;
27
use PHPUnit\Framework\TestCase;
28
29
/**
30
 * Tests for {@see \KawaiiGherkin\Formatter\Scenario}
31
 *
32
 * @author Jefersson Nathan <[email protected]>
33
 * @covers \KawaiiGherkin\Formatter\Scenario
34
 * @group Coverage
35
 * @license MIT
36
*/
37
final class ScenarioTest extends TestCase
38
{
39
    /**
40
     * @var Scenario
41
     */
42
    private $formatter;
43
44
    /**
45
     * {@inheritDoc}
46
     */
47
    public function setUp()
48
    {
49
        $this->formatter = new Scenario();
50
    }
51
52
    public function testCanFormatFeatureDescription()
53
    {
54
        $expected = <<<EOS
55
    @kawaii @kawaii-bug-12
56
    Scenario: Not all people who program php are becoming kawaii
57
        Given I am a Java programmer
58
          And I am not Kawaii
59
         When I start to contribute to a php project:
60
            | project                  |
61
            | malukenho/kawaii-gherkin |
62
         Then I start to love php
63
         When I go to a php events
64
         Then I start to become a Kawaii guy
65
66
EOS;
67
68
        $tableNode  = new TableNode([
69
            ['project'],
70
            ['malukenho/kawaii-gherkin'],
71
        ]);
72
        $scenario = new ScenarioNode(
73
            ' Not all people who program php are becoming kawaii ',
74
            [' kawaii ', ' kawaii-bug-12 '],
75
            [
76
                new StepNode('Given', '       I am a Java programmer ', [], 1, 'Given'),
77
                new StepNode('And', '  I am not Kawaii ', [], 2, 'And'),
78
                new StepNode('When', '  I start to contribute to a php project: ', [$tableNode], 3, 'And'),
79
                new StepNode('Then', '  I start to love php ', [], 4, 'And'),
80
                new StepNode('When', ' I go to a php events ', [], 5, 'And'),
81
                new StepNode('Then', 'I start to become a Kawaii guy ', [], 5, 'And'),
82
            ],
83
            'Scenario',
84
            1
85
        );
86
87
        self::assertSame($expected, $this->formatter->format([$scenario]));
88
    }
89
90
    public function testCanFormatScenarioWithoutTags()
91
    {
92
        $expected = <<<EOS
93
    Scenario: Not all people who program php are becoming kawaii
94
        Given I am a Java programmer
95
          And I am not Kawaii
96
97
EOS;
98
99
        $scenario = new ScenarioNode(
100
            ' Not all people who program php are becoming kawaii ',
101
            [],
102
            [
103
                new StepNode('Given', '       I am a Java programmer ', [], 1, 'Given'),
104
                new StepNode('And', '  I am not Kawaii ', [], 2, 'And'),
105
            ],
106
            'Scenario',
107
            1
108
        );
109
110
        self::assertSame($expected, $this->formatter->format([$scenario]));
111
    }
112
113
    public function testCanFormatMultiLineDescription()
114
    {
115
        $expected = <<<EOS
116
    Scenario: Not all people who program php
117
            are becoming kawaii
118
            person
119
            :'(
120
        Given I am a Java programmer
121
          And I am not Kawaii
122
123
EOS;
124
125
        $scenario = new ScenarioNode(
126
            " Not all people who program php \n        are becoming kawaii \n person \n :'(",
127
            [],
128
            [
129
                new StepNode('Given', '       I am a Java programmer ', [], 1, 'Given'),
130
                new StepNode('And', '  I am not Kawaii ', [], 2, 'And'),
131
            ],
132
            'Scenario',
133
            1
134
        );
135
136
        self::assertSame($expected, $this->formatter->format([$scenario]));
137
    }
138
139
    public function testShouldReturnVoidIfThereIsNoStepOnScenario()
140
    {
141
        $expected = <<<EOS
142
    Scenario: This scenario has no steps
143
144
EOS;
145
146
        $scenario = new ScenarioNode(
147
            "This scenario has no steps",
148
            [],
149
            [],
150
            'Scenario',
151
            1
152
        );
153
154
        self::assertSame($expected, $this->formatter->format([$scenario]));
155
    }
156
157
158
    public function testShouldCallExampleFormatterWhenExamplesIsProvided()
159
    {
160
        $expected = <<<EOS
161
    Scenario: Working a lot
162
         When I am working for <number> hours
163
         Then I have to be upset
164
165
        Examples:
166
          | number |
167
          | 10     |
168
          | 12     |
169
170
EOS;
171
172
        $scenario = new OutlineNode(
173
            "Working a lot",
174
            [],
175
            [
176
                new StepNode('When', 'I am working for <number> hours', [], 1, 'When'),
177
                new StepNode('Then', 'I have to be upset', [], 2, 'Then'),
178
            ],
179
            new ExampleTableNode([['number'], ['10'], ['12']], 'Examples'),
180
            'Scenario',
181
            1
182
        );
183
184
        self::assertSame($expected, $this->formatter->format([$scenario]));
185
    }
186
}
187