UpdateTagActionTest   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 36
dl 0
loc 72
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A notProvidingTagsReturnsBadRequest() 0 12 1
A tryingToRenameInvalidTagReturnsNotFound() 0 15 1
A provideInvalidBody() 0 5 1
A tagIsProperlyRenamedWhenRenamingToItself() 0 8 1
A errorIsThrownWhenTryingToRenameTagToAnotherTagName() 0 15 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioApiTest\Shlink\Rest\Action;
6
7
use GuzzleHttp\RequestOptions;
8
use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
9
10
class UpdateTagActionTest extends ApiTestCase
11
{
12
    /**
13
     * @test
14
     * @dataProvider provideInvalidBody
15
     */
16
    public function notProvidingTagsReturnsBadRequest(array $body): void
17
    {
18
        $expectedDetail = 'Provided data is not valid';
19
20
        $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => $body]);
21
        $payload = $this->getJsonResponsePayload($resp);
22
23
        self::assertEquals(self::STATUS_BAD_REQUEST, $resp->getStatusCode());
24
        self::assertEquals(self::STATUS_BAD_REQUEST, $payload['status']);
25
        self::assertEquals('INVALID_ARGUMENT', $payload['type']);
26
        self::assertEquals($expectedDetail, $payload['detail']);
27
        self::assertEquals('Invalid data', $payload['title']);
28
    }
29
30
    public function provideInvalidBody(): iterable
31
    {
32
        yield [[]];
33
        yield [['oldName' => 'foo']];
34
        yield [['newName' => 'foo']];
35
    }
36
37
    /** @test */
38
    public function tryingToRenameInvalidTagReturnsNotFound(): void
39
    {
40
        $expectedDetail = 'Tag with name "invalid_tag" could not be found';
41
42
        $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => [
43
            'oldName' => 'invalid_tag',
44
            'newName' => 'foo',
45
        ]]);
46
        $payload = $this->getJsonResponsePayload($resp);
47
48
        self::assertEquals(self::STATUS_NOT_FOUND, $resp->getStatusCode());
49
        self::assertEquals(self::STATUS_NOT_FOUND, $payload['status']);
50
        self::assertEquals('TAG_NOT_FOUND', $payload['type']);
51
        self::assertEquals($expectedDetail, $payload['detail']);
52
        self::assertEquals('Tag not found', $payload['title']);
53
    }
54
55
    /** @test */
56
    public function errorIsThrownWhenTryingToRenameTagToAnotherTagName(): void
57
    {
58
        $expectedDetail = 'You cannot rename tag foo to bar, because it already exists';
59
60
        $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => [
61
            'oldName' => 'foo',
62
            'newName' => 'bar',
63
        ]]);
64
        $payload = $this->getJsonResponsePayload($resp);
65
66
        self::assertEquals(self::STATUS_CONFLICT, $resp->getStatusCode());
67
        self::assertEquals(self::STATUS_CONFLICT, $payload['status']);
68
        self::assertEquals('TAG_CONFLICT', $payload['type']);
69
        self::assertEquals($expectedDetail, $payload['detail']);
70
        self::assertEquals('Tag conflict', $payload['title']);
71
    }
72
73
    /** @test */
74
    public function tagIsProperlyRenamedWhenRenamingToItself(): void
75
    {
76
        $resp = $this->callApiWithKey(self::METHOD_PUT, '/tags', [RequestOptions::JSON => [
77
            'oldName' => 'foo',
78
            'newName' => 'foo',
79
        ]]);
80
81
        self::assertEquals(self::STATUS_NO_CONTENT, $resp->getStatusCode());
82
    }
83
}
84