TagVisitsActionTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 15
dl 0
loc 34
rs 10
c 1
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A notFoundErrorIsReturnedForInvalidTags() 0 10 1
A expectedVisitsAreReturned() 0 8 1
A provideTags() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioApiTest\Shlink\Rest\Action;
6
7
use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
8
9
use function sprintf;
10
11
class TagVisitsActionTest extends ApiTestCase
12
{
13
    /**
14
     * @test
15
     * @dataProvider provideTags
16
     */
17
    public function expectedVisitsAreReturned(string $tag, int $expectedVisitsAmount): void
18
    {
19
        $resp = $this->callApiWithKey(self::METHOD_GET, sprintf('/tags/%s/visits', $tag));
20
        $payload = $this->getJsonResponsePayload($resp);
21
22
        self::assertArrayHasKey('visits', $payload);
23
        self::assertArrayHasKey('data', $payload['visits']);
24
        self::assertCount($expectedVisitsAmount, $payload['visits']['data']);
25
    }
26
27
    public function provideTags(): iterable
28
    {
29
        yield 'foo' => ['foo', 5];
30
        yield 'bar' => ['bar', 2];
31
        yield 'baz' => ['baz', 0];
32
    }
33
34
    /** @test */
35
    public function notFoundErrorIsReturnedForInvalidTags(): void
36
    {
37
        $resp = $this->callApiWithKey(self::METHOD_GET, '/tags/invalid_tag/visits');
38
        $payload = $this->getJsonResponsePayload($resp);
39
40
        self::assertEquals(self::STATUS_NOT_FOUND, $resp->getStatusCode());
41
        self::assertEquals(self::STATUS_NOT_FOUND, $payload['status']);
42
        self::assertEquals('TAG_NOT_FOUND', $payload['type']);
43
        self::assertEquals('Tag with name "invalid_tag" could not be found', $payload['detail']);
44
        self::assertEquals('Tag not found', $payload['title']);
45
    }
46
}
47