providerGetExtraStatistics()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
c 0
b 0
f 0
dl 0
loc 8
rs 10
cc 1
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ApplicationTest\Repository;
6
7
use Application\Enum\Site;
8
use Application\Model\Statistic;
9
use Application\Model\User;
10
use Application\Repository\StatisticRepository;
11
use InvalidArgumentException;
12
13
class StatisticRepositoryTest extends AbstractRepositoryTest
14
{
15
    private StatisticRepository $repository;
16
17
    protected function setUp(): void
18
    {
19
        parent::setUp();
20
        $this->repository = _em()->getRepository(Statistic::class);
21
    }
22
23
    /**
24
     * @dataProvider providerGetExtraStatistics
25
     */
26
    public function testGetExtraStatistics(Site $site, string $poeriod, ?int $userId): void
27
    {
28
        $user = $userId ? $this->getEntityManager()->getRepository(User::class)->getOneById($userId) : null;
29
        $actual = $this->repository->getExtraStatistics($site, $poeriod, $user);
30
31
        $keys = ['cardCreation', 'cardUpdate', 'userCreation', 'userUpdate'];
32
        self::assertSame($keys, array_keys($actual));
33
        foreach ($keys as $key) {
34
            $one = $actual[$key];
35
            self::assertSame(['tables', 'chart'], array_keys($one));
36
37
            foreach ($one['tables'] as $table) {
38
                self::assertSame(['name', 'rows'], array_keys($table));
39
40
                foreach ($table['rows'] as $row) {
41
                    self::assertSame(['name', 'value'], array_keys($row));
42
                }
43
            }
44
45
            self::assertSame(['name', 'categories', 'series'], array_keys($one['chart']));
46
47
            foreach ($one['chart']['series'] as $serie) {
48
                self::assertSame(['name', 'data'], array_keys($serie));
49
            }
50
        }
51
    }
52
53
    public function providerGetExtraStatistics(): iterable
54
    {
55
        yield [Site::Dilps, 'month', null];
56
        yield [Site::Dilps, 'all', null];
57
        yield [Site::Dilps, '2019', null];
58
        yield [Site::Tiresias, 'month', 1000];
59
        yield [Site::Tiresias, 'all', 1000];
60
        yield [Site::Tiresias, '2019', 1000];
61
    }
62
63
    /**
64
     * @dataProvider providerGetExtraStatisticsException
65
     */
66
    public function testGetExtraStatisticsException(Site $site, string $period, ?int $userId): void
67
    {
68
        $this->expectException(InvalidArgumentException::class);
69
70
        $user = $userId ? $this->getEntityManager()->getRepository(User::class)->getOneById($userId) : null;
71
        $this->repository->getExtraStatistics($site, $period, $user);
72
    }
73
74
    public function providerGetExtraStatisticsException(): iterable
75
    {
76
        yield [Site::Tiresias, '20asd\'1"9', 1000];
77
        yield [Site::Tiresias, 'bbb', 1000];
78
    }
79
}
80