Passed
Push — master ( 185b2c...24e5ac )
by Olha
08:12
created

requestCreateWarehouseUserAssignmentsWithActivatedMultiFactorAuthWithoutCode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 12
dl 0
loc 23
rs 9.8666
c 1
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
/**
4
 * This file is part of the Spryker Commerce OS.
5
 * For full license information, please view the LICENSE file that was distributed with this source code.
6
 */
7
8
declare(strict_types = 1);
9
10
namespace PyzTest\Glue\MultiFactorAuth\BackendApi;
11
12
use Codeception\Util\HttpCode;
13
use PyzTest\Glue\MultiFactorAuth\BackendApi\Fixtures\MultiFactorAuthBackendApiFixtures;
14
use PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester;
15
use Spryker\Glue\MultiFactorAuth\MultiFactorAuthConfig;
16
17
/**
18
 * Auto-generated group annotations
19
 *
20
 * @group PyzTest
21
 * @group Glue
22
 * @group MultiFactorAuth
23
 * @group BackendApi
24
 * @group MultiFactorAuthBackendApiCest
25
 * Add your own group annotations below this line
26
 */
27
class MultiFactorAuthBackendApiCest
28
{
29
    /**
30
     * @var string|null
31
     */
32
    protected ?string $mfaCode = null;
33
34
    /**
35
     * @var string
36
     */
37
    protected const INVALID_MFA_CODE = '000000';
38
39
    /**
40
     * @var string
41
     */
42
    protected const INVALID_MFA_TYPE = 'invalid-type';
43
44
    /**
45
     * @var \PyzTest\Glue\MultiFactorAuth\BackendApi\Fixtures\MultiFactorAuthBackendApiFixtures|null
46
     */
47
    protected ?MultiFactorAuthBackendApiFixtures $fixtures = null;
48
49
    /**
50
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
51
     *
52
     * @return void
53
     */
54
    public function loadFixtures(MultiFactorAuthBackendApiTester $I): void
55
    {
56
        /** @var \PyzTest\Glue\MultiFactorAuth\BackendApi\Fixtures\MultiFactorAuthBackendApiFixtures $fixtures */
57
        $fixtures = $I->loadFixtures(MultiFactorAuthBackendApiFixtures::class);
58
        $this->fixtures = $fixtures;
59
    }
60
61
    /**
62
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
63
     *
64
     * @return void
65
     */
66
    public function requestGetMultiFactorAuthTypes(MultiFactorAuthBackendApiTester $I): void
67
    {
68
        // Arrange
69
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
0 ignored issues
show
Bug introduced by
The method getUserTransfer() does not exist on null. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

69
        $I->authorizeUserToBackendApi($this->fixtures->/** @scrutinizer ignore-call */ getUserTransfer());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
70
71
        // Act
72
        $I->sendJsonApiGet($this->fixtures->generateUrl(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPES));
73
74
        // Assert
75
        $I->seeJsonApiResponseCodeIs(HttpCode::OK);
76
        $I->seeResponseIsJson();
77
        $I->seeJsonApiResponseDataContainsResourceCollectionOfType(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPES);
78
    }
79
80
    /**
81
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
82
     *
83
     * @return void
84
     */
85
    public function requestActivateMultiFactorAuthType(MultiFactorAuthBackendApiTester $I): void
86
    {
87
        // Arrange
88
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
89
90
        // Act
91
        $this->activateMultiFactorAuth($I);
92
93
        // Assert
94
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
95
96
        $this->deactivateMultiFactorAuth($I);
97
    }
98
99
    /**
100
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
101
     *
102
     * @return void
103
     */
104
    public function requestActivateMultiFactorAuthTypeWithInvalidType(MultiFactorAuthBackendApiTester $I): void
105
    {
106
        // Arrange
107
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
108
109
        // Act
110
        $requestPayload = [
111
            'data' => [
112
                'type' => MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_ACTIVATE,
113
                'attributes' => [
114
                    'type' => static::INVALID_MFA_TYPE,
115
                ],
116
            ],
117
        ];
118
        $I->sendJsonApiPost($this->fixtures->generateUrl(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_ACTIVATE), $requestPayload);
119
120
        // Assert
121
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
122
        $I->seeResponseIsJson();
123
124
        $this->deactivateMultiFactorAuth($I);
125
    }
126
127
    /**
128
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
129
     *
130
     * @return void
131
     */
132
    public function requestVerifyMultiFactorAuthType(MultiFactorAuthBackendApiTester $I): void
133
    {
134
        // Arrange
135
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
136
137
        // Act
138
        $this->activateMultiFactorAuth($I);
139
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
140
141
        $this->verifyMultiFactorAuth($I);
142
143
        // Assert
144
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
145
146
        $this->deactivateMultiFactorAuth($I);
147
    }
148
149
    /**
150
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
151
     *
152
     * @return void
153
     */
154
    public function requestVerifyMultiFactorAuthTypeWithoutActivation(MultiFactorAuthBackendApiTester $I): void
155
    {
156
        // Arrange
157
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
158
159
        // Act
160
        $this->verifyMultiFactorAuth($I);
161
162
        // Assert
163
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
164
        $I->seeResponseIsJson();
165
166
        $this->deactivateMultiFactorAuth($I);
167
    }
168
169
    /**
170
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
171
     *
172
     * @return void
173
     */
174
    public function requestVerifyMultiFactorAuthTypeWithInvalidCode(MultiFactorAuthBackendApiTester $I): void
175
    {
176
        // Arrange
177
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
178
179
        $this->activateMultiFactorAuth($I);
180
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
181
182
        // Act
183
        $I->haveHttpHeader(MultiFactorAuthConfig::HEADER_MULTI_FACTOR_AUTH_CODE, static::INVALID_MFA_CODE);
184
        $requestPayload = $this->fixtures->createRequestPayload(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_VERIFY);
185
        $I->sendJsonApiPost($this->fixtures->generateUrl(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_VERIFY), $requestPayload);
186
187
        // Assert
188
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
189
        $I->seeResponseIsJson();
190
191
        $this->deactivateMultiFactorAuth($I);
192
    }
193
194
    /**
195
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
196
     *
197
     * @return void
198
     */
199
    public function requestDeactivateMultiFactorAuthType(MultiFactorAuthBackendApiTester $I): void
200
    {
201
        // Arrange
202
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
203
204
        $this->activateMultiFactorAuth($I);
205
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
206
207
        $this->verifyMultiFactorAuth($I);
208
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
209
210
        $this->deactivateMultiFactorAuth($I);
211
212
        // Assert
213
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
214
    }
215
216
    /**
217
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
218
     *
219
     * @return void
220
     */
221
    public function requestDeactivateMultiFactorAuthTypeWithoutActivation(MultiFactorAuthBackendApiTester $I): void
222
    {
223
        // Arrange
224
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
225
226
        // Act
227
        $this->deactivateMultiFactorAuth($I);
228
229
        // Assert
230
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
231
        $I->seeResponseIsJson();
232
    }
233
234
    /**
235
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
236
     *
237
     * @return void
238
     */
239
    public function requestDeactivateMultiFactorAuthTypeWithInvalidCode(MultiFactorAuthBackendApiTester $I): void
240
    {
241
        // Arrange
242
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
243
244
        $this->activateMultiFactorAuth($I);
245
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
246
247
        $this->verifyMultiFactorAuth($I);
248
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
249
250
        // Act
251
        $I->haveHttpHeader(MultiFactorAuthConfig::HEADER_MULTI_FACTOR_AUTH_CODE, static::INVALID_MFA_CODE);
252
        $requestPayload = $this->fixtures->createRequestPayload(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_DEACTIVATE);
253
        $I->sendJsonApiPost($this->fixtures->generateUrl(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_DEACTIVATE), $requestPayload);
254
255
        // Assert
256
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
257
        $I->seeResponseIsJson();
258
259
        $this->deactivateMultiFactorAuth($I);
260
    }
261
262
    /**
263
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
264
     *
265
     * @return void
266
     */
267
    public function requestDeactivateMultiFactorAuthTypeWithoutVerification(MultiFactorAuthBackendApiTester $I): void
268
    {
269
        // Arrange
270
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
271
272
        $this->activateMultiFactorAuth($I);
273
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
274
275
        // Act
276
        $this->deactivateMultiFactorAuth($I);
277
278
        // Assert
279
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
280
        $I->seeResponseIsJson();
281
282
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
283
284
        $this->verifyMultiFactorAuth($I);
285
286
        $this->deactivateMultiFactorAuth($I);
287
    }
288
289
    /**
290
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
291
     *
292
     * @return void
293
     */
294
    public function requestCreateWarehouseUserAssignmentsWithActivatedMultiFactorAuth(MultiFactorAuthBackendApiTester $I): void
295
    {
296
        // Arrange
297
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
298
299
        $this->activateMultiFactorAuth($I);
300
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
301
302
        $this->verifyMultiFactorAuth($I);
303
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
304
305
        $I->haveHttpHeader(MultiFactorAuthConfig::HEADER_MULTI_FACTOR_AUTH_CODE, $this->mfaCode);
306
        $requestPayload = $this->fixtures->createWarehouseUserAssignmentsRequestPayload();
307
308
        // Act
309
        $I->sendJsonApiPost($this->fixtures->generateWarehouseUserAssignmentsUrl(), $requestPayload);
310
311
        // Assert
312
        $I->seeResponseCodeIs(HttpCode::BAD_REQUEST);
313
        $I->seeResponseIsJson();
314
315
        $this->deactivateMultiFactorAuth($I);
316
    }
317
318
    /**
319
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
320
     *
321
     * @return void
322
     */
323
    public function requestCreateWarehouseUserAssignmentsWithActivatedMultiFactorAuthButInvalidCode(MultiFactorAuthBackendApiTester $I): void
324
    {
325
        // Arrange
326
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
327
328
        $this->activateMultiFactorAuth($I);
329
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
330
331
        $this->verifyMultiFactorAuth($I);
332
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
333
334
        $I->haveHttpHeader(MultiFactorAuthConfig::HEADER_MULTI_FACTOR_AUTH_CODE, static::INVALID_MFA_CODE);
335
        $requestPayload = $this->fixtures->createWarehouseUserAssignmentsRequestPayload();
336
337
        // Act
338
        $I->sendJsonApiPost($this->fixtures->generateWarehouseUserAssignmentsUrl(), $requestPayload);
339
340
        // Assert
341
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
342
        $I->seeResponseIsJson();
343
344
        $this->deactivateMultiFactorAuth($I);
345
    }
346
347
    /**
348
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
349
     *
350
     * @return void
351
     */
352
    public function requestCreateWarehouseUserAssignmentsWithActivatedMultiFactorAuthWithoutCode(MultiFactorAuthBackendApiTester $I): void
353
    {
354
        // Arrange
355
        $I->authorizeUserToBackendApi($this->fixtures->getUserTransfer());
356
357
        $this->activateMultiFactorAuth($I);
358
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
359
360
        $this->verifyMultiFactorAuth($I);
361
        $I->seeResponseCodeIs(HttpCode::NO_CONTENT);
362
363
        $I->unsetHttpHeader(MultiFactorAuthConfig::HEADER_MULTI_FACTOR_AUTH_CODE);
364
        $requestPayload = $this->fixtures->createWarehouseUserAssignmentsRequestPayload();
365
366
        // Act
367
        $I->sendJsonApiPost($this->fixtures->generateWarehouseUserAssignmentsUrl(), $requestPayload);
368
369
        // Assert
370
        $I->seeResponseCodeIs(HttpCode::FORBIDDEN);
371
        $I->seeResponseIsJson();
372
        $I->seeResponseContains(MultiFactorAuthConfig::ERROR_MESSAGE_MULTI_FACTOR_AUTH_CODE_MISSING);
373
374
        $this->deactivateMultiFactorAuth($I);
375
    }
376
377
    /**
378
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
379
     *
380
     * @return void
381
     */
382
    protected function activateMultiFactorAuth(MultiFactorAuthBackendApiTester $I): void
383
    {
384
        $requestPayload = $this->fixtures->createRequestPayload(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_ACTIVATE);
385
        $I->sendJsonApiPost($this->fixtures->generateUrl(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_ACTIVATE), $requestPayload);
386
    }
387
388
    /**
389
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
390
     *
391
     * @return void
392
     */
393
    protected function verifyMultiFactorAuth(MultiFactorAuthBackendApiTester $I): void
394
    {
395
        $this->mfaCode = $I->getUserMultiFactorAuthCodeFromDatabase(
396
            $this->fixtures->getUserTransfer(),
397
            'email',
398
        );
399
400
        $I->comment(sprintf('Using MFA code from database: %s', $this->mfaCode));
401
402
        $requestPayload = $this->fixtures->createRequestPayload(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_VERIFY);
403
        if ($this->mfaCode !== null) {
404
            $I->haveHttpHeader(MultiFactorAuthConfig::HEADER_MULTI_FACTOR_AUTH_CODE, $this->mfaCode);
405
        }
406
        $I->sendJsonApiPost($this->fixtures->generateUrl(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_VERIFY), $requestPayload);
407
    }
408
409
    /**
410
     * @param \PyzTest\Glue\MultiFactorAuth\MultiFactorAuthBackendApiTester $I
411
     *
412
     * @return void
413
     */
414
    protected function deactivateMultiFactorAuth(MultiFactorAuthBackendApiTester $I): void
415
    {
416
        if ($this->mfaCode === null) {
417
            $this->mfaCode = $I->getUserMultiFactorAuthCodeFromDatabase(
418
                $this->fixtures->getUserTransfer(),
419
                'email',
420
            );
421
            $I->comment(sprintf('Using MFA code from database for deactivation: %s', $this->mfaCode));
422
        }
423
424
        if ($this->mfaCode !== null) {
425
            $I->haveHttpHeader(MultiFactorAuthConfig::HEADER_MULTI_FACTOR_AUTH_CODE, $this->mfaCode);
426
        }
427
        $requestPayload = $this->fixtures->createRequestPayload(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_DEACTIVATE);
428
        $I->sendJsonApiPost($this->fixtures->generateUrl(MultiFactorAuthConfig::RESOURCE_MULTI_FACTOR_AUTH_TYPE_DEACTIVATE), $requestPayload);
429
    }
430
}
431