ShortUrlVisitsActionTest::setUp()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 2
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioTest\Shlink\Rest\Action\Visit;
6
7
use Cake\Chronos\Chronos;
8
use Laminas\Diactoros\ServerRequest;
9
use Laminas\Paginator\Adapter\ArrayAdapter;
10
use Laminas\Paginator\Paginator;
11
use PHPUnit\Framework\TestCase;
12
use Prophecy\Argument;
13
use Prophecy\PhpUnit\ProphecyTrait;
14
use Prophecy\Prophecy\ObjectProphecy;
15
use Shlinkio\Shlink\Common\Util\DateRange;
16
use Shlinkio\Shlink\Core\Model\ShortUrlIdentifier;
17
use Shlinkio\Shlink\Core\Model\VisitsParams;
18
use Shlinkio\Shlink\Core\Service\VisitsTracker;
19
use Shlinkio\Shlink\Rest\Action\Visit\ShortUrlVisitsAction;
20
21
class ShortUrlVisitsActionTest extends TestCase
22
{
23
    use ProphecyTrait;
24
25
    private ShortUrlVisitsAction $action;
26
    private ObjectProphecy $visitsTracker;
27
28
    public function setUp(): void
29
    {
30
        $this->visitsTracker = $this->prophesize(VisitsTracker::class);
31
        $this->action = new ShortUrlVisitsAction($this->visitsTracker->reveal());
32
    }
33
34
    /** @test */
35
    public function providingCorrectShortCodeReturnsVisits(): void
36
    {
37
        $shortCode = 'abc123';
38
        $this->visitsTracker->info(new ShortUrlIdentifier($shortCode), Argument::type(VisitsParams::class))->willReturn(
39
            new Paginator(new ArrayAdapter([])),
40
        )->shouldBeCalledOnce();
41
42
        $response = $this->action->handle((new ServerRequest())->withAttribute('shortCode', $shortCode));
43
        self::assertEquals(200, $response->getStatusCode());
44
    }
45
46
    /** @test */
47
    public function paramsAreReadFromQuery(): void
48
    {
49
        $shortCode = 'abc123';
50
        $this->visitsTracker->info(new ShortUrlIdentifier($shortCode), new VisitsParams(
51
            new DateRange(null, Chronos::parse('2016-01-01 00:00:00')),
52
            3,
53
            10,
54
        ))
55
            ->willReturn(new Paginator(new ArrayAdapter([])))
56
            ->shouldBeCalledOnce();
57
58
        $response = $this->action->handle(
59
            (new ServerRequest())->withAttribute('shortCode', $shortCode)
60
                                 ->withQueryParams([
61
                                     'endDate' => '2016-01-01 00:00:00',
62
                                     'page' => '3',
63
                                     'itemsPerPage' => '10',
64
                                 ]),
65
        );
66
        self::assertEquals(200, $response->getStatusCode());
67
    }
68
}
69