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

BaseLineResultsRemoveTest   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 103
Duplicated Lines 0 %

Importance

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

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setUp() 0 30 1
A testRemoveBaseLineResults() 0 26 1
A testRemoveBaseLineResultsIngnoringWarnings() 0 12 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Unit\Core\Analyser;
6
7
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Analyser\BaseLineResultsRemover;
8
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\BaseLiner\BaseLineAnalysisResults;
9
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\AbsoluteFileName;
10
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\Common\LineNumber;
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\HistoryAnalyser\UnifiedDiffParser\internal\FileMutationBuilder;
15
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\UnifiedDiffParser\internal\FileMutationsBuilder;
16
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\UnifiedDiffParser\LineMutation;
17
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\UnifiedDiffParser\NewFileName;
18
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\HistoryAnalyser\UnifiedDiffParser\OriginalFileName;
19
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResults;
20
use DaveLiddament\StaticAnalysisResultsBaseliner\Domain\ResultsParser\AnalysisResultsBuilder;
21
use DaveLiddament\StaticAnalysisResultsBaseliner\Plugins\GitDiffHistoryAnalyser\DiffHistoryAnalyser;
22
use DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Helpers\AnalysisResultsAdderTrait;
23
use DaveLiddament\StaticAnalysisResultsBaseliner\Tests\Helpers\BaseLineResultsBuilder;
24
use PHPUnit\Framework\TestCase;
25
26
class BaseLineResultsRemoveTest extends TestCase
27
{
28
    use AnalysisResultsAdderTrait;
29
30
    private const PROJECT_ROOT_PATH = '/home/sarb';
31
    private const FILE_1 = 'foo/file1.txt';
32
    private const FILE_1_FULL_PATH = self::PROJECT_ROOT_PATH.'/'.self::FILE_1;
33
    private const FILE_2 = 'foo/file2.txt';
34
    private const LINE_9 = 9;
35
    private const LINE_10 = 10;
36
    private const LINE_11 = 11;
37
    private const LINE_15 = 15;
38
    private const TYPE_1 = 'type1';
39
    private const TYPE_2 = 'type2';
40
    /**
41
     * @var DiffHistoryAnalyser
42
     */
43
    private $historyAnalyser;
44
    /**
45
     * @var BaseLineResultsRemover
46
     */
47
    private $baseLineResultsRemover;
48
    /**
49
     * @var AnalysisResults
50
     */
51
    private $latestAnalysisResults;
52
    /**
53
     * @var BaseLineAnalysisResults
54
     */
55
    private $baselineAnalysisResults;
56
57
    protected function setUp(): void
58
    {
59
        $projectRoot = ProjectRoot::fromCurrentWorkingDirectory(self::PROJECT_ROOT_PATH);
60
61
        // Create baseline
62
        $baselineAnalysisResultsBuilder = new BaseLineResultsBuilder();
63
        $baselineAnalysisResultsBuilder->add(self::FILE_1, self::LINE_10, self::TYPE_1, Severity::error());
64
        $baselineAnalysisResultsBuilder->add(self::FILE_2, self::LINE_15, self::TYPE_2, Severity::error());
65
66
        // Create file mutations
67
        $fileMutationsBuilder = new FileMutationsBuilder();
68
        $fileMutationBuilder = new FileMutationBuilder($fileMutationsBuilder);
69
        $fileMutationBuilder->setOriginalFileName(new OriginalFileName(self::FILE_1));
70
        $fileMutationBuilder->setNewFileName(new NewFileName(self::FILE_1));
71
        $fileMutationBuilder->addLineMutation(LineMutation::newLineNumber(new LineNumber(self::LINE_9)));
72
        $fileMutationBuilder->build();
73
        $fileMutations = $fileMutationsBuilder->build();
74
75
        // Create latest results
76
        $latestAnalysisResultsBuilder = new AnalysisResultsBuilder();
77
        // This is in the baseline (it was line 10 in baseline)
78
        $this->addAnalysisResult($latestAnalysisResultsBuilder, $projectRoot, self::FILE_1_FULL_PATH, self::LINE_11, self::TYPE_1, Severity::error());
79
        // Added since baseline
80
        $this->addAnalysisResult($latestAnalysisResultsBuilder, $projectRoot, self::FILE_1_FULL_PATH, self::LINE_9, self::TYPE_2, Severity::warning());
81
82
        // Prune baseline results from latest results
83
        $this->historyAnalyser = new DiffHistoryAnalyser($fileMutations);
84
        $this->baseLineResultsRemover = new BaseLineResultsRemover();
85
        $this->latestAnalysisResults = $latestAnalysisResultsBuilder->build();
86
        $this->baselineAnalysisResults = $baselineAnalysisResultsBuilder->build();
87
    }
88
89
    public function testRemoveBaseLineResults(): void
90
    {
91
        $prunedAnalysisResults = $this->baseLineResultsRemover->pruneBaseLine(
92
            $this->latestAnalysisResults,
93
            $this->historyAnalyser,
94
            $this->baselineAnalysisResults,
95
            false
96
        );
97
98
        $actualResults = $prunedAnalysisResults->getAnalysisResults();
99
100
        // Assert results as expected
101
        // Of the original results:
102
        // the one in FILE_1 line 10 is now at FILE_1 line 11 (so should not appear in the pruned results)
103
        // the one in FILE_2 line 15 is not in latest results
104
        // A new bug has been introduced at FILE_1 line 9 (this is the only one that should appera in the results)
105
        $this->assertCount(1, $actualResults);
106
107
        $actualAnalysisResult = $actualResults[0];
108
        $expectedFileName = new AbsoluteFileName(self::FILE_1_FULL_PATH);
109
        $expectedLineNumber = new LineNumber(self::LINE_9);
110
        $expectedType = new Type(self::TYPE_2);
111
112
        $this->assertTrue($expectedFileName->isEqual($actualAnalysisResult->getLocation()->getAbsoluteFileName()));
113
        $this->assertTrue($expectedLineNumber->isEqual($actualAnalysisResult->getLocation()->getLineNumber()));
114
        $this->assertTrue($expectedType->isEqual($actualAnalysisResult->getType()));
115
    }
116
117
    public function testRemoveBaseLineResultsIngnoringWarnings(): void
118
    {
119
        $prunedAnalysisResults = $this->baseLineResultsRemover->pruneBaseLine(
120
            $this->latestAnalysisResults,
121
            $this->historyAnalyser,
122
            $this->baselineAnalysisResults,
123
            true
124
        );
125
126
        $actualResults = $prunedAnalysisResults->getAnalysisResults();
127
128
        $this->assertCount(0, $actualResults);
129
    }
130
}
131