Completed
Push — develop ( f71bd8...4fb2c6 )
by Alejandro
17s queued 14s
created

ResolveShortUrlActionTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

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

3 Methods

Rating   Name   Duplication   Size   Complexity  
A shortUrlIsProperlyResolvedEvenWhenNotEnabled() 0 13 1
A tryingToResolveInvalidUrlReturnsNotFoundError() 0 13 1
A provideDisabledMeta() 0 7 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioApiTest\Shlink\Rest\Action;
6
7
use Cake\Chronos\Chronos;
8
use GuzzleHttp\RequestOptions;
9
use Shlinkio\Shlink\TestUtils\ApiTest\ApiTestCase;
10
11
use function sprintf;
12
13
class ResolveShortUrlActionTest extends ApiTestCase
14
{
15
    /**
16
     * @test
17
     * @dataProvider provideDisabledMeta
18
     */
19
    public function shortUrlIsProperlyResolvedEvenWhenNotEnabled(array $disabledMeta): void
20
    {
21
        $shortCode = 'abc123';
22
        $url = sprintf('/short-urls/%s', $shortCode);
23
        $this->callShortUrl($shortCode);
24
25
        $editResp = $this->callApiWithKey(self::METHOD_PATCH, $url, [RequestOptions::JSON => $disabledMeta]);
26
        $visitResp = $this->callShortUrl($shortCode);
27
        $fetchResp = $this->callApiWithKey(self::METHOD_GET, $url);
28
29
        $this->assertEquals(self::STATUS_NO_CONTENT, $editResp->getStatusCode());
30
        $this->assertEquals(self::STATUS_NOT_FOUND, $visitResp->getStatusCode());
31
        $this->assertEquals(self::STATUS_OK, $fetchResp->getStatusCode());
32
    }
33
34
    public function provideDisabledMeta(): iterable
35
    {
36
        $now = Chronos::now();
37
38
        yield 'future validSince' => [['validSince' => $now->addMonth()->toAtomString()]];
39
        yield 'past validUntil' => [['validUntil' => $now->subMonth()->toAtomString()]];
40
        yield 'maxVisits reached' => [['maxVisits' => 1]];
41
    }
42
43
    /** @test */
44
    public function tryingToResolveInvalidUrlReturnsNotFoundError(): void
45
    {
46
        $expectedDetail = 'No URL found with short code "invalid"';
47
48
        $resp = $this->callApiWithKey(self::METHOD_GET, '/short-urls/invalid');
49
        $payload = $this->getJsonResponsePayload($resp);
50
51
        $this->assertEquals(self::STATUS_NOT_FOUND, $resp->getStatusCode());
52
        $this->assertEquals(self::STATUS_NOT_FOUND, $payload['status']);
53
        $this->assertEquals('INVALID_SHORTCODE', $payload['type']);
54
        $this->assertEquals($expectedDetail, $payload['detail']);
55
        $this->assertEquals('Short URL not found', $payload['title']);
56
        $this->assertEquals('invalid', $payload['shortCode']);
57
    }
58
}
59