github_changelog_generator 1.15.0 → 1.16.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +32 -54
- data/Rakefile +1 -1
- data/lib/github_changelog_generator/argv_parser.rb +225 -0
- data/lib/github_changelog_generator/generator/entry.rb +10 -10
- data/lib/github_changelog_generator/generator/generator.rb +41 -19
- data/lib/github_changelog_generator/generator/generator_fetcher.rb +5 -9
- data/lib/github_changelog_generator/generator/generator_processor.rb +23 -20
- data/lib/github_changelog_generator/generator/generator_tags.rb +15 -9
- data/lib/github_changelog_generator/generator/section.rb +27 -7
- data/lib/github_changelog_generator/helper.rb +1 -1
- data/lib/github_changelog_generator/octo_fetcher.rb +190 -126
- data/lib/github_changelog_generator/options.rb +4 -0
- data/lib/github_changelog_generator/parser.rb +70 -248
- data/lib/github_changelog_generator/parser_file.rb +29 -14
- data/lib/github_changelog_generator/reader.rb +2 -2
- data/lib/github_changelog_generator/ssl_certs/cacert.pem +851 -1680
- data/lib/github_changelog_generator/task.rb +3 -2
- data/lib/github_changelog_generator/version.rb +1 -1
- data/man/git-generate-changelog.1 +46 -34
- data/man/git-generate-changelog.1.html +39 -31
- data/man/git-generate-changelog.html +19 -19
- data/man/git-generate-changelog.md +39 -31
- data/spec/files/config_example +5 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/unit/generator/entry_spec.rb +37 -31
- data/spec/unit/generator/generator_processor_spec.rb +99 -44
- data/spec/unit/generator/generator_spec.rb +47 -0
- data/spec/unit/generator/generator_tags_spec.rb +46 -3
- data/spec/unit/generator/section_spec.rb +34 -0
- data/spec/unit/octo_fetcher_spec.rb +45 -2
- data/spec/unit/parser_spec.rb +50 -0
- metadata +45 -9
@@ -84,47 +84,47 @@
|
|
84
84
|
|
85
85
|
<h2 id="OPTIONS">OPTIONS</h2>
|
86
86
|
|
87
|
-
<p> -u, --user
|
87
|
+
<p> -u, --user USER</p>
|
88
88
|
|
89
89
|
<p> Username of the owner of target GitHub repo</p>
|
90
90
|
|
91
|
-
<p> -p, --project
|
91
|
+
<p> -p, --project PROJECT</p>
|
92
92
|
|
93
93
|
<p> Name of project on GitHub</p>
|
94
94
|
|
95
|
-
<p> -t, --token
|
95
|
+
<p> -t, --token TOKEN</p>
|
96
96
|
|
97
97
|
<p> To make more than 50 requests per hour your GitHub token is required. You can generate it at: https://github.com/settings/tokens/new</p>
|
98
98
|
|
99
|
-
<p> -f, --date-format
|
99
|
+
<p> -f, --date-format FORMAT</p>
|
100
100
|
|
101
101
|
<p> Date format. Default is %Y-%m-%d</p>
|
102
102
|
|
103
|
-
<p> -o, --output
|
103
|
+
<p> -o, --output NAME</p>
|
104
104
|
|
105
105
|
<p> Output file. Default is CHANGELOG.md</p>
|
106
106
|
|
107
|
-
<p> -b, --base
|
107
|
+
<p> -b, --base NAME</p>
|
108
108
|
|
109
109
|
<p> Optional base file to append generated changes to.</p>
|
110
110
|
|
111
|
-
<p> --bugs-label
|
111
|
+
<p> --bugs-label LABEL</p>
|
112
112
|
|
113
113
|
<p> Setup custom label for bug-fixes section. Default is "<strong>Fixed bugs:</strong></p>
|
114
114
|
|
115
|
-
<p> --enhancement-label
|
115
|
+
<p> --enhancement-label LABEL</p>
|
116
116
|
|
117
117
|
<p> Setup custom label for enhancements section. Default is "<strong>Implemented enhancements:</strong>"</p>
|
118
118
|
|
119
|
-
<p> --issues-label
|
119
|
+
<p> --issues-label LABEL</p>
|
120
120
|
|
121
121
|
<p> Setup custom label for closed-issues section. Default is "<strong>Closed issues:</strong>"</p>
|
122
122
|
|
123
|
-
<p> --header-label
|
123
|
+
<p> --header-label LABEL</p>
|
124
124
|
|
125
125
|
<p> Setup custom header label. Default is "# Changelog"</p>
|
126
126
|
|
127
|
-
<p> --pr-label
|
127
|
+
<p> --pr-label LABEL</p>
|
128
128
|
|
129
129
|
<p> Setup custom label for pull requests section. Default is "<strong>Merged pull requests:</strong>"</p>
|
130
130
|
|
@@ -160,7 +160,7 @@
|
|
160
160
|
|
161
161
|
<p> Add to log unreleased closed issues. Default is true</p>
|
162
162
|
|
163
|
-
<p> --unreleased-label
|
163
|
+
<p> --unreleased-label LABEL</p>
|
164
164
|
|
165
165
|
<p> Add to log unreleased closed issues. Default is true</p>
|
166
166
|
|
@@ -196,19 +196,19 @@
|
|
196
196
|
|
197
197
|
<p> Changelog will end before specified tag</p>
|
198
198
|
|
199
|
-
<p> --max-issues
|
199
|
+
<p> --max-issues NUMBER</p>
|
200
200
|
|
201
201
|
<p> Max number of issues to fetch from GitHub. Default is unlimited</p>
|
202
202
|
|
203
|
-
<p> --release-url
|
203
|
+
<p> --release-url URL</p>
|
204
204
|
|
205
205
|
<p> The URL to point to for release links, in printf format (with the tag as variable).</p>
|
206
206
|
|
207
|
-
<p> --github-site
|
207
|
+
<p> --github-site URL</p>
|
208
208
|
|
209
209
|
<p> The Enterprise Github site on which your project is hosted.</p>
|
210
210
|
|
211
|
-
<p> --github-api
|
211
|
+
<p> --github-api URL</p>
|
212
212
|
|
213
213
|
<p> The enterprise endpoint to use for your Github API.</p>
|
214
214
|
|
@@ -216,15 +216,15 @@
|
|
216
216
|
|
217
217
|
<p> Create simple list from issues and pull requests. Default is false.</p>
|
218
218
|
|
219
|
-
<p> --future-release
|
219
|
+
<p> --future-release RELEASE-VERSION</p>
|
220
220
|
|
221
221
|
<p> Put the unreleased changes in the specified release number.</p>
|
222
222
|
|
223
|
-
<p> --configure-sections
|
223
|
+
<p> --configure-sections HASH, STRING</p>
|
224
224
|
|
225
225
|
<p> Define your own set of sections which overrides all default sections") do |v|</p>
|
226
226
|
|
227
|
-
<p> --add-sections
|
227
|
+
<p> --add-sections HASH, STRING</p>
|
228
228
|
|
229
229
|
<p> Add new sections but keep the default sections"</p>
|
230
230
|
|
@@ -11,79 +11,79 @@ Automatically generate changelog from your tags, issues, labels and pull request
|
|
11
11
|
|
12
12
|
## OPTIONS
|
13
13
|
|
14
|
-
-u, --user
|
14
|
+
-u, --user USER
|
15
15
|
|
16
16
|
Username of the owner of target GitHub repo.
|
17
17
|
|
18
|
-
-p, --project
|
18
|
+
-p, --project PROJECT
|
19
19
|
|
20
20
|
Name of project on GitHub.
|
21
21
|
|
22
|
-
-t, --token
|
22
|
+
-t, --token TOKEN
|
23
23
|
|
24
24
|
To make more than 50 requests per hour your GitHub token is required. You can generate it at: https://github.com/settings/tokens/new
|
25
25
|
|
26
|
-
-f, --date-format
|
26
|
+
-f, --date-format FORMAT
|
27
27
|
|
28
28
|
Date format. Default is %Y-%m-%d.
|
29
29
|
|
30
|
-
-o, --output
|
30
|
+
-o, --output NAME
|
31
31
|
|
32
32
|
Output file. To print to STDOUT instead, use blank as path. Default is CHANGELOG.md.
|
33
33
|
|
34
|
-
-b, --base
|
34
|
+
-b, --base NAME
|
35
35
|
|
36
|
-
Optional base file to append generated changes to.
|
36
|
+
Optional base file to append generated changes to. Default is HISTORY.md.
|
37
37
|
|
38
|
-
--summary-label
|
38
|
+
--summary-label LABEL
|
39
39
|
|
40
40
|
Set up custom label for the release summary section. Default is "".
|
41
41
|
|
42
|
-
--breaking-label
|
42
|
+
--breaking-label LABEL
|
43
43
|
|
44
44
|
Set up custom label for breaking changes section. Default is "**Breaking changes:**".
|
45
45
|
|
46
|
-
--enhancement-label
|
46
|
+
--enhancement-label LABEL
|
47
47
|
|
48
48
|
Set up custom label for enhancements section. Default is "**Implemented enhancements:**".
|
49
49
|
|
50
|
-
--bugs-label
|
50
|
+
--bugs-label LABEL
|
51
51
|
|
52
52
|
Set up custom label for bug-fixes section. Default is "**Fixed bugs:**".
|
53
53
|
|
54
|
-
--deprecated-label
|
54
|
+
--deprecated-label LABEL
|
55
55
|
|
56
56
|
Set up custom label for deprecated section. Default is "**Deprecated:**".
|
57
57
|
|
58
|
-
--removed-label
|
58
|
+
--removed-label LABEL
|
59
59
|
|
60
60
|
Set up custom label for removed section. Default is "**Removed:**".
|
61
61
|
|
62
|
-
--security-label
|
62
|
+
--security-label LABEL
|
63
63
|
|
64
64
|
Set up custom label for security section. Default is "**Security:**".
|
65
65
|
|
66
|
-
--issues-label
|
66
|
+
--issues-label LABEL
|
67
67
|
|
68
68
|
Set up custom label for closed-issues section. Default is "**Closed issues:**".
|
69
69
|
|
70
|
-
--header-label
|
70
|
+
--header-label LABEL
|
71
71
|
|
72
72
|
Set up custom header label. Default is "# Changelog".
|
73
73
|
|
74
|
-
--configure-sections
|
74
|
+
--configure-sections HASH, STRING
|
75
75
|
|
76
76
|
Define your own set of sections which overrides all default sections.
|
77
77
|
|
78
|
-
--add-sections
|
78
|
+
--add-sections HASH, STRING
|
79
79
|
|
80
80
|
Add new sections but keep the default sections.
|
81
81
|
|
82
|
-
--front-matter
|
82
|
+
--front-matter JSON
|
83
83
|
|
84
84
|
Add YAML front matter. Formatted as JSON because it's easier to add on the command line.
|
85
85
|
|
86
|
-
--pr-label
|
86
|
+
--pr-label LABEL
|
87
87
|
|
88
88
|
Set up custom label for pull requests section. Default is "**Merged pull requests:**".
|
89
89
|
|
@@ -107,6 +107,10 @@ Automatically generate changelog from your tags, issues, labels and pull request
|
|
107
107
|
|
108
108
|
Use milestone to detect when issue was resolved. Default is true.
|
109
109
|
|
110
|
+
--[no-]issues-of-open-milestones
|
111
|
+
|
112
|
+
Include issues of open milestones. Default is true.
|
113
|
+
|
110
114
|
--[no-]author
|
111
115
|
|
112
116
|
Add author of pull request at the end. Default is true.
|
@@ -123,7 +127,7 @@ Automatically generate changelog from your tags, issues, labels and pull request
|
|
123
127
|
|
124
128
|
Add to log unreleased closed issues. Default is true.
|
125
129
|
|
126
|
-
--unreleased-label
|
130
|
+
--unreleased-label LABEL
|
127
131
|
|
128
132
|
Set up custom label for unreleased closed issues section. Default is "**Unreleased:**".
|
129
133
|
|
@@ -175,7 +179,7 @@ Automatically generate changelog from your tags, issues, labels and pull request
|
|
175
179
|
|
176
180
|
Changelog will exclude specified tags.
|
177
181
|
|
178
|
-
--exclude-tags-regex
|
182
|
+
--exclude-tags-regex REGEX
|
179
183
|
|
180
184
|
Apply a regular expression on tag names so that they can be excluded, for example: --exclude-tags-regex ".*\+\d{1,}".
|
181
185
|
|
@@ -187,19 +191,23 @@ Automatically generate changelog from your tags, issues, labels and pull request
|
|
187
191
|
|
188
192
|
Changelog will end before specified tag.
|
189
193
|
|
190
|
-
--
|
194
|
+
--since-commit x
|
195
|
+
|
196
|
+
Fetch only commits after this time. eg. "2017-01-01 10:00:00"
|
197
|
+
|
198
|
+
--max-issues NUMBER
|
191
199
|
|
192
200
|
Maximum number of issues to fetch from GitHub. Default is unlimited.
|
193
201
|
|
194
|
-
--release-url
|
202
|
+
--release-url URL
|
195
203
|
|
196
204
|
The URL to point to for release links, in printf format (with the tag as variable).
|
197
205
|
|
198
|
-
--github-site
|
206
|
+
--github-site URL
|
199
207
|
|
200
208
|
The Enterprise GitHub site where your project is hosted.
|
201
209
|
|
202
|
-
--github-api
|
210
|
+
--github-api URL
|
203
211
|
|
204
212
|
The enterprise endpoint to use for your GitHub API.
|
205
213
|
|
@@ -207,11 +215,11 @@ Automatically generate changelog from your tags, issues, labels and pull request
|
|
207
215
|
|
208
216
|
Create a simple list from issues and pull requests. Default is false.
|
209
217
|
|
210
|
-
--future-release
|
218
|
+
--future-release RELEASE-VERSION
|
211
219
|
|
212
220
|
Put the unreleased changes in the specified release number.
|
213
221
|
|
214
|
-
--release-branch
|
222
|
+
--release-branch RELEASE-BRANCH
|
215
223
|
|
216
224
|
Limit pull requests to the release branch, such as master or release.
|
217
225
|
|
@@ -219,15 +227,15 @@ Automatically generate changelog from your tags, issues, labels and pull request
|
|
219
227
|
|
220
228
|
Use HTTP Cache to cache GitHub API requests (useful for large repos). Default is true.
|
221
229
|
|
222
|
-
--[no-]cache-file
|
230
|
+
--[no-]cache-file CACHE-FILE
|
223
231
|
|
224
232
|
Filename to use for cache. Default is github-changelog-http-cache in a temporary directory.
|
225
233
|
|
226
|
-
--cache-log
|
234
|
+
--cache-log CACHE-LOG
|
227
235
|
|
228
236
|
Filename to use for cache log. Default is github-changelog-logger.log in a temporary directory.
|
229
237
|
|
230
|
-
--ssl-ca-file
|
238
|
+
--ssl-ca-file PATH
|
231
239
|
|
232
240
|
Path to cacert.pem file. Default is a bundled lib/github_changelog_generator/ssl_certs/cacert.pem. Respects SSL_CA_PATH.
|
233
241
|
|
data/spec/spec_helper.rb
CHANGED
@@ -44,7 +44,7 @@ VCR.configure do |c|
|
|
44
44
|
decode_compressed_response: true
|
45
45
|
}
|
46
46
|
c.filter_sensitive_data("<GITHUB_TOKEN>") do
|
47
|
-
"token #{ENV.fetch('CHANGELOG_GITHUB_TOKEN'
|
47
|
+
"token #{ENV.fetch('CHANGELOG_GITHUB_TOKEN', 'frobnitz')}"
|
48
48
|
end
|
49
49
|
|
50
50
|
c.configure_rspec_metadata!
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable Metrics/ModuleLength
|
4
3
|
module GitHubChangelogGenerator
|
5
4
|
RSpec.describe Entry do
|
6
5
|
def label(name)
|
@@ -58,9 +57,6 @@ module GitHubChangelogGenerator
|
|
58
57
|
let(:issues) { [] }
|
59
58
|
let(:pull_requests) { [] }
|
60
59
|
let(:tags) { [] }
|
61
|
-
let(:compare_shas) do
|
62
|
-
{ "aaaaa1...master" => ["aaaaa1"] }
|
63
|
-
end
|
64
60
|
|
65
61
|
# Default to standard options minus verbose to avoid output during testing.
|
66
62
|
let(:options) do
|
@@ -76,15 +72,14 @@ module GitHubChangelogGenerator
|
|
76
72
|
fetch_closed_issues_and_pr: [issues, pull_requests],
|
77
73
|
fetch_closed_pull_requests: [],
|
78
74
|
fetch_events_async: issues + pull_requests,
|
79
|
-
|
75
|
+
fetch_tag_shas: nil,
|
80
76
|
fetch_comments_async: nil,
|
81
77
|
default_branch: "master",
|
82
78
|
oldest_commit: { "sha" => "aaaaa1" },
|
83
79
|
fetch_commit: { "commit" => { "author" => { "date" => Time.now.utc } } }
|
84
80
|
)
|
85
|
-
allow(fake_fetcher).to receive(:
|
86
|
-
|
87
|
-
{ "commits" => compare_shas["#{old}...#{new}"].collect { |sha| { "sha" => sha } } }
|
81
|
+
allow(fake_fetcher).to receive(:commits_in_branch) do
|
82
|
+
["aaaaa1"]
|
88
83
|
end
|
89
84
|
allow(GitHubChangelogGenerator::OctoFetcher).to receive(:new).and_return(fake_fetcher)
|
90
85
|
generator = GitHubChangelogGenerator::Generator.new(options)
|
@@ -426,6 +421,18 @@ module GitHubChangelogGenerator
|
|
426
421
|
sections_json.shift
|
427
422
|
end
|
428
423
|
end
|
424
|
+
context "parse also body_only" do
|
425
|
+
let(:sections_string) { "{ \"foo\": { \"prefix\": \"foofix\", \"labels\": [\"test1\", \"test2\"]}, \"bar\": { \"prefix\": \"barfix\", \"labels\": [\"test3\", \"test4\"], \"body_only\": true}}" }
|
426
|
+
|
427
|
+
it "returns correctly constructed sections" do
|
428
|
+
require "json"
|
429
|
+
|
430
|
+
parsed_sections = subject.send(:parse_sections, sections_string)
|
431
|
+
|
432
|
+
expect(parsed_sections[0].body_only).to eq false
|
433
|
+
expect(parsed_sections[1].body_only).to eq true
|
434
|
+
end
|
435
|
+
end
|
429
436
|
end
|
430
437
|
context "hash" do
|
431
438
|
let(:sections_hash) do
|
@@ -548,14 +555,14 @@ module GitHubChangelogGenerator
|
|
548
555
|
end
|
549
556
|
|
550
557
|
it "assigns issues to the correct sections" do
|
551
|
-
breaking_section = entry_sections.
|
552
|
-
enhancement_section = entry_sections.
|
553
|
-
bug_section = entry_sections.
|
554
|
-
deprecated_section = entry_sections.
|
555
|
-
removed_section = entry_sections.
|
556
|
-
security_section = entry_sections.
|
557
|
-
issue_section = entry_sections.
|
558
|
-
merged_section = entry_sections.
|
558
|
+
breaking_section = entry_sections.find { |section| section.name == "breaking" }
|
559
|
+
enhancement_section = entry_sections.find { |section| section.name == "enhancements" }
|
560
|
+
bug_section = entry_sections.find { |section| section.name == "bugs" }
|
561
|
+
deprecated_section = entry_sections.find { |section| section.name == "deprecated" }
|
562
|
+
removed_section = entry_sections.find { |section| section.name == "removed" }
|
563
|
+
security_section = entry_sections.find { |section| section.name == "security" }
|
564
|
+
issue_section = entry_sections.find { |section| section.name == "issues" }
|
565
|
+
merged_section = entry_sections.find { |section| section.name == "merged" }
|
559
566
|
|
560
567
|
expect(titles_for(breaking_section.issues)).to eq(["issue breaking", "issue all the labels", "pr breaking", "pr all the labels"])
|
561
568
|
expect(titles_for(enhancement_section.issues)).to eq(["issue enhancement", "pr enhancement"])
|
@@ -612,10 +619,10 @@ module GitHubChangelogGenerator
|
|
612
619
|
end
|
613
620
|
|
614
621
|
it "assigns issues to the correct sections" do
|
615
|
-
foo_section = entry_sections.
|
616
|
-
bar_section = entry_sections.
|
617
|
-
issue_section = entry_sections.
|
618
|
-
merged_section = entry_sections.
|
622
|
+
foo_section = entry_sections.find { |section| section.name == "foo" }
|
623
|
+
bar_section = entry_sections.find { |section| section.name == "bar" }
|
624
|
+
issue_section = entry_sections.find { |section| section.name == "issues" }
|
625
|
+
merged_section = entry_sections.find { |section| section.name == "merged" }
|
619
626
|
|
620
627
|
aggregate_failures "checks all sections" do
|
621
628
|
expect(titles_for(foo_section.issues)).to eq(["issue test1", "issue all the labels", "issue some included labels", "pr test1", "pr all the labels", "pr some included labels"])
|
@@ -670,10 +677,10 @@ module GitHubChangelogGenerator
|
|
670
677
|
end
|
671
678
|
|
672
679
|
it "assigns issues to the correct sections" do
|
673
|
-
foo_section = entry_sections.
|
674
|
-
bar_section = entry_sections.
|
675
|
-
issue_section = entry_sections.
|
676
|
-
merged_section = entry_sections.
|
680
|
+
foo_section = entry_sections.find { |section| section.name == "foo" }
|
681
|
+
bar_section = entry_sections.find { |section| section.name == "bar" }
|
682
|
+
issue_section = entry_sections.find { |section| section.name == "issues" }
|
683
|
+
merged_section = entry_sections.find { |section| section.name == "merged" }
|
677
684
|
|
678
685
|
aggregate_failures "checks all sections" do
|
679
686
|
expect(titles_for(foo_section.issues)).to eq(["issue test1", "issue all the labels", "pr test1", "pr all the labels"])
|
@@ -737,12 +744,12 @@ module GitHubChangelogGenerator
|
|
737
744
|
end
|
738
745
|
|
739
746
|
it "assigns issues to the correct sections" do
|
740
|
-
foo_section = entry_sections.
|
741
|
-
breaking_section = entry_sections.
|
742
|
-
enhancement_section = entry_sections.
|
743
|
-
bug_section = entry_sections.
|
744
|
-
issue_section = entry_sections.
|
745
|
-
merged_section = entry_sections.
|
747
|
+
foo_section = entry_sections.find { |section| section.name == "foo" }
|
748
|
+
breaking_section = entry_sections.find { |section| section.name == "breaking" }
|
749
|
+
enhancement_section = entry_sections.find { |section| section.name == "enhancements" }
|
750
|
+
bug_section = entry_sections.find { |section| section.name == "bugs" }
|
751
|
+
issue_section = entry_sections.find { |section| section.name == "issues" }
|
752
|
+
merged_section = entry_sections.find { |section| section.name == "merged" }
|
746
753
|
|
747
754
|
aggregate_failures "checks all sections" do
|
748
755
|
expect(titles_for(breaking_section.issues)).to eq(["issue all the labels", "pr all the labels"])
|
@@ -757,4 +764,3 @@ module GitHubChangelogGenerator
|
|
757
764
|
end
|
758
765
|
end
|
759
766
|
end
|
760
|
-
# rubocop:enable Metrics/ModuleLength
|
@@ -5,82 +5,137 @@ module GitHubChangelogGenerator
|
|
5
5
|
let(:default_options) { GitHubChangelogGenerator::Parser.default_options.merge(verbose: false) }
|
6
6
|
let(:options) { {} }
|
7
7
|
let(:generator) { described_class.new(default_options.merge(options)) }
|
8
|
-
|
9
8
|
let(:bad_label) { { "name" => "BAD" } }
|
10
|
-
let(:bad_issue) { { "labels" => [bad_label] } }
|
11
9
|
let(:good_label) { { "name" => "GOOD" } }
|
12
|
-
let(:good_issue) { { "labels" => [good_label] } }
|
13
|
-
let(:unlabeled_issue) { { "labels" => [] } }
|
14
|
-
let(:issues) { [bad_issue, good_issue, unlabeled_issue] }
|
15
10
|
|
16
|
-
describe "
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
describe "pull requests" do
|
12
|
+
let(:bad_pull_request) { { "pull_request" => {}, "labels" => [bad_label] } }
|
13
|
+
let(:good_pull_request) { { "pull_request" => {}, "labels" => [good_label] } }
|
14
|
+
let(:unlabeled_pull_request) { { "pull_request" => {}, "labels" => [] } }
|
15
|
+
let(:pull_requests) { [bad_pull_request, good_pull_request, unlabeled_pull_request] }
|
20
16
|
|
21
|
-
|
17
|
+
describe "#filter_wo_labels" do
|
18
|
+
subject do
|
19
|
+
generator.filter_wo_labels(pull_requests)
|
20
|
+
end
|
22
21
|
|
23
|
-
|
22
|
+
let(:expected_pull_requests) { pull_requests }
|
24
23
|
|
25
|
-
|
26
|
-
let(:options) { { exclude_labels: %w[BAD BOO] } }
|
27
|
-
let(:expected_issues) { [good_issue, unlabeled_issue] }
|
24
|
+
it { is_expected.to eq(expected_pull_requests) }
|
28
25
|
|
29
|
-
|
30
|
-
|
26
|
+
context "when 'add_pr_wo_labels' is false" do
|
27
|
+
let(:options) { { add_pr_wo_labels: false } }
|
28
|
+
let(:expected_pull_requests) { [bad_pull_request, good_pull_request] }
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
it { is_expected.to eq(expected_pull_requests) }
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when 'add_pr_wo_labels' is true" do
|
34
|
+
let(:options) { { add_pr_wo_labels: true } }
|
36
35
|
|
37
|
-
|
36
|
+
it { is_expected.to eq(expected_pull_requests) }
|
38
37
|
end
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
42
|
-
describe "
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
describe "issues" do
|
42
|
+
let(:bad_issue) { { "labels" => [bad_label] } }
|
43
|
+
let(:good_issue) { { "labels" => [good_label] } }
|
44
|
+
let(:unlabeled_issue) { { "labels" => [] } }
|
45
|
+
let(:issues) { [bad_issue, good_issue, unlabeled_issue] }
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
describe "#filter_wo_labels" do
|
48
|
+
subject do
|
49
|
+
generator.filter_wo_labels(issues)
|
50
|
+
end
|
50
51
|
|
51
|
-
|
52
|
-
let(:options) { { exclude_labels: %w[BAD BOO] } }
|
53
|
-
let(:expected_issues) { [good_issue, unlabeled_issue] }
|
52
|
+
let(:expected_issues) { issues }
|
54
53
|
|
55
54
|
it { is_expected.to eq(expected_issues) }
|
55
|
+
|
56
|
+
context "when 'add_issues_wo_labels' is false" do
|
57
|
+
let(:options) { { add_issues_wo_labels: false } }
|
58
|
+
let(:expected_issues) { [bad_issue, good_issue] }
|
59
|
+
|
60
|
+
it { is_expected.to eq(expected_issues) }
|
61
|
+
end
|
62
|
+
|
63
|
+
context "when 'add_issues_wo_labels' is true" do
|
64
|
+
let(:options) { { add_issues_wo_labels: true } }
|
65
|
+
|
66
|
+
it { is_expected.to eq(expected_issues) }
|
67
|
+
end
|
56
68
|
end
|
57
69
|
|
58
|
-
|
59
|
-
|
60
|
-
|
70
|
+
describe "#exclude_issues_by_labels" do
|
71
|
+
subject do
|
72
|
+
generator.exclude_issues_by_labels(issues)
|
73
|
+
end
|
74
|
+
|
75
|
+
let(:expected_issues) { issues }
|
61
76
|
|
62
77
|
it { is_expected.to eq(expected_issues) }
|
63
78
|
|
64
|
-
context "
|
65
|
-
let(:options) { {
|
66
|
-
let(:expected_issues) { [
|
79
|
+
context "when 'exclude_labels' is provided" do
|
80
|
+
let(:options) { { exclude_labels: %w[BAD BOO] } }
|
81
|
+
let(:expected_issues) { [good_issue, unlabeled_issue] }
|
67
82
|
|
68
83
|
it { is_expected.to eq(expected_issues) }
|
69
84
|
end
|
70
85
|
|
71
|
-
context "with
|
72
|
-
|
73
|
-
|
86
|
+
context "with no option given" do
|
87
|
+
subject(:generator) { described_class.new }
|
88
|
+
it "passes everything through when no option given" do
|
89
|
+
result = generator.exclude_issues_by_labels(issues)
|
74
90
|
|
75
|
-
|
91
|
+
expect(result).to eq(issues)
|
92
|
+
end
|
76
93
|
end
|
77
94
|
end
|
78
95
|
|
79
|
-
|
80
|
-
|
81
|
-
|
96
|
+
describe "#get_filtered_issues" do
|
97
|
+
subject do
|
98
|
+
generator.get_filtered_issues(issues)
|
99
|
+
end
|
100
|
+
|
101
|
+
let(:expected_issues) { issues }
|
82
102
|
|
83
103
|
it { is_expected.to eq(expected_issues) }
|
104
|
+
|
105
|
+
context "when 'exclude_labels' is provided" do
|
106
|
+
let(:options) { { exclude_labels: %w[BAD BOO] } }
|
107
|
+
let(:expected_issues) { [good_issue, unlabeled_issue] }
|
108
|
+
|
109
|
+
it { is_expected.to eq(expected_issues) }
|
110
|
+
end
|
111
|
+
|
112
|
+
context "when 'add_issues_wo_labels' is false" do
|
113
|
+
let(:options) { { add_issues_wo_labels: false } }
|
114
|
+
let(:expected_issues) { [bad_issue, good_issue] }
|
115
|
+
|
116
|
+
it { is_expected.to eq(expected_issues) }
|
117
|
+
|
118
|
+
context "with 'exclude_labels'" do
|
119
|
+
let(:options) { { add_issues_wo_labels: false, exclude_labels: %w[GOOD] } }
|
120
|
+
let(:expected_issues) { [bad_issue] }
|
121
|
+
|
122
|
+
it { is_expected.to eq(expected_issues) }
|
123
|
+
end
|
124
|
+
|
125
|
+
context "with 'include_labels'" do
|
126
|
+
let(:options) { { add_issues_wo_labels: false, include_labels: %w[GOOD] } }
|
127
|
+
let(:expected_issues) { [good_issue] }
|
128
|
+
|
129
|
+
it { is_expected.to eq(expected_issues) }
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
context "when 'include_labels' is specified" do
|
134
|
+
let(:options) { { include_labels: %w[GOOD] } }
|
135
|
+
let(:expected_issues) { [good_issue, unlabeled_issue] }
|
136
|
+
|
137
|
+
it { is_expected.to eq(expected_issues) }
|
138
|
+
end
|
84
139
|
end
|
85
140
|
end
|
86
141
|
end
|