danger-samsao 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis/danger.sh +7 -0
- data/.travis.yml +16 -7
- data/CHANGELOG.md +52 -0
- data/Dangerfile +5 -5
- data/Gemfile.lock +2 -2
- data/README.md +209 -56
- data/Rakefile +3 -1
- data/lib/samsao/actions.rb +130 -16
- data/lib/samsao/config.rb +13 -0
- data/lib/samsao/gem_version.rb +1 -1
- data/lib/samsao/helpers.rb +62 -13
- data/lib/samsao/plugin.rb +1 -0
- data/lib/samsao/regexp.rb +10 -6
- data/spec/matchers/have_message.rb +25 -0
- data/spec/matchers/have_no_message.rb +14 -0
- data/spec/samsao_acceptance_criteria_spec.rb +54 -0
- data/spec/samsao_branching_model_spec.rb +3 -3
- data/spec/samsao_changelog_updated_spec.rb +8 -8
- data/spec/samsao_config_spec.rb +28 -0
- data/spec/samsao_feature_jira_issue_number_spec.rb +72 -0
- data/spec/samsao_feature_single_commit_spec.rb +3 -3
- data/spec/samsao_fix_jira_issue_number_spec.rb +82 -0
- data/spec/samsao_jira_project_key_spec.rb +37 -0
- data/spec/samsao_label_pr_spec.rb +51 -0
- data/spec/samsao_merge_commit_detected_spec.rb +5 -17
- data/spec/samsao_report_spec.rb +45 -0
- data/spec/samsao_shorten_sha_spec.rb +26 -0
- data/spec/samsao_truncate_spec.rb +36 -0
- data/spec/samsao_work_in_progress_pr_spec.rb +4 -4
- data/spec/spec_helper.rb +15 -0
- metadata +24 -5
- data/bitrise.wrapper.yml +0 -51
- data/bitrise.yml +0 -80
data/lib/samsao/actions.rb
CHANGED
@@ -1,52 +1,166 @@
|
|
1
1
|
module Samsao
|
2
2
|
# Actions mixin module
|
3
3
|
module Actions
|
4
|
-
#
|
4
|
+
# Check if the git branching model is not respected for PR branch name.
|
5
5
|
#
|
6
|
+
# @param [Symbol] level (Default: :fail)
|
7
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
6
8
|
# @return [void]
|
7
|
-
|
9
|
+
#
|
10
|
+
def check_wrong_branching_model(level = :fail)
|
8
11
|
message = 'Your branch should be prefixed with feature/, fix/, bugfix/, hotfix/, release/ or support/!'
|
9
12
|
|
10
|
-
|
13
|
+
report(level, message) unless respects_branching_model
|
11
14
|
end
|
12
15
|
|
13
|
-
#
|
16
|
+
# Check if a feature branch have more than one commit.
|
14
17
|
#
|
18
|
+
# @param [Symbol] level (Default: :fail)
|
19
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
15
20
|
# @return [void]
|
16
|
-
|
21
|
+
#
|
22
|
+
def check_non_single_commit_feature(level = :fail)
|
17
23
|
commit_count = git.commits.size
|
18
24
|
message = "Your feature branch should have a single commit but found #{commit_count}, squash them together!"
|
19
25
|
|
20
|
-
|
26
|
+
report(level, message) if feature_branch? && commit_count > 1
|
21
27
|
end
|
22
28
|
|
23
|
-
#
|
29
|
+
# Check if the CHANGELOG wasn't updated on feature or fix branches.
|
24
30
|
#
|
31
|
+
# @param [Symbol] level (Default: :fail)
|
32
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
25
33
|
# @return [void]
|
26
|
-
|
34
|
+
#
|
35
|
+
def check_changelog_update_missing(level = :fail)
|
27
36
|
return if trivial_change?
|
28
37
|
return if support_branch? && config.project_type == :application
|
29
38
|
|
30
|
-
|
39
|
+
report(level, 'You did a change without updating CHANGELOG file!') unless changelog_modified?
|
31
40
|
end
|
32
41
|
|
33
|
-
#
|
42
|
+
# Check if one or more merge commit is detected.
|
34
43
|
#
|
44
|
+
# @param [Symbol] level (Default: :fail)
|
45
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
35
46
|
# @return [void]
|
36
|
-
|
47
|
+
#
|
48
|
+
def check_merge_commit_detected(level = :fail)
|
37
49
|
message = 'Some merge commits were detected, you must use rebase to sync with base branch.'
|
38
50
|
merge_commit_detector = /^Merge branch '#{github.branch_for_base}'/
|
39
51
|
|
40
|
-
|
52
|
+
report(level, message) if git.commits.any? { |commit| commit.message =~ merge_commit_detector }
|
53
|
+
end
|
54
|
+
|
55
|
+
# Check for work in progress commit message in PR.
|
56
|
+
#
|
57
|
+
# @param [Symbol] level (Default: :warn)
|
58
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
59
|
+
# @return [void]
|
60
|
+
#
|
61
|
+
def check_work_in_progess_pr(level = :warn)
|
62
|
+
report(level, 'Do not merge, PR is a work in progess [WIP]!') if github.pr_title.include?('[WIP]')
|
63
|
+
end
|
64
|
+
|
65
|
+
# Check if a feature branch contains a single JIRA issue number matching the jira project key.
|
66
|
+
#
|
67
|
+
# @param [Symbol] level (Default: :fail)
|
68
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
69
|
+
# @return [void]
|
70
|
+
#
|
71
|
+
def check_feature_jira_issue_number(level = :fail)
|
72
|
+
return if samsao.trivial_change? || !samsao.feature_branch?
|
73
|
+
return report(:fail, 'Your Danger config is missing a `jira_project_key` value.') unless jira_project_key?
|
74
|
+
|
75
|
+
message = 'The PR must starts with JIRA issue number between square brackets'\
|
76
|
+
" (i.e. [#{config.jira_project_key}-XXX])."
|
77
|
+
|
78
|
+
report(level, message) unless contains_jira_issue_number?(github.pr_title)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Check if all fix branch commit's message contains any JIRA issue number matching the jira project key.
|
82
|
+
#
|
83
|
+
# @param [Symbol] level (Default: :warn)
|
84
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
85
|
+
# @return [void]
|
86
|
+
#
|
87
|
+
def check_fix_jira_issue_number(level = :warn)
|
88
|
+
return if samsao.trivial_change? || !samsao.fix_branch?
|
89
|
+
return report(:fail, 'Your Danger config is missing a `jira_project_key` value.') unless jira_project_key?
|
90
|
+
|
91
|
+
git.commits.each do |commit|
|
92
|
+
check_commit_contains_jira_issue_number(commit, level)
|
93
|
+
end
|
41
94
|
end
|
42
95
|
|
43
|
-
#
|
96
|
+
# Check if it's a feature branch and if the PR body contains acceptance criteria.
|
44
97
|
#
|
98
|
+
# @param [Symbol] level (Default: :warn)
|
99
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
45
100
|
# @return [void]
|
46
|
-
|
47
|
-
|
101
|
+
#
|
102
|
+
def check_acceptance_criteria(level = :warn)
|
103
|
+
return unless samsao.feature_branch?
|
104
|
+
|
105
|
+
message = 'The PR should have the acceptance criteria in the body.'
|
106
|
+
|
107
|
+
report(level, message) if (/acceptance criteria/i =~ github.pr_body).nil?
|
108
|
+
end
|
109
|
+
|
110
|
+
# Check if the PR has at least one label added to it.
|
111
|
+
#
|
112
|
+
# @param [Symbol] level (Default: :fail)
|
113
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
114
|
+
# @return [void]
|
115
|
+
#
|
116
|
+
def check_label_pr(level = :fail)
|
117
|
+
message = 'The PR should have at least one label added to it.'
|
118
|
+
|
119
|
+
report(level, message) if github.pr_labels.nil? || github.pr_labels.empty?
|
120
|
+
end
|
121
|
+
|
122
|
+
# Send report to danger depending on the level.
|
123
|
+
#
|
124
|
+
# @param [Symbol] level
|
125
|
+
# The report level sent to Danger :
|
126
|
+
# :message > Comment a message to the table
|
127
|
+
# :warn > Declares a CI warning
|
128
|
+
# :fail > Declares a CI blocking error
|
129
|
+
# @param [String] content
|
130
|
+
# The message of the report sent to Danger
|
131
|
+
# @return [void]
|
132
|
+
#
|
133
|
+
def report(level, content)
|
134
|
+
case level
|
135
|
+
when :warn
|
136
|
+
warn content
|
137
|
+
when :fail
|
138
|
+
fail content
|
139
|
+
when :message
|
140
|
+
message content
|
141
|
+
else
|
142
|
+
raise "Report level '#{level}' is invalid."
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
# Check if the commit's message contains any JIRA issue number matching the jira project key.
|
149
|
+
#
|
150
|
+
# @param [Commit] commit
|
151
|
+
# The git commit to check
|
152
|
+
# @param [Symbol] level (Default: :warn)
|
153
|
+
# The report level (:fail, :warn, :message) if the check fails [report](#report)
|
154
|
+
# @return [void]
|
155
|
+
#
|
156
|
+
def check_commit_contains_jira_issue_number(commit, type)
|
157
|
+
commit_id = "#{shorten_sha(commit.sha)} ('#{truncate(commit.message)}')"
|
158
|
+
jira_project_key = config.jira_project_key
|
159
|
+
message = "The commit #{commit_id} should contain JIRA issue number" \
|
160
|
+
" between square brackets (i.e. [#{jira_project_key}-XXX]), multiple allowed" \
|
161
|
+
" (i.e. [#{jira_project_key}-XXX, #{jira_project_key}-YYY, #{jira_project_key}-ZZZ])"
|
48
162
|
|
49
|
-
|
163
|
+
report(type, message) unless contains_jira_issue_number?(commit.message)
|
50
164
|
end
|
51
165
|
end
|
52
166
|
end
|
data/lib/samsao/config.rb
CHANGED
@@ -7,6 +7,7 @@ module Danger
|
|
7
7
|
@changelogs = ['CHANGELOG.md']
|
8
8
|
@sources = []
|
9
9
|
@project_type = :application
|
10
|
+
@jira_project_key = nil
|
10
11
|
end
|
11
12
|
|
12
13
|
def changelogs(*entries)
|
@@ -15,6 +16,12 @@ module Danger
|
|
15
16
|
@changelogs = entries
|
16
17
|
end
|
17
18
|
|
19
|
+
def jira_project_key(key = nil)
|
20
|
+
return @jira_project_key if key.nil?
|
21
|
+
|
22
|
+
@jira_project_key = validate_jira_project_key(key)
|
23
|
+
end
|
24
|
+
|
18
25
|
def project_type(type = nil)
|
19
26
|
return @project_type if type.nil?
|
20
27
|
|
@@ -29,6 +36,12 @@ module Danger
|
|
29
36
|
|
30
37
|
private
|
31
38
|
|
39
|
+
def validate_jira_project_key(key)
|
40
|
+
return key unless (/^[A-Z]{1,10}$/ =~ key).nil?
|
41
|
+
|
42
|
+
raise "Jira project key '#{key}' is invalid, must be uppercase and between 1 and 10 characters"
|
43
|
+
end
|
44
|
+
|
32
45
|
def validate_project_type(type)
|
33
46
|
return type if valid_project_type?(type)
|
34
47
|
|
data/lib/samsao/gem_version.rb
CHANGED
data/lib/samsao/helpers.rb
CHANGED
@@ -6,52 +6,59 @@ module Samsao
|
|
6
6
|
# Check if any changelog were modified. When the helper receives nothing,
|
7
7
|
# changelogs defined by the config are used.
|
8
8
|
#
|
9
|
-
# @return [
|
9
|
+
# @return [Bool] True
|
10
|
+
# If any changelogs were modified in this commit
|
11
|
+
#
|
10
12
|
def changelog_modified?(*changelogs)
|
11
13
|
changelogs = config.changelogs if changelogs.nil? || changelogs.empty?
|
12
14
|
|
13
15
|
changelogs.any? { |changelog| git.modified_files.include?(changelog) }
|
14
16
|
end
|
15
17
|
|
16
|
-
# Return true if the current PR branch is a feature branch
|
18
|
+
# Return true if the current PR branch is a feature branch.
|
19
|
+
#
|
20
|
+
# @return [Bool]
|
17
21
|
#
|
18
|
-
# @return [void]
|
19
22
|
def feature_branch?
|
20
23
|
git_branch.start_with?('feature/')
|
21
24
|
end
|
22
25
|
|
23
|
-
# Return true if the current PR branch is a bug fix branch
|
26
|
+
# Return true if the current PR branch is a bug fix branch.
|
27
|
+
#
|
28
|
+
# @return [Bool]
|
24
29
|
#
|
25
|
-
# @return [void]
|
26
30
|
def fix_branch?
|
27
31
|
!(%r{^(bug|hot)?fix/} =~ git_branch).nil?
|
28
32
|
end
|
29
33
|
|
30
|
-
# Return true if the current PR branch is a release branch
|
34
|
+
# Return true if the current PR branch is a release branch.
|
35
|
+
#
|
36
|
+
# @return [Bool]
|
31
37
|
#
|
32
|
-
# @return [void]
|
33
38
|
def release_branch?
|
34
39
|
git_branch.start_with?('release/')
|
35
40
|
end
|
36
41
|
|
37
|
-
# Return true if the current PR branch is a support branch
|
42
|
+
# Return true if the current PR branch is a support branch.
|
43
|
+
#
|
44
|
+
# @return [Bool]
|
38
45
|
#
|
39
|
-
# @return [void]
|
40
46
|
def support_branch?
|
41
47
|
git_branch.start_with?('support/')
|
42
48
|
end
|
43
49
|
|
44
|
-
# Return true if the current PR is a trivial change, i.e. if
|
45
|
-
#
|
50
|
+
# Return true if the current PR is a trivial change, i.e. if PR title contains #trivial or #typo markers.
|
51
|
+
#
|
52
|
+
# @return [Bool]
|
46
53
|
#
|
47
|
-
# @return [void]
|
48
54
|
def trivial_change?
|
49
55
|
!(/#(trivial|typo(s)?)/ =~ github.pr_title).nil?
|
50
56
|
end
|
51
57
|
|
52
58
|
# Return true if any source files are in the git modified files list.
|
53
59
|
#
|
54
|
-
# @return [
|
60
|
+
# @return [Bool]
|
61
|
+
#
|
55
62
|
def has_app_changes?(*sources)
|
56
63
|
sources = config.sources if sources.nil? || sources.empty?
|
57
64
|
|
@@ -62,6 +69,48 @@ module Samsao
|
|
62
69
|
end
|
63
70
|
end
|
64
71
|
|
72
|
+
# Return true if the config has a jira project key.
|
73
|
+
#
|
74
|
+
# @return [Bool]
|
75
|
+
#
|
76
|
+
def jira_project_key?
|
77
|
+
!config.jira_project_key.nil?
|
78
|
+
end
|
79
|
+
|
80
|
+
# Return true if PR title contains any number of JIRA issues.
|
81
|
+
#
|
82
|
+
# @return [Bool]
|
83
|
+
#
|
84
|
+
def contains_jira_issue_number?(input)
|
85
|
+
!(/\[#{config.jira_project_key}-\d+(,( *#{config.jira_project_key}-)? *\d+)*\]/ =~ input).nil?
|
86
|
+
end
|
87
|
+
|
88
|
+
# Shorten git commit's sha to seven characters.
|
89
|
+
#
|
90
|
+
# @param [String] sha
|
91
|
+
# A git commit's sha
|
92
|
+
# @return [String]
|
93
|
+
#
|
94
|
+
def shorten_sha(sha)
|
95
|
+
return sha if sha.nil?
|
96
|
+
|
97
|
+
sha[0..7]
|
98
|
+
end
|
99
|
+
|
100
|
+
# Truncate the string received.
|
101
|
+
#
|
102
|
+
# @param [String] input
|
103
|
+
# The string to truncate
|
104
|
+
# @param [Number] max (Default: 30)
|
105
|
+
# The max size of the truncated string
|
106
|
+
# @return [String]
|
107
|
+
#
|
108
|
+
def truncate(input, max = 30)
|
109
|
+
return input if input.nil? || input.length <= max
|
110
|
+
|
111
|
+
input[0..max - 1].gsub(/\s\w+\s*$/, '...')
|
112
|
+
end
|
113
|
+
|
65
114
|
private
|
66
115
|
|
67
116
|
def git_branch
|
data/lib/samsao/plugin.rb
CHANGED
data/lib/samsao/regexp.rb
CHANGED
@@ -4,9 +4,11 @@ module Samsao
|
|
4
4
|
# Turns a source entry input into a Regexp. Uses rules from [from_matcher](#from_matcher)
|
5
5
|
# function and append a `^` to final regexp when the source if a pure String.
|
6
6
|
#
|
7
|
-
# @param
|
7
|
+
# @param [String] source
|
8
|
+
# The source entry to transform into a Regexp
|
9
|
+
# @return [Regexp]
|
10
|
+
# The source entry as a regexp
|
8
11
|
#
|
9
|
-
# @return [Regexp] The source entry as a regexp
|
10
12
|
def self.from_source(source)
|
11
13
|
from_matcher(source, when_string_pattern_prefix_with: '^')
|
12
14
|
end
|
@@ -15,11 +17,13 @@ module Samsao
|
|
15
17
|
# into a Regexp and escape all special characters. If the input is already
|
16
18
|
# a Regexp, it returns it without modification.
|
17
19
|
#
|
18
|
-
# @param matcher
|
19
|
-
#
|
20
|
-
#
|
20
|
+
# @param [String] matcher
|
21
|
+
# The input matcher to transform into a Regexp
|
22
|
+
# @keyword [String] when_string_pattern_prefix_with (Default: '')
|
23
|
+
# The prefix that should be added to final regexp when the input matcher is a string type
|
24
|
+
# @return [Regexp]
|
25
|
+
# The input as a regexp
|
21
26
|
#
|
22
|
-
# @return [Regexp] The input as a regexp
|
23
27
|
def self.from_matcher(matcher, when_string_pattern_prefix_with: '')
|
24
28
|
return matcher if matcher.is_a?(::Regexp)
|
25
29
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'rspec/expectations'
|
2
|
+
|
3
|
+
RSpec::Matchers.define :have_message do |expected|
|
4
|
+
match do |actual|
|
5
|
+
actual.status_report[:messages].any? do |message|
|
6
|
+
expected.is_a?(Regexp) ? message =~ matcher : message.start_with?(expected)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
failure_message do |actual|
|
11
|
+
result = "expected that #{Danger} would have warning '#{expected}'"
|
12
|
+
|
13
|
+
messages = actual.status_report[:messages]
|
14
|
+
if messages.empty?
|
15
|
+
result += ' but there is none'
|
16
|
+
return result
|
17
|
+
end
|
18
|
+
|
19
|
+
actual.status_report[:messages].each do |message|
|
20
|
+
result += "\n * #{message}"
|
21
|
+
end
|
22
|
+
|
23
|
+
result
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rspec/expectations'
|
2
|
+
|
3
|
+
RSpec::Matchers.define :have_no_message do
|
4
|
+
match do |actual|
|
5
|
+
actual.status_report[:messages].empty?
|
6
|
+
end
|
7
|
+
|
8
|
+
failure_message do |actual|
|
9
|
+
result = "expected that #{Danger} would have no message but found '#{actual.status_report[:messages].size}'"
|
10
|
+
actual.status_report[:messages].each do |message|
|
11
|
+
result += "\n * #{message}"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
module Danger
|
4
|
+
describe Danger::DangerSamsao do
|
5
|
+
describe 'with Dangerfile' do
|
6
|
+
before do
|
7
|
+
@dangerfile = testing_dangerfile
|
8
|
+
@plugin = @dangerfile.samsao
|
9
|
+
@message = 'The PR should have the acceptance criteria in the body.'
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'check acceptance criteria' do
|
13
|
+
it 'continues on fix branch' do
|
14
|
+
allow(@plugin).to receive(:feature_branch?).and_return(false)
|
15
|
+
|
16
|
+
@plugin.check_acceptance_criteria
|
17
|
+
|
18
|
+
expect(@dangerfile).to have_no_warning
|
19
|
+
expect(@dangerfile).to have_no_error
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'warns if acceptance criteria is missing' do
|
23
|
+
allow(@plugin).to receive(:feature_branch?).and_return(true)
|
24
|
+
allow(@plugin.github).to receive(:pr_body).and_return('Bad example')
|
25
|
+
|
26
|
+
@plugin.check_acceptance_criteria
|
27
|
+
|
28
|
+
expect(@dangerfile).to have_warning(@message)
|
29
|
+
expect(@dangerfile).to have_no_error
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'fails if report level specified' do
|
33
|
+
allow(@plugin).to receive(:feature_branch?).and_return(true)
|
34
|
+
allow(@plugin.github).to receive(:pr_body).and_return('Bad example')
|
35
|
+
|
36
|
+
@plugin.check_acceptance_criteria :fail
|
37
|
+
|
38
|
+
expect(@dangerfile).to have_error(@message)
|
39
|
+
expect(@dangerfile).to have_no_warning
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'continues if contains acceptance criteria' do
|
43
|
+
allow(@plugin).to receive(:feature_branch?).and_return(true)
|
44
|
+
allow(@plugin.github).to receive(:pr_body).and_return('acceptance criteria : Good example')
|
45
|
+
|
46
|
+
@plugin.check_acceptance_criteria
|
47
|
+
|
48
|
+
expect(@dangerfile).to have_no_warning
|
49
|
+
expect(@dangerfile).to have_no_error
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -15,7 +15,7 @@ module Danger
|
|
15
15
|
it "continues on #{branch_prefix}/ prefix" do
|
16
16
|
allow(@plugin.github).to receive(:branch_for_head).and_return("#{branch_prefix}/something")
|
17
17
|
|
18
|
-
@plugin.
|
18
|
+
@plugin.check_wrong_branching_model
|
19
19
|
|
20
20
|
expect(@dangerfile).to have_no_error
|
21
21
|
end
|
@@ -24,7 +24,7 @@ module Danger
|
|
24
24
|
it 'fails on wrong prefix' do
|
25
25
|
allow(@plugin.github).to receive(:branch_for_head).and_return('wrong/12')
|
26
26
|
|
27
|
-
@plugin.
|
27
|
+
@plugin.check_wrong_branching_model
|
28
28
|
|
29
29
|
expect(@dangerfile).to have_error(@wrong_branching_model)
|
30
30
|
end
|
@@ -32,7 +32,7 @@ module Danger
|
|
32
32
|
it 'fails on good prefix but wrong format' do
|
33
33
|
allow(@plugin.github).to receive(:branch_for_head).and_return('feature_12')
|
34
34
|
|
35
|
-
@plugin.
|
35
|
+
@plugin.check_wrong_branching_model
|
36
36
|
|
37
37
|
expect(@dangerfile).to have_error(@wrong_branching_model)
|
38
38
|
end
|
@@ -15,7 +15,7 @@ module Danger
|
|
15
15
|
it 'continues on support branch' do
|
16
16
|
allow(@plugin.github).to receive(:branch_for_head).and_return('support/a')
|
17
17
|
|
18
|
-
@plugin.
|
18
|
+
@plugin.check_changelog_update_missing
|
19
19
|
|
20
20
|
expect(@dangerfile).to have_no_error
|
21
21
|
end
|
@@ -25,7 +25,7 @@ module Danger
|
|
25
25
|
allow(@plugin.github).to receive(:branch_for_head).and_return("#{branch}/a")
|
26
26
|
allow(@plugin.git).to receive(:modified_files).and_return(['CHANGELOG.md'])
|
27
27
|
|
28
|
-
@plugin.
|
28
|
+
@plugin.check_changelog_update_missing
|
29
29
|
|
30
30
|
expect(@dangerfile).to have_no_error
|
31
31
|
end
|
@@ -34,7 +34,7 @@ module Danger
|
|
34
34
|
allow(@plugin.github).to receive(:branch_for_head).and_return("#{branch}/a")
|
35
35
|
allow(@plugin.git).to receive(:modified_files).and_return([])
|
36
36
|
|
37
|
-
@plugin.
|
37
|
+
@plugin.check_changelog_update_missing
|
38
38
|
|
39
39
|
expect(@dangerfile).to have_error(@changelog_needs_update)
|
40
40
|
end
|
@@ -48,7 +48,7 @@ module Danger
|
|
48
48
|
allow(@plugin.github).to receive(:branch_for_head).and_return('fix/a')
|
49
49
|
allow(@plugin.git).to receive(:modified_files).and_return(['CHANGELOG.yml'])
|
50
50
|
|
51
|
-
@plugin.
|
51
|
+
@plugin.check_changelog_update_missing
|
52
52
|
|
53
53
|
expect(@dangerfile).to have_no_error
|
54
54
|
end
|
@@ -61,7 +61,7 @@ module Danger
|
|
61
61
|
allow(@plugin.github).to receive(:branch_for_head).and_return('fix/a')
|
62
62
|
allow(@plugin.git).to receive(:modified_files).and_return(['web/CHANGELOG.md'])
|
63
63
|
|
64
|
-
@plugin.
|
64
|
+
@plugin.check_changelog_update_missing
|
65
65
|
|
66
66
|
expect(@dangerfile).to have_no_error
|
67
67
|
end
|
@@ -70,7 +70,7 @@ module Danger
|
|
70
70
|
allow(@plugin).to receive(:trivial_change?).and_return(true)
|
71
71
|
allow(@plugin.git).to receive(:modified_files).and_return([])
|
72
72
|
|
73
|
-
@plugin.
|
73
|
+
@plugin.check_changelog_update_missing
|
74
74
|
|
75
75
|
expect(@dangerfile).to have_no_error
|
76
76
|
end
|
@@ -83,7 +83,7 @@ module Danger
|
|
83
83
|
allow(@plugin).to receive(:support_branch?).and_return(true)
|
84
84
|
allow(@plugin.git).to receive(:modified_files).and_return([])
|
85
85
|
|
86
|
-
@plugin.
|
86
|
+
@plugin.check_changelog_update_missing
|
87
87
|
|
88
88
|
expect(@dangerfile).to have_no_error
|
89
89
|
end
|
@@ -96,7 +96,7 @@ module Danger
|
|
96
96
|
allow(@plugin).to receive(:support_branch?).and_return(true)
|
97
97
|
allow(@plugin.git).to receive(:modified_files).and_return([])
|
98
98
|
|
99
|
-
@plugin.
|
99
|
+
@plugin.check_changelog_update_missing
|
100
100
|
|
101
101
|
expect(@dangerfile).to have_error(@changelog_needs_update)
|
102
102
|
end
|
data/spec/samsao_config_spec.rb
CHANGED
@@ -79,6 +79,34 @@ module Danger
|
|
79
79
|
expect { @plugin.config { project_type 'custom' } }.to raise_error(message)
|
80
80
|
end
|
81
81
|
end
|
82
|
+
|
83
|
+
describe 'config jira_project_key' do
|
84
|
+
it 'accepts jira project key' do
|
85
|
+
jira_project_key = 'VER'
|
86
|
+
|
87
|
+
@plugin.config do
|
88
|
+
jira_project_key jira_project_key
|
89
|
+
end
|
90
|
+
|
91
|
+
expect(@plugin.config.jira_project_key).to eq(jira_project_key)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'reject invalid jira project key containing numbers' do
|
95
|
+
jira_project_key = '123'
|
96
|
+
message = "Jira project key '#{jira_project_key}' is invalid, must be"\
|
97
|
+
' uppercase and between 1 and 10 characters'
|
98
|
+
|
99
|
+
expect { @plugin.config { jira_project_key jira_project_key } }.to raise_error(message)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'reject invalid jira project key containing lowercase characters' do
|
103
|
+
jira_project_key = 'invalid'
|
104
|
+
message = "Jira project key '#{jira_project_key}' is invalid, must be"\
|
105
|
+
' uppercase and between 1 and 10 characters'
|
106
|
+
|
107
|
+
expect { @plugin.config { jira_project_key jira_project_key } }.to raise_error(message)
|
108
|
+
end
|
109
|
+
end
|
82
110
|
end
|
83
111
|
end
|
84
112
|
end
|