Completed
Push — master ( 899eaf...7feae9 )
by Dave
29s queued 14s
created

test1BaseLineResultNoSeverity()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 13
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 20
rs 9.8333
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Unit\Core\BaseLiner;
6
7
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\BaseLiner\BaseLineAnalysisResults;
8
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\AbsoluteFileName;
9
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\LineNumber;
10
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Location;
11
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\ProjectRoot;
12
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Severity;
13
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\Type;
14
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResult;
15
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResultsBuilder;
16
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ParseAtLocationException;
17
use PHPUnit\Framework\TestCase;
18
19
class BaseLineAnalysisResultsTest extends TestCase
20
{
21
    private const PROJECT_ROOT = '/';
22
    private const ABSOLUTE_FILE_NAME_1 = '/fileName1';
23
    private const FILE_NAME_1 = 'fileName1';
24
    private const LINE_NUMBER_1 = 1;
25
    private const TYPE_1 = 'TYPE_1';
26
    private const MESSAGE_1 = 'MESSAGE_1';
27
28
    public function testNoBaseLineResults(): void
29
    {
30
        $baseLineResults = BaseLineAnalysisResults::fromArray([]);
31
        $this->assertEmpty($baseLineResults->asArray());
32
        $this->assertEmpty($baseLineResults->getBaseLineAnalysisResults());
33
        $this->assertSame(0, $baseLineResults->getCount());
34
    }
35
36
    public function test1BaseLineResult(): void
37
    {
38
        $baseLineResults = BaseLineAnalysisResults::fromArray([
39
            [
40
                'fileName' => self::FILE_NAME_1,
41
                'lineNumber' => self::LINE_NUMBER_1,
42
                'type' => self::TYPE_1,
43
                'message' => self::MESSAGE_1,
44
                'severity' => Severity::ERROR,
45
            ],
46
        ]);
47
48
        $this->assertSame(1, $baseLineResults->getCount());
49
        $this->assertCount(1, $baseLineResults->getBaseLineAnalysisResults());
50
        $this->assertCount(1, $baseLineResults->asArray());
51
52
        $baseLineResult = $baseLineResults->getBaseLineAnalysisResults()[0];
53
        $this->assertSame(self::FILE_NAME_1, $baseLineResult->getFileName()->getFileName());
54
        $this->assertSame(self::LINE_NUMBER_1, $baseLineResult->getLineNumber()->getLineNumber());
55
        $this->assertSame(self::TYPE_1, $baseLineResult->getType()->getType());
56
        $this->assertSame(self::MESSAGE_1, $baseLineResult->getMessage());
57
        $this->assertSame(Severity::ERROR, $baseLineResult->getSeverity()->getSeverity());
58
    }
59
60
    public function test1BaseLineResultNoSeverity(): void
61
    {
62
        $baseLineResults = BaseLineAnalysisResults::fromArray([
63
            [
64
                'fileName' => self::FILE_NAME_1,
65
                'lineNumber' => self::LINE_NUMBER_1,
66
                'type' => self::TYPE_1,
67
                'message' => self::MESSAGE_1,
68
            ],
69
        ]);
70
71
        $this->assertSame(1, $baseLineResults->getCount());
72
        $this->assertCount(1, $baseLineResults->getBaseLineAnalysisResults());
73
        $this->assertCount(1, $baseLineResults->asArray());
74
75
        $baseLineResult = $baseLineResults->getBaseLineAnalysisResults()[0];
76
        $this->assertSame(self::FILE_NAME_1, $baseLineResult->getFileName()->getFileName());
77
        $this->assertSame(self::LINE_NUMBER_1, $baseLineResult->getLineNumber()->getLineNumber());
78
        $this->assertSame(self::TYPE_1, $baseLineResult->getType()->getType());
79
        $this->assertSame(self::MESSAGE_1, $baseLineResult->getMessage());
80
    }
81
82
    /**
83
     * @psalm-return array<string,array{string,array<mixed>}>
84
     */
85
    public function invalidDataProvider(): array
86
    {
87
        return [
88
            'notArray' => [
89
                'Issue with result [1]. Value for [base level] is not of the expected type [array]',
90
                [
91
                    'a string',
92
                ],
93
            ],
94
            'invalidBaseLineResult' => [
95
                'Issue with result [1]. Missing key [lineNumber]',
96
                [
97
                    [
98
                        'fileName' => self::FILE_NAME_1,
99
                        'type' => self::TYPE_1,
100
                        'message' => self::MESSAGE_1,
101
                    ],
102
                ],
103
            ],
104
        ];
105
    }
106
107
    /**
108
     * @dataProvider invalidDataProvider
109
     * @psalm-param array<mixed> $array
110
     */
111
    public function testInvalidArrayData(string $exceptionMessage, array $array): void
112
    {
113
        $this->expectException(ParseAtLocationException::class);
114
        $this->expectExceptionMessage($exceptionMessage);
115
        BaseLineAnalysisResults::fromArray($array);
116
    }
117
118
    public function testCreateFromAnalysisResults(): void
119
    {
120
        $lineNumber = new LineNumber(self::LINE_NUMBER_1);
121
        $type = new Type(self::TYPE_1);
122
        $analysisResultsBuilder = new AnalysisResultsBuilder();
123
124
        $projectRoot = ProjectRoot::fromCurrentWorkingDirectory(self::PROJECT_ROOT);
125
        $location = Location::fromAbsoluteFileName(
126
            new AbsoluteFileName(self::ABSOLUTE_FILE_NAME_1),
127
            $projectRoot,
128
            $lineNumber
129
        );
130
131
        $analysisResultsBuilder->addAnalysisResult(new AnalysisResult(
132
            $location,
133
            $type,
134
            self::MESSAGE_1,
135
            [],
136
            Severity::error()
137
        ));
138
139
        $baseLineResults = BaseLineAnalysisResults::fromAnalysisResults($analysisResultsBuilder->build());
140
        $this->assertCount(1, $baseLineResults->getBaseLineAnalysisResults());
141
        $baseLineResult = $baseLineResults->getBaseLineAnalysisResults()[0];
142
143
        $this->assertSame(self::FILE_NAME_1, $baseLineResult->getFileName()->getFileName());
144
        $this->assertSame($lineNumber, $baseLineResult->getLineNumber());
145
        $this->assertSame($type, $baseLineResult->getType());
146
        $this->assertSame(self::MESSAGE_1, $baseLineResult->getMessage());
147
    }
148
}
149