Completed
Push — master ( 41ae82...437c90 )
by Dave
13s queued 11s
created

SarbJsonResultsParserTest::testInvalidFileFormat()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 5
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Unit\Plugins\ResultsParsers\SarbJsonResultsParser;
6
7
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\ProjectRoot;
8
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\File\InvalidContentTypeException;
9
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResults;
10
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Utils\ParseAtLocationException;
11
use DaveLiddament\StaticAnalysisResultsBaseliner\Plugins\ResultsParsers\SarbJsonResultsParser\SarbJsonResultsParser;
12
use DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Helpers\AssertFileContentsSameTrait;
13
use DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Helpers\AssertResultMatch;
14
use DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Helpers\ResourceLoaderTrait;
15
use PHPUnit\Framework\TestCase;
16
17
class SarbJsonResultsParserTest extends TestCase
18
{
19
    use AssertFileContentsSameTrait;
20
    use AssertResultMatch;
21
    use ResourceLoaderTrait;
22
23
    /**
24
     * @var AnalysisResults
25
     */
26
    private $analysisResults;
27
28
    /**
29
     * @var SarbJsonResultsParser
30
     */
31
    private $sarbJsonResultsParser;
32
    /**
33
     * @var ProjectRoot
34
     */
35
    private $projectRoot;
36
37
    protected function setUp(): void
38
    {
39
        $this->projectRoot = new ProjectRoot('/vagrant/static-analysis-baseliner', '/home');
40
41
        $this->sarbJsonResultsParser = new SarbJsonResultsParser();
42
    }
43
44
    public function testConversion(): void
45
    {
46
        $fileContents = $this->getResource('sarb/sarb.json');
47
        $this->analysisResults = $this->sarbJsonResultsParser->convertFromString($fileContents, $this->projectRoot);
48
        $this->assertCount(3, $this->analysisResults->getAnalysisResults());
49
50
        $result1 = $this->analysisResults->getAnalysisResults()[0];
51
        $result2 = $this->analysisResults->getAnalysisResults()[1];
52
        $result3 = $this->analysisResults->getAnalysisResults()[2];
53
54
        $this->assertMatch($result1,
55
            'src/Domain/ResultsParser/AnalysisResults.php',
56
            67,
57
            'MismatchingDocblockParamType'
58
        );
59
        $this->assertSame(
60
            "Parameter \$array has wrong type 'array<mixed, mixed>', should be 'int'",
61
            $result1->getMessage()
62
        );
63
64
        $this->assertMatch($result2,
65
            'src/Domain/Utils/JsonUtils.php',
66
            29,
67
            'MixedAssignment'
68
        );
69
70
        $this->assertMatch($result3,
71
            'src/Plugins/PsalmJsonResultsParser/PsalmJsonResultsParser.php',
72
            90,
73
            'MixedAssignment'
74
        );
75
    }
76
77
    public function testTypeGuesser(): void
78
    {
79
        $this->assertFalse($this->sarbJsonResultsParser->showTypeGuessingWarning());
80
    }
81
82
    /**
83
     * @psalm-return array<int,array{string}>
84
     */
85
    public function invalidFileProvider(): array
86
    {
87
        return [
88
            ['sarb/sarb-invalid-missing-description.json'],
89
            ['sarb/sarb-invalid-missing-file.json'],
90
            ['sarb/sarb-invalid-missing-line.json'],
91
        ];
92
    }
93
94
    /**
95
     * @dataProvider invalidFileProvider
96
     */
97
    public function testInvalidFileFormat(string $fileName): void
98
    {
99
        $fileContents = $this->getResource($fileName);
100
        $this->expectException(ParseAtLocationException::class);
101
        $this->sarbJsonResultsParser->convertFromString($fileContents, $this->projectRoot);
102
    }
103
104
    public function testInvalidJsonInput(): void
105
    {
106
        $fileContents = $this->getResource('invalid-json.json');
107
        $this->expectException(InvalidContentTypeException::class);
108
        $this->sarbJsonResultsParser->convertFromString($fileContents, $this->projectRoot);
109
    }
110
}
111