codeclimate-services 1.3.0 → 1.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3a4f61a5b3f784878457cd8e81bfe7982eae48d4
4
- data.tar.gz: 5af929445d6091a1c6694eecd0a5f2d4985c8382
3
+ metadata.gz: 5df730afefd8e53147faaab840a08cc8a7b8a6e2
4
+ data.tar.gz: e3228551b4e7acae238ee5da6fbb3f46ea2074e2
5
5
  SHA512:
6
- metadata.gz: 3cf81df8fcfe3d364fc4024e2b89529177c5d5e6206b74ce8545168c78c6f3d7424ddeb56d7785f682790f6912a3fe8093764b54fa66f021bd1ed76b8363713b
7
- data.tar.gz: efd09827e835d99ed4210525bba7bc764441925670477c7726002e9b02e8d45cbae2f9a9d1aa50589bdfd9e156aed314d97600e5f29699846a4b28d5ed740be6
6
+ metadata.gz: d40a0916c6ebf0d981f0731db49d25c1c748dc296efbd2d04e749b4fa848644e423cb3d157afd57dbbeeb825112be3ab525b67ca22549b27c476fb6ff84b545c
7
+ data.tar.gz: a8e1a740ba27e3c743b80e4d1245d5bc6b0a72173f799608eb57c64b36a876a8f6579338176fafebcd6ef1ca85cefb0c8c6181ac2769182cc6f4fbebf2493cf6
@@ -12,6 +12,7 @@ module CC
12
12
  end
13
13
 
14
14
  @covered_percent = payload["covered_percent"]
15
+ @covered_percent_delta = payload["covered_percent_delta"]
15
16
  end
16
17
 
17
18
  def error_message
@@ -26,8 +27,16 @@ module CC
26
27
  "Code Climate has skipped analysis of this commit."
27
28
  end
28
29
 
29
- def coverage_success_message
30
- "Test coverage for this commit: #{@covered_percent}%"
30
+ def coverage_message
31
+ message = "#{formatted_percent(@covered_percent)}% test coverage"
32
+
33
+ if @covered_percent_delta.positive?
34
+ message += " (+#{formatted_percent(@covered_percent_delta)}%)"
35
+ elsif @covered_percent_delta.negative?
36
+ message += " (#{formatted_percent(@covered_percent_delta)}%)"
37
+ end
38
+
39
+ message
31
40
  end
32
41
 
33
42
  def success_message
@@ -64,6 +73,10 @@ module CC
64
73
  [formatted_new_issues, formatted_fixed_issues].compact.to_sentence
65
74
  end
66
75
 
76
+ def formatted_percent(value)
77
+ "%g" % ("%.2f" % value)
78
+ end
79
+
67
80
  def issue_counts
68
81
  [@new_count, @fixed_count]
69
82
  end
@@ -5,14 +5,6 @@ class CC::Service::GitHubPullRequests < CC::Service
5
5
  attribute :oauth_token, Axiom::Types::String,
6
6
  label: "OAuth Token",
7
7
  description: "A personal OAuth token with permissions for the repo."
8
- attribute :update_status, Axiom::Types::Boolean,
9
- label: "Update analysis status?",
10
- description: "Update the pull request status after analyzing?",
11
- default: true
12
- attribute :update_coverage_status, Axiom::Types::Boolean,
13
- label: "Update coverage status?",
14
- description: "Update the pull request status with test coverage reports?",
15
- default: false
16
8
  attribute :base_url, Axiom::Types::String,
17
9
  label: "Github API Base URL",
18
10
  description: "Base URL for the Github API",
@@ -34,38 +26,30 @@ class CC::Service::GitHubPullRequests < CC::Service
34
26
  def receive_test
35
27
  setup_http
36
28
 
37
- if update_status?
38
- receive_test_status
39
- else
40
- simple_failure("Nothing happened")
41
- end
29
+ receive_test_status
42
30
  end
43
31
 
44
32
  def receive_pull_request
45
- if update_status?
46
- setup_http
47
- state = @payload["state"]
48
-
49
- if %w[pending success failure skipped error].include?(state)
50
- send("update_status_#{state}")
51
- else
52
- @response = simple_failure("Unknown state")
53
- end
33
+ setup_http
34
+ state = @payload["state"]
35
+
36
+ if %w[pending success failure skipped error].include?(state)
37
+ send("update_status_#{state}")
38
+ else
39
+ @response = simple_failure("Unknown state")
54
40
  end
55
41
 
56
42
  response
57
43
  end
58
44
 
59
45
  def receive_pull_request_coverage
60
- if update_coverage_status?
61
- setup_http
62
- state = @payload["state"]
63
-
64
- if state == "success"
65
- update_coverage_status_success
66
- else
67
- @response = simple_failure("Unknown state")
68
- end
46
+ setup_http
47
+ state = @payload["state"]
48
+
49
+ if state == "success"
50
+ update_coverage_status_success
51
+ else
52
+ @response = simple_failure("Unknown state")
69
53
  end
70
54
 
71
55
  response
@@ -73,18 +57,6 @@ class CC::Service::GitHubPullRequests < CC::Service
73
57
 
74
58
  private
75
59
 
76
- def update_status?
77
- effective_boolean?(config.update_status)
78
- end
79
-
80
- def update_coverage_status?
81
- effective_boolean?(config.update_coverage_status)
82
- end
83
-
84
- def effective_boolean?(value)
85
- [true, "1"].include?(value)
86
- end
87
-
88
60
  def simple_failure(message)
89
61
  { ok: false, message: message }
90
62
  end
@@ -102,7 +74,7 @@ private
102
74
  end
103
75
 
104
76
  def update_coverage_status_success
105
- update_status("success", presenter.coverage_success_message, "#{config.context}/coverage")
77
+ update_status("success", presenter.coverage_message, "#{config.context}/coverage")
106
78
  end
107
79
 
108
80
  def update_status_failure
@@ -1,5 +1,5 @@
1
1
  module CC
2
2
  module Services
3
- VERSION = "1.3.0"
3
+ VERSION = "1.4.0"
4
4
  end
5
5
  end
data/pull_request_test.rb CHANGED
@@ -30,7 +30,6 @@ end
30
30
 
31
31
  service = CC::Service::GitHubPullRequests.new({
32
32
  oauth_token: ENV.fetch("OAUTH_TOKEN"),
33
- update_status: true,
34
33
  }, {
35
34
  name: "pull_request",
36
35
  # https://github.com/codeclimate/nillson/pull/33
data/service_test.rb CHANGED
@@ -83,4 +83,4 @@ ServiceTest.new(CC::Service::Slack, :webhook_url).test
83
83
  ServiceTest.new(CC::Service::Flowdock, :api_token).test
84
84
  ServiceTest.new(CC::Service::Jira, :username, :password, :domain, :project_id).test
85
85
  ServiceTest.new(CC::Service::Asana, :api_key, :workspace_id, :project_id).test
86
- ServiceTest.new(CC::Service::GitHubPullRequests, :oauth_token, :update_status, :add_comment).test({ github_slug: "codeclimate/codeclimate" })
86
+ ServiceTest.new(CC::Service::GitHubPullRequests, :oauth_token).test({ github_slug: "codeclimate/codeclimate" })
@@ -7,7 +7,7 @@ class TestGitHubPullRequests < CC::Service::TestCase
7
7
  "description" => /is analyzing/,
8
8
  })
9
9
 
10
- receive_pull_request({ update_status: true }, {
10
+ receive_pull_request({}, {
11
11
  github_slug: "pbrisbin/foo",
12
12
  commit_sha: "abc123",
13
13
  state: "pending",
@@ -21,7 +21,7 @@ class TestGitHubPullRequests < CC::Service::TestCase
21
21
  })
22
22
 
23
23
  receive_pull_request(
24
- { update_status: true },
24
+ {},
25
25
  {
26
26
  github_slug: "pbrisbin/foo",
27
27
  commit_sha: "abc123",
@@ -37,7 +37,7 @@ class TestGitHubPullRequests < CC::Service::TestCase
37
37
  })
38
38
 
39
39
  receive_pull_request(
40
- { update_status: true },
40
+ { },
41
41
  {
42
42
  github_slug: "pbrisbin/foo",
43
43
  commit_sha: "abc123",
@@ -52,7 +52,7 @@ class TestGitHubPullRequests < CC::Service::TestCase
52
52
  "description" => /found 2 new issues and 1 fixed issue/,
53
53
  })
54
54
 
55
- receive_pull_request({ update_status: true }, {
55
+ receive_pull_request({}, {
56
56
  github_slug: "pbrisbin/foo",
57
57
  commit_sha: "abc123",
58
58
  state: "success",
@@ -65,7 +65,7 @@ class TestGitHubPullRequests < CC::Service::TestCase
65
65
  "description" => "Code Climate encountered an error attempting to analyze this pull request.",
66
66
  })
67
67
 
68
- receive_pull_request({ update_status: true }, {
68
+ receive_pull_request({}, {
69
69
  github_slug: "pbrisbin/foo",
70
70
  commit_sha: "abc123",
71
71
  state: "error",
@@ -79,7 +79,7 @@ class TestGitHubPullRequests < CC::Service::TestCase
79
79
  "description" => "descriptive message",
80
80
  })
81
81
 
82
- receive_pull_request({ update_status: true }, {
82
+ receive_pull_request({}, {
83
83
  github_slug: "pbrisbin/foo",
84
84
  commit_sha: "abc123",
85
85
  state: "error",
@@ -93,75 +93,45 @@ class TestGitHubPullRequests < CC::Service::TestCase
93
93
  "description" => /skipped analysis/,
94
94
  })
95
95
 
96
- receive_pull_request({ update_status: true }, {
96
+ receive_pull_request({}, {
97
97
  github_slug: "pbrisbin/foo",
98
98
  commit_sha: "abc123",
99
99
  state: "skipped",
100
100
  })
101
101
  end
102
102
 
103
- def test_pull_request_coverage_status_success
103
+ def test_pull_request_coverage_status
104
104
  expect_status_update("pbrisbin/foo", "abc123", {
105
105
  "state" => "success",
106
- "description" => "Test coverage for this commit: 87%",
106
+ "description" => "87% test coverage (+2%)",
107
107
  })
108
108
 
109
- receive_pull_request_coverage({ update_coverage_status: true }, {
109
+ receive_pull_request_coverage({},
110
110
  github_slug: "pbrisbin/foo",
111
111
  commit_sha: "abc123",
112
112
  state: "success",
113
- covered_percent: 87
114
- })
115
- end
116
-
117
- def test_no_status_update_for_skips_when_update_status_config_is_falsey
118
- # With no POST expectation, test will fail if request is made.
119
-
120
- receive_pull_request({ update_status: false }, {
121
- github_slug: "pbrisbin/foo",
122
- commit_sha: "abc123",
123
- state: "skipped",
124
- })
125
- end
126
-
127
- def test_no_status_update_for_pending_when_update_status_config_is_falsey
128
- # With no POST expectation, test will fail if request is made.
129
-
130
- receive_pull_request({ update_status: false }, {
131
- github_slug: "pbrisbin/foo",
132
- commit_sha: "abc123",
133
- state: "pending",
134
- })
135
- end
136
-
137
- def test_no_status_update_for_error_when_update_status_config_is_falsey
138
- # With no POST expectation, test will fail if request is made.
139
-
140
- receive_pull_request({ update_status: false }, {
141
- github_slug: "pbrisbin/foo",
142
- commit_sha: "abc123",
143
- state: "error",
144
- message: nil,
145
- })
113
+ covered_percent: 87,
114
+ covered_percent_delta: 2.0,
115
+ )
146
116
  end
147
117
 
148
118
  def test_pull_request_status_test_success
149
119
  @stubs.post("/repos/pbrisbin/foo/statuses/#{"0" * 40}") { |env| [422, {}, ""] }
150
120
 
151
- assert receive_test({ update_status: true }, { github_slug: "pbrisbin/foo" })[:ok], "Expected test of pull request to be true"
121
+ assert receive_test({}, { github_slug: "pbrisbin/foo" })[:ok], "Expected test of pull request to be true"
152
122
  end
153
123
 
154
124
  def test_pull_request_status_test_doesnt_blow_up_when_unused_keys_present_in_config
155
125
  @stubs.post("/repos/pbrisbin/foo/statuses/#{"0" * 40}") { |env| [422, {}, ""] }
156
126
 
157
- assert receive_test({ update_status: true, add_comment: true, wild_flamingo: true }, { github_slug: "pbrisbin/foo" })[:ok], "Expected test of pull request to be true"
127
+ assert receive_test({ wild_flamingo: true }, { github_slug: "pbrisbin/foo" })[:ok], "Expected test of pull request to be true"
158
128
  end
159
129
 
160
130
  def test_pull_request_status_test_failure
161
131
  @stubs.post("/repos/pbrisbin/foo/statuses/#{"0" * 40}") { |env| [401, {}, ""] }
162
132
 
163
133
  assert_raises(CC::Service::HTTPError) do
164
- receive_test({ update_status: true }, { github_slug: "pbrisbin/foo" })
134
+ receive_test({}, { github_slug: "pbrisbin/foo" })
165
135
  end
166
136
  end
167
137
 
@@ -171,19 +141,13 @@ class TestGitHubPullRequests < CC::Service::TestCase
171
141
  assert_equal({ ok: false, message: "Unknown state" }, response)
172
142
  end
173
143
 
174
- def test_pull_request_nothing_happened
175
- response = receive_pull_request({ update_status: false }, { state: "success" })
176
-
177
- assert_equal({ ok: false, message: "Nothing happened" }, response)
178
- end
179
-
180
144
  def test_different_base_url
181
145
  @stubs.post("/repos/pbrisbin/foo/statuses/#{"0" * 40}") do |env|
182
146
  assert env[:url].to_s == "http://example.com/repos/pbrisbin/foo/statuses/#{"0" * 40}"
183
147
  [422, { "x-oauth-scopes" => "gist, user, repo" }, ""]
184
148
  end
185
149
 
186
- assert receive_test({ update_status: true, base_url: "http://example.com" }, { github_slug: "pbrisbin/foo" })[:ok], "Expected test of pull request to be true"
150
+ assert receive_test({ base_url: "http://example.com" }, { github_slug: "pbrisbin/foo" })[:ok], "Expected test of pull request to be true"
187
151
  end
188
152
 
189
153
  def test_default_context
@@ -192,7 +156,7 @@ class TestGitHubPullRequests < CC::Service::TestCase
192
156
  "state" => "pending",
193
157
  })
194
158
 
195
- response = receive_pull_request({ update_status: true }, {
159
+ response = receive_pull_request({}, {
196
160
  github_slug: "gordondiggs/ellis",
197
161
  commit_sha: "abc123",
198
162
  state: "pending",
@@ -205,25 +169,13 @@ class TestGitHubPullRequests < CC::Service::TestCase
205
169
  "state" => "pending",
206
170
  })
207
171
 
208
- response = receive_pull_request({ context: "sup", update_status: true }, {
172
+ response = receive_pull_request({ context: "sup" }, {
209
173
  github_slug: "gordondiggs/ellis",
210
174
  commit_sha: "abc123",
211
175
  state: "pending",
212
176
  })
213
177
  end
214
178
 
215
- def test_config_coerce_bool_true
216
- c = CC::Service::GitHubPullRequests::Config.new(oauth_token: "a1b2c3", update_status: "1")
217
- assert c.valid?
218
- assert_equal true, c.update_status
219
- end
220
-
221
- def test_config_coerce_bool_false
222
- c = CC::Service::GitHubPullRequests::Config.new(oauth_token: "a1b2c3", update_status: "0")
223
- assert c.valid?
224
- assert_equal false, c.update_status
225
- end
226
-
227
179
  private
228
180
 
229
181
  def expect_status_update(repo, commit_sha, params)
@@ -37,13 +37,34 @@ class TestPullRequestsPresenter < CC::Service::TestCase
37
37
  )
38
38
  end
39
39
 
40
+ def test_message_coverage_same
41
+ assert_equal(
42
+ "85% test coverage",
43
+ build_presenter({}, "covered_percent" => 85, "covered_percent_delta" => 0).coverage_message
44
+ )
45
+ end
46
+
47
+ def test_message_coverage_up
48
+ assert_equal(
49
+ "85.5% test coverage (+2.46%)",
50
+ build_presenter({}, "covered_percent" => 85.5, "covered_percent_delta" => 2.4567).coverage_message
51
+ )
52
+ end
53
+
54
+ def test_message_coverage_down
55
+ assert_equal(
56
+ "85.35% test coverage (-3%)",
57
+ build_presenter({}, "covered_percent" => 85.348, "covered_percent_delta" => -3.0).coverage_message
58
+ )
59
+ end
60
+
40
61
  private
41
62
 
42
63
  def build_payload(issue_counts)
43
64
  { "issue_comparison_counts" => issue_counts }
44
65
  end
45
66
 
46
- def build_presenter(issue_counts)
47
- CC::Service::PullRequestsPresenter.new(build_payload(issue_counts))
67
+ def build_presenter(issue_counts, payload = {})
68
+ CC::Service::PullRequestsPresenter.new(build_payload(issue_counts).merge(payload))
48
69
  end
49
70
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeclimate-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Helmkamp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-04 00:00:00.000000000 Z
11
+ date: 2016-08-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday