Passed
Branch master (e8fd46)
by Alexey
03:15
created

SignatureParserTest   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 177
Duplicated Lines 49.72 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
dl 88
loc 177
rs 10
c 0
b 0
f 0
wmc 11
lcom 1
cbo 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace Venta\Console\Tests;
4
5
use Venta\Console\Command\SignatureParser;
6
use PHPUnit\Framework\TestCase;
7
8
class SignatureParserTest extends TestCase
9
{
10
    /**
11
     * Types array to compare with
12
     *
13
     * @var array
14
     */
15
    protected $_types = [
16
        'required' => 1,
17
        'optional' => 2,
18
        'required_array' => 5,
19
        'optional_array' => 6,
20
    ];
21
22
    /**
23
     * @test
24
     */
25
    public function canParseArrayArgument()
26
    {
27
        $parsed = (new SignatureParser())->parse('venta:test {argument[]}');
28
        $argument = $parsed['arguments'][0];
29
30
        $this->assertCount(1, $parsed['arguments']);
31
        $this->assertEquals('argument', $argument['name']);
32
        $this->assertEquals($this->_types['required_array'], $argument['type']);
33
        $this->assertNull($argument['default']);
34
        $this->assertNull($argument['description']);
35
    }
36
37
    /**
38
     * @test
39
     */
40
    public function canParseComplexName()
41
    {
42
        $signature = new SignatureParser();
43
        $parsed = $signature->parse('venta:test');
44
45
        $this->assertEquals('venta:test', $parsed['name']);
46
    }
47
48
    /**
49
     * @test
50
     */
51
    public function canParseOptionalArgument()
52
    {
53
        $parsed = (new SignatureParser())->parse('venta:test {argument=}');
54
        $argument = $parsed['arguments'][0];
55
56
        $this->assertCount(1, $parsed['arguments']);
57
        $this->assertEquals('argument', $argument['name']);
58
        $this->assertEquals($this->_types['optional'], $argument['type']);
59
        $this->assertNull($argument['default']);
60
        $this->assertNull($argument['description']);
61
    }
62
63
    /**
64
     * @test
65
     */
66
    public function canParseOptionalArgumentWithDefault()
67
    {
68
        $parsed = (new SignatureParser())->parse('venta:test {argument=default value}');
69
        $argument = $parsed['arguments'][0];
70
71
        $this->assertCount(1, $parsed['arguments']);
72
        $this->assertEquals('argument', $argument['name']);
73
        $this->assertEquals($this->_types['optional'], $argument['type']);
74
        $this->assertEquals('default value', $argument['default']);
75
        $this->assertNull($argument['description']);
76
    }
77
78
    /**
79
     * @test
80
     */
81
    public function canParseOptionalArrayArgument()
82
    {
83
        $parsed = (new SignatureParser())->parse('venta:test {argument[]=}');
84
        $argument = $parsed['arguments'][0];
85
86
        $this->assertCount(1, $parsed['arguments']);
87
        $this->assertEquals('argument', $argument['name']);
88
        $this->assertEquals($this->_types['optional_array'], $argument['type']);
89
        $this->assertNull($argument['default']);
90
        $this->assertNull($argument['description']);
91
    }
92
93
    /**
94
     * @test
95
     */
96
    public function canParseOptionalArrayArgumentWithDefault()
97
    {
98
        $parsed = (new SignatureParser())->parse('venta:test {argument[]=default value,second default}');
99
        $argument = $parsed['arguments'][0];
100
101
        $this->assertCount(1, $parsed['arguments']);
102
        $this->assertEquals('argument', $argument['name']);
103
        $this->assertEquals($this->_types['optional_array'], $argument['type']);
104
        $this->assertNull($argument['description']);
105
106
        $this->assertInternalType('array', $argument['default']);
107
        $this->assertCount(2, $argument['default']);
108
        $this->assertEquals('second default', $argument['default'][1]);
109
    }
110
111
    /**
112
     * @test
113
     */
114
    public function canParseOptionalArrayArgumentWithDefaultAndDescription()
115
    {
116
        $parsed =
117
            (new SignatureParser())->parse('venta:test {argument[]=default value,second default:Command description goes here}');
118
        $argument = $parsed['arguments'][0];
119
120
        $this->assertCount(1, $parsed['arguments']);
121
        $this->assertEquals('argument', $argument['name']);
122
        $this->assertEquals($this->_types['optional_array'], $argument['type']);
123
        $this->assertEquals('Command description goes here', $argument['description']);
124
125
        $this->assertInternalType('array', $argument['default']);
126
        $this->assertCount(2, $argument['default']);
127
        $this->assertEquals('second default', $argument['default'][1]);
128
    }
129
130
    /**
131
     * @test
132
     */
133
    public function canParseOptions()
134
    {
135
        $parsed =
136
            (new SignatureParser())->parse('venta:test {--option[]=default value,second default:Option description goes here}');
137
        $option = $parsed['options'][0];
138
139
        $this->assertCount(1, $parsed['options']);
140
        $this->assertEquals('option', $option['name']);
141
        $this->assertEquals($this->_types['optional_array'], $option['type']);
142
        $this->assertEquals('Option description goes here', $option['description']);
143
144
        $this->assertInternalType('array', $option['default']);
145
        $this->assertCount(2, $option['default']);
146
        $this->assertEquals('second default', $option['default'][1]);
147
    }
148
149
    /**
150
     * @test
151
     */
152
    public function canParseSimpleArgument()
153
    {
154
        $signature = new SignatureParser();
155
        $parsed = $signature->parse('venta:test {argument}');
156
        $argument = $parsed['arguments'][0];
157
158
        $this->assertArrayHasKey('arguments', $parsed);
159
        $this->assertCount(1, $parsed['arguments']);
160
        $this->assertInternalType('array', $parsed['arguments']);
161
162
        foreach (['name', 'type', 'default', 'description'] as $key) {
163
            $this->assertArrayHasKey($key, $argument);
164
        }
165
166
        $this->assertEquals('argument', $argument['name']);
167
        $this->assertEquals($this->_types['required'], $argument['type']);
168
        $this->assertNull($argument['default']);
169
        $this->assertNull($argument['description']);
170
    }
171
172
    /**
173
     * @test
174
     */
175
    public function canParseSimpleName()
176
    {
177
        $signature = new SignatureParser();
178
        $parsed = $signature->parse('venta');
179
180
        $this->assertInternalType('array', $parsed);
181
        $this->assertArrayHasKey('name', $parsed);
182
        $this->assertEquals('venta', $parsed['name']);
183
    }
184
}