StageCest::indexDataProvider()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 45
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Importance

Changes 6
Bugs 1 Features 0
Metric Value
cc 1
eloc 31
c 6
b 1
f 0
nc 1
nop 0
dl 0
loc 45
rs 9.424
1
<?php
2
3
use app\fixtures\{OauthAccessTokensFixture, StageFixture};
4
use Codeception\{Example, Util\HttpCode};
5
use roaresearch\yii2\roa\test\AbstractResourceCest;
6
7
/**
8
 * Cest to stage resource.
9
 *
10
 * @author Carlos (neverabe) Llamosas <[email protected]>
11
 */
12
class StageCest extends AbstractResourceCest
13
{
14
    protected function authToken(ApiTester $I)
15
    {
16
        $I->amBearerAuthenticated(OauthAccessTokensFixture::SIMPLE_TOKEN);
17
    }
18
19
    /**
20
     * @depends WorkflowCest:fixtures
21
     */
22
    public function fixtures(ApiTester $I)
23
    {
24
        $I->haveFixtures([
25
            'stage' => [
26
                'class' => StageFixture::class,
27
                'depends' => []
28
            ],
29
        ]);
30
    }
31
32
    /**
33
     * @param  ApiTester $I
34
     * @param  Example $example
35
     * @dataprovider indexDataProvider
36
     * @depends fixtures
37
     * @before authToken
38
     */
39
    public function index(ApiTester $I, Example $example)
40
    {
41
        $I->wantTo('Retrieve list of Stage records.');
42
        $this->internalIndex($I, $example);
43
    }
44
45
    /**
46
     * @return array<string,array> for test `index()`.
47
     */
48
    protected function indexDataProvider()
49
    {
50
        return [
51
            'list' => [
52
                'urlParams' => [
53
                    'workflow_id' => 1,
54
                    'expand' => 'transitions'
55
                ],
56
                'httpCode' => HttpCode::OK,
57
                'headers' => [
58
                    'X-Pagination-Total-Count' => 3,
59
                ],
60
            ],
61
            'not found workflow' => [
62
                'urlParams' => [
63
                    'workflow_id' => 10
64
                ],
65
                'httpCode' => HttpCode::NOT_FOUND,
66
            ],
67
            'filter by name' => [
68
                'urlParams' => [
69
                    'workflow_id' => 1,
70
                    'name' => 'Stage 2 - Wf 1',
71
                ],
72
                'httpCode' => HttpCode::OK,
73
                'headers' => [
74
                    'X-Pagination-Total-Count' => 1,
75
                ],
76
            ],
77
            'filter by author' => [
78
                'urlParams' => [
79
                    'workflow_id' => 1,
80
                    'created_by' => 1,
81
                ],
82
                'httpCode' => HttpCode::OK,
83
                'headers' => [
84
                    'X-Pagination-Total-Count' => 3,
85
                ],
86
            ],
87
            'rule created_by' => [
88
                'urlParams' => [
89
                    'workflow_id' => 1,
90
                    'created_by' => 'st',
91
                ],
92
                'httpCode' => HttpCode::UNPROCESSABLE_ENTITY,
93
            ],
94
        ];
95
    }
96
97
    /**
98
     * @param  ApiTester $I
99
     * @param  Example $example
100
     * @dataprovider viewDataProvider
101
     * @depends fixtures
102
     * @before authToken
103
     */
104
    public function view(ApiTester $I, Example $example)
105
    {
106
        $I->wantTo('Retrieve Stage single record.');
107
        $this->internalView($I, $example);
108
    }
109
110
    /**
111
     * @return array<string,array<string,string>> data for test `view()`.
112
     */
113
    protected function viewDataProvider()
114
    {
115
        return [
116
            'single record' => [
117
                'urlParams' => [
118
                    'workflow_id' => 1,
119
                    'id' => 1,
120
                    'expand' => 'workflow,detailTransitions,totalTransitions'
121
                ],
122
                'httpCode' => HttpCode::OK,
123
                'response' => [
124
                    '_embedded' => [
125
                        'transitions' => [
126
                            ['id' => 2],
127
                        ],
128
                    ],
129
                ],
130
            ],
131
            'not found stage record' => [
132
                'url' => '/w1/workflow/1/stage/10',
133
                'httpCode' => HttpCode::NOT_FOUND,
134
            ],
135
            'not found workflow record' => [
136
                'url' => '/w1/workflow/10/stage/10',
137
                'httpCode' => HttpCode::NOT_FOUND,
138
            ],
139
        ];
140
    }
141
142
    /**
143
     * @param  ApiTester $I
144
     * @param  Example $example
145
     * @dataprovider createDataProvider
146
     * @depends fixtures
147
     * @before authToken
148
     */
149
    public function create(ApiTester $I, Example $example)
150
    {
151
        $I->wantTo('Create a Stage record.');
152
        $this->internalCreate($I, $example);
153
    }
154
155
    /**
156
     * @return array<string,array<string,string|array<string,string>>> data for test `create()`.
157
     */
158
    protected function createDataProvider()
159
    {
160
        return [
161
            'create stage 3' => [
162
                'urlParams' => [
163
                    'workflow_id' => 1
164
                ],
165
                'data' => ['name' => 'stage 3'],
166
                'httpCode' => HttpCode::CREATED,
167
            ],
168
            'unique' => [
169
                'urlParams' => [
170
                    'workflow_id' => 1
171
                ],
172
                'data' => ['name' => 'stage 3'],
173
                'httpCode' => HttpCode::UNPROCESSABLE_ENTITY,
174
                'validationErrors' => [
175
                    'name' => 'The combination "1"-"stage 3" of Workflow ID and Stage name has already been taken.'
176
                ],
177
            ],
178
            'to short' => [
179
                'urlParams' => [
180
                    'workflow_id' => 1
181
                ],
182
                'data' => ['name' => 'wo'],
183
                'httpCode' => HttpCode::UNPROCESSABLE_ENTITY,
184
                'validationErrors' => [
185
                    'name' => 'Stage name should contain at least 6 characters.'
186
                ],
187
            ],
188
            'not blank' => [
189
                'urlParams' => [
190
                    'workflow_id' => 1
191
                ],
192
                'httpCode' => HttpCode::UNPROCESSABLE_ENTITY,
193
                'validationErrors' => [
194
                    'name' => 'Stage name cannot be blank.'
195
                ],
196
            ],
197
        ];
198
    }
199
200
    /**
201
     * @param  ApiTester $I
202
     * @param  Example $example
203
     * @dataprovider updateDataProvider
204
     * @depends fixtures
205
     * @before authToken
206
     */
207
    public function update(ApiTester $I, Example $example)
208
    {
209
        $I->wantTo('Update a Stage record.');
210
        $this->internalUpdate($I, $example);
211
    }
212
213
    /**
214
     * @return array[] data for test `update()`.
215
     */
216
    protected function updateDataProvider()
217
    {
218
        return [
219
            'update stage 1' => [
220
                'url' => '/w1/workflow/1/stage/1',
221
                'data' => ['name' => 'stage 7'],
222
                'httpCode' => HttpCode::OK,
223
            ],
224
            'to short' => [
225
                'url' => '/w1/workflow/1/stage/1',
226
                'data' => ['name' => 'wo'],
227
                'httpCode' => HttpCode::UNPROCESSABLE_ENTITY,
228
                'validationErrors' => [
229
                    'name' => 'Stage name should contain at least 6 characters.'
230
                ],
231
            ],
232
        ];
233
    }
234
235
    /**
236
     * @param  ApiTester $I
237
     * @param  Example $example
238
     * @dataprovider deleteDataProvider
239
     * @depends fixtures
240
     * @before authToken
241
     */
242
    public function delete(ApiTester $I, Example $example)
243
    {
244
        $I->wantTo('Delete a Stage record.');
245
        $this->internalDelete($I, $example);
246
    }
247
248
    /**
249
     * @return array[] data for test `delete()`.
250
     */
251
    protected function deleteDataProvider()
252
    {
253
        return [
254
            'workflow not found' => [
255
                'url' => '/w1/workflow/10/stage/1',
256
                'httpCode' => HttpCode::NOT_FOUND,
257
            ],
258
            'delete stage 8' => [
259
                'url' => '/w1/workflow/1/stage/8',
260
                'httpCode' => HttpCode::NO_CONTENT,
261
            ],
262
            'not found' => [
263
                'url' => '/w1/workflow/1/stage/8',
264
                'httpCode' => HttpCode::NOT_FOUND,
265
                'validationErrors' => [
266
                    'name' => 'The record "8" does not exists.'
267
                ],
268
            ],
269
        ];
270
    }
271
    /**
272
     * @inheritdoc
273
     */
274
    protected function recordJsonType(): array
275
    {
276
        return [
277
            'id' => 'integer:>0',
278
            'name' => 'string',
279
        ];
280
    }
281
282
    /**
283
     * @inheritdoc
284
     */
285
    protected function getRoutePattern(): string
286
    {
287
        return 'w1/workflow/<workflow_id:\d+>/stage';
288
    }
289
}
290