Passed
Pull Request — master (#71)
by Cees-Jan
02:05
created

IssueGrouperTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 167
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 119
dl 0
loc 167
rs 10
c 3
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testGroupIssues() 0 44 1
A testGroupIssuesWithLabelFilters() 0 31 1
A testGroupIssuesWithNonGroupedLabel() 0 45 1
A testGroupIssuesWithLabelFiltersWithNonGroupedLabel() 0 32 1
A setUp() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ChangelogGenerator\Tests;
6
7
use ChangelogGenerator\ChangelogConfig;
8
use ChangelogGenerator\Issue;
9
use ChangelogGenerator\IssueGrouper;
10
use PHPUnit\Framework\TestCase;
11
12
final class IssueGrouperTest extends TestCase
13
{
14
    private IssueGrouper $issueGrouper;
15
16
    public function testGroupIssues(): void
17
    {
18
        $changelogConfig = new ChangelogConfig();
19
20
        $issue1 = new Issue(1, '', '', '', '', ['Enhancement'], false);
21
        $issue2 = new Issue(2, '', '', '', '', ['Bug'], false);
22
        $issue3 = new Issue(3, '', '', '', '', ['Bug'], false);
23
        $issue4 = new Issue(4, '', '', '', '', ['Enhancement'], false);
24
25
        $pullRequest1 = new Issue(5, '', 'Fixes #1', '', '', ['Enhancement'], true);
26
        $pullRequest2 = new Issue(6, '', 'Fixes #2', '', '', ['Bug'], true);
27
        $pullRequest3 = new Issue(7, '', 'Fixes #3', '', '', ['Bug'], true);
28
        $pullRequest4 = new Issue(8, '', 'Fixes #4', '', '', ['Enhancement'], true);
29
30
        $issues = [
31
            $issue1,
32
            $issue2,
33
            $issue3,
34
            $issue4,
35
            $pullRequest1,
36
            $pullRequest2,
37
            $pullRequest3,
38
            $pullRequest4,
39
        ];
40
41
        $issueGroups = $this->issueGrouper->groupIssues($issues, $changelogConfig);
42
43
        self::assertCount(2, $issueGroups);
44
        self::assertTrue(isset($issueGroups['Enhancement']));
45
        self::assertTrue(isset($issueGroups['Bug']));
46
        self::assertContains($pullRequest1, $issueGroups['Enhancement']->getIssues());
47
        self::assertContains($pullRequest2, $issueGroups['Bug']->getIssues());
48
        self::assertContains($pullRequest3, $issueGroups['Bug']->getIssues());
49
        self::assertContains($pullRequest4, $issueGroups['Enhancement']->getIssues());
50
51
        self::assertSame($issue1, $pullRequest1->getLinkedIssue());
52
        self::assertSame($issue2, $pullRequest2->getLinkedIssue());
53
        self::assertSame($issue3, $pullRequest3->getLinkedIssue());
54
        self::assertSame($issue4, $pullRequest4->getLinkedIssue());
55
56
        self::assertSame($pullRequest1, $issue1->getLinkedPullRequest());
57
        self::assertSame($pullRequest2, $issue2->getLinkedPullRequest());
58
        self::assertSame($pullRequest3, $issue3->getLinkedPullRequest());
59
        self::assertSame($pullRequest4, $issue4->getLinkedPullRequest());
60
    }
61
62
    public function testGroupIssuesWithNonGroupedLabel(): void
63
    {
64
        $changelogConfig = (new ChangelogConfig())->setNonGroupedLabel('Everything Else');
65
66
        $issue1 = new Issue(1, '', '', '', '', ['Enhancement'], false);
67
        $issue2 = new Issue(2, '', '', '', '', ['Bug'], false);
68
        $issue3 = new Issue(3, '', '', '', '', [], false);
69
        $issue4 = new Issue(4, '', '', '', '', ['Enhancement'], false);
70
71
        $pullRequest1 = new Issue(5, '', 'Fixes #1', '', '', ['Enhancement'], true);
72
        $pullRequest2 = new Issue(6, '', 'Fixes #2', '', '', ['Bug'], true);
73
        $pullRequest3 = new Issue(7, '', 'Fixes #3', '', '', ['Bug'], true);
74
        $pullRequest4 = new Issue(8, '', 'Fixes #4', '', '', [], true);
75
76
        $issues = [
77
            $issue1,
78
            $issue2,
79
            $issue3,
80
            $issue4,
81
            $pullRequest1,
82
            $pullRequest2,
83
            $pullRequest3,
84
            $pullRequest4,
85
        ];
86
87
        $issueGroups = $this->issueGrouper->groupIssues($issues, $changelogConfig);
88
89
        self::assertCount(3, $issueGroups);
90
        self::assertTrue(isset($issueGroups['Enhancement']));
91
        self::assertTrue(isset($issueGroups['Bug']));
92
        self::assertTrue(isset($issueGroups['Everything Else']));
93
        self::assertContains($pullRequest1, $issueGroups['Enhancement']->getIssues());
94
        self::assertContains($pullRequest2, $issueGroups['Bug']->getIssues());
95
        self::assertContains($pullRequest3, $issueGroups['Bug']->getIssues());
96
        self::assertContains($pullRequest4, $issueGroups['Everything Else']->getIssues());
97
98
        self::assertSame($issue1, $pullRequest1->getLinkedIssue());
99
        self::assertSame($issue2, $pullRequest2->getLinkedIssue());
100
        self::assertSame($issue3, $pullRequest3->getLinkedIssue());
101
        self::assertSame($issue4, $pullRequest4->getLinkedIssue());
102
103
        self::assertSame($pullRequest1, $issue1->getLinkedPullRequest());
104
        self::assertSame($pullRequest2, $issue2->getLinkedPullRequest());
105
        self::assertSame($pullRequest3, $issue3->getLinkedPullRequest());
106
        self::assertSame($pullRequest4, $issue4->getLinkedPullRequest());
107
    }
108
109
    public function testGroupIssuesWithLabelFilters(): void
110
    {
111
        $changelogConfig = new ChangelogConfig();
112
        $changelogConfig->setLabels(['Enhancement', 'Bug']);
113
114
        $issue1 = new Issue(1, '', '', '', '', ['Enhancement', 'Other'], false);
115
        $issue2 = new Issue(2, '', '', '', '', ['Bug', 'Other'], false);
116
        $issue3 = new Issue(3, '', '', '', '', ['Bug', 'Other'], false);
117
        $issue4 = new Issue(4, '', '', '', '', ['Enhancement', 'Other'], false);
118
119
        $pullRequest1 = new Issue(5, '', 'Fixes #1', '', '', ['Enhancement', 'Other'], true);
120
        $pullRequest2 = new Issue(6, '', 'Fixes #2', '', '', ['Bug', 'Other'], true);
121
        $pullRequest3 = new Issue(7, '', 'Fixes #3', '', '', ['Bug', 'Other'], true);
122
        $pullRequest4 = new Issue(8, '', 'Fixes #4', '', '', ['Enhancement', 'Other'], true);
123
124
        $issues = [
125
            $issue1,
126
            $issue2,
127
            $issue3,
128
            $issue4,
129
            $pullRequest1,
130
            $pullRequest2,
131
            $pullRequest3,
132
            $pullRequest4,
133
        ];
134
135
        $issueGroups = $this->issueGrouper->groupIssues($issues, $changelogConfig);
136
137
        self::assertCount(2, $issueGroups);
138
        self::assertTrue(isset($issueGroups['Enhancement']));
139
        self::assertTrue(isset($issueGroups['Bug']));
140
    }
141
142
    public function testGroupIssuesWithLabelFiltersWithNonGroupedLabel(): void
143
    {
144
        $changelogConfig = (new ChangelogConfig())->setNonGroupedLabel('Everything Else');
145
        $changelogConfig->setLabels(['Enhancement', 'Bug']);
146
147
        $issue1 = new Issue(1, '', '', '', '', ['Enhancement', 'Other'], false);
148
        $issue2 = new Issue(2, '', '', '', '', ['Bug', 'Other'], false);
149
        $issue3 = new Issue(3, '', '', '', '', ['Other'], false);
150
        $issue4 = new Issue(4, '', '', '', '', ['Enhancement', 'Other'], false);
151
152
        $pullRequest1 = new Issue(5, '', 'Fixes #1', '', '', ['Enhancement', 'Other'], true);
153
        $pullRequest2 = new Issue(6, '', 'Fixes #2', '', '', ['Bug', 'Other'], true);
154
        $pullRequest3 = new Issue(7, '', 'Fixes #3', '', '', ['Bug', 'Other'], true);
155
        $pullRequest4 = new Issue(8, '', 'Fixes #4', '', '', ['Other'], true);
156
157
        $issues = [
158
            $issue1,
159
            $issue2,
160
            $issue3,
161
            $issue4,
162
            $pullRequest1,
163
            $pullRequest2,
164
            $pullRequest3,
165
            $pullRequest4,
166
        ];
167
168
        $issueGroups = $this->issueGrouper->groupIssues($issues, $changelogConfig);
169
170
        self::assertCount(3, $issueGroups);
171
        self::assertTrue(isset($issueGroups['Enhancement']));
172
        self::assertTrue(isset($issueGroups['Bug']));
173
        self::assertTrue(isset($issueGroups['Everything Else']));
174
    }
175
176
    protected function setUp(): void
177
    {
178
        $this->issueGrouper = new IssueGrouper();
179
    }
180
}
181