codeclimate-services 1.6.1 → 1.7.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 +4 -4
- data/.rspec +2 -0
- data/.rubocop.yml +1 -0
- data/Gemfile +1 -2
- data/Rakefile +4 -7
- data/base_rubocop.yml +152 -0
- data/bin/bundler +5 -5
- data/bin/coderay +5 -5
- data/bin/nokogiri +5 -5
- data/bin/pry +5 -5
- data/bin/rake +5 -5
- data/codeclimate-services.gemspec +15 -15
- data/config/load.rb +2 -2
- data/lib/cc/formatters/linked_formatter.rb +2 -2
- data/lib/cc/formatters/snapshot_formatter.rb +10 -10
- data/lib/cc/formatters/ticket_formatter.rb +0 -2
- data/lib/cc/helpers/quality_helper.rb +2 -2
- data/lib/cc/helpers/vulnerability_helper.rb +0 -2
- data/lib/cc/presenters/pull_requests_presenter.rb +1 -5
- data/lib/cc/pull_requests.rb +7 -3
- data/lib/cc/service.rb +9 -10
- data/lib/cc/service/formatter.rb +3 -3
- data/lib/cc/service/helper.rb +2 -3
- data/lib/cc/service/http.rb +9 -9
- data/lib/cc/service/invocation.rb +6 -6
- data/lib/cc/service/invocation/with_error_handling.rb +9 -8
- data/lib/cc/service/invocation/with_metrics.rb +4 -4
- data/lib/cc/service/invocation/with_return_values.rb +0 -1
- data/lib/cc/service/response_check.rb +4 -5
- data/lib/cc/services.rb +2 -2
- data/lib/cc/services/asana.rb +8 -9
- data/lib/cc/services/campfire.rb +2 -3
- data/lib/cc/services/flowdock.rb +5 -5
- data/lib/cc/services/github_issues.rb +6 -7
- data/lib/cc/services/github_pull_requests.rb +42 -5
- data/lib/cc/services/gitlab_merge_requests.rb +6 -2
- data/lib/cc/services/hipchat.rb +3 -4
- data/lib/cc/services/jira.rb +8 -9
- data/lib/cc/services/lighthouse.rb +4 -5
- data/lib/cc/services/pivotal_tracker.rb +6 -7
- data/lib/cc/services/slack.rb +8 -8
- data/lib/cc/services/stash_pull_requests.rb +2 -2
- data/lib/cc/services/version.rb +1 -1
- data/pull_request_test.rb +11 -10
- data/service_test.rb +5 -5
- data/spec/axiom/types/password_spec.rb +14 -0
- data/spec/cc/formatters/snapshot_formatter_spec.rb +44 -0
- data/spec/cc/presenters/pull_requests_presenter_spec.rb +45 -0
- data/{test/asana_test.rb → spec/cc/service/asana_spec.rb} +27 -29
- data/{test/campfire_test.rb → spec/cc/service/campfire_spec.rb} +40 -44
- data/{test/flowdock_test.rb → spec/cc/service/flowdock_spec.rb} +46 -48
- data/{test/github_issues_test.rb → spec/cc/service/github_issues_spec.rb} +33 -35
- data/spec/cc/service/github_pull_requests_spec.rb +223 -0
- data/{test/gitlab_merge_requests_test.rb → spec/cc/service/gitlab_merge_requests_spec.rb} +30 -35
- data/{test/hipchat_test.rb → spec/cc/service/hipchat_spec.rb} +38 -40
- data/spec/cc/service/invocation/error_handling_spec.rb +49 -0
- data/spec/cc/service/invocation/return_values_spec.rb +19 -0
- data/spec/cc/service/invocation/with_metrics_spec.rb +18 -0
- data/{test/invocation_test.rb → spec/cc/service/invocation_spec.rb} +31 -34
- data/{test/jira_test.rb → spec/cc/service/jira_spec.rb} +25 -27
- data/{test/lighthouse_test.rb → spec/cc/service/lighthouse_spec.rb} +23 -26
- data/spec/cc/service/pivotal_tracker_spec.rb +70 -0
- data/{test/slack_test.rb → spec/cc/service/slack_spec.rb} +66 -77
- data/spec/cc/service/stash_pull_requests_spec.rb +132 -0
- data/spec/cc/service_spec.rb +78 -0
- data/{test → spec}/fixtures.rb +3 -4
- data/spec/spec_helper.rb +37 -0
- data/{test → spec}/support/fake_logger.rb +0 -0
- data/spec/support/service_context.rb +42 -0
- metadata +57 -52
- data/test/axiom/types/password_test.rb +0 -22
- data/test/formatters/snapshot_formatter_test.rb +0 -47
- data/test/github_pull_requests_test.rb +0 -217
- data/test/helper.rb +0 -58
- data/test/invocation_error_handling_test.rb +0 -51
- data/test/invocation_return_values_test.rb +0 -21
- data/test/pivotal_tracker_test.rb +0 -73
- data/test/presenters/pull_requests_presenter_test.rb +0 -70
- data/test/service_test.rb +0 -84
- data/test/stash_pull_requests_test.rb +0 -146
- data/test/with_metrics_test.rb +0 -19
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
require "helper"
|
|
2
|
-
require "cc/presenters/pull_requests_presenter"
|
|
3
|
-
|
|
4
|
-
class TestPullRequestsPresenter < CC::Service::TestCase
|
|
5
|
-
def test_message_singular
|
|
6
|
-
assert_equal(
|
|
7
|
-
"Code Climate found 1 new issue and 1 fixed issue.",
|
|
8
|
-
build_presenter("fixed" => 1, "new" => 1).success_message
|
|
9
|
-
)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def test_message_plural
|
|
13
|
-
assert_equal(
|
|
14
|
-
"Code Climate found 2 new issues and 1 fixed issue.",
|
|
15
|
-
build_presenter("fixed" => 1, "new" => 2).success_message
|
|
16
|
-
)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_message_only_fixed
|
|
20
|
-
assert_equal(
|
|
21
|
-
"Code Climate found 1 fixed issue.",
|
|
22
|
-
build_presenter("fixed" => 1, "new" => 0).success_message
|
|
23
|
-
)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def test_message_only_new
|
|
27
|
-
assert_equal(
|
|
28
|
-
"Code Climate found 3 new issues.",
|
|
29
|
-
build_presenter("fixed" => 0, "new" => 3).success_message
|
|
30
|
-
)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def test_message_no_new_or_fixed
|
|
34
|
-
assert_equal(
|
|
35
|
-
"Code Climate didn't find any new or fixed issues.",
|
|
36
|
-
build_presenter("fixed" => 0, "new" => 0).success_message
|
|
37
|
-
)
|
|
38
|
-
end
|
|
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
|
-
|
|
61
|
-
private
|
|
62
|
-
|
|
63
|
-
def build_payload(issue_counts)
|
|
64
|
-
{ "issue_comparison_counts" => issue_counts }
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def build_presenter(issue_counts, payload = {})
|
|
68
|
-
CC::Service::PullRequestsPresenter.new(build_payload(issue_counts).merge(payload))
|
|
69
|
-
end
|
|
70
|
-
end
|
data/test/service_test.rb
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
require File.expand_path("../helper", __FILE__)
|
|
2
|
-
|
|
3
|
-
class TestService < CC::Service::TestCase
|
|
4
|
-
def test_validates_events
|
|
5
|
-
assert_raises(ArgumentError) do
|
|
6
|
-
CC::Service.new(:foo, {}, {}, {})
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def test_default_path_to_ca_file
|
|
11
|
-
s = CC::Service.new({}, {name: "test"})
|
|
12
|
-
assert_equal(File.expand_path("../../config/cacert.pem", __FILE__), s.ca_file)
|
|
13
|
-
assert File.exist?(s.ca_file)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def test_custom_path_to_ca_file
|
|
17
|
-
ENV["CODECLIMATE_CA_FILE"] = "/tmp/cacert.pem"
|
|
18
|
-
s = CC::Service.new({}, {name: "test"})
|
|
19
|
-
assert_equal("/tmp/cacert.pem", s.ca_file)
|
|
20
|
-
ensure
|
|
21
|
-
ENV.delete("CODECLIMATE_CA_FILE")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def test_nothing_has_a_handler
|
|
25
|
-
service = CC::Service.new({}, {name: "test"})
|
|
26
|
-
|
|
27
|
-
result = service.receive
|
|
28
|
-
|
|
29
|
-
assert_equal false, result[:ok]
|
|
30
|
-
assert_true true, result[:ignored]
|
|
31
|
-
assert_equal "No service handler found", result[:message]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def test_post_success
|
|
35
|
-
stub_http("/my/test/url", [200, {}, '{"ok": true, "thing": "123"}'])
|
|
36
|
-
|
|
37
|
-
response = service_post("/my/test/url", {token: "1234"}.to_json, {}) do |inner_response|
|
|
38
|
-
body = JSON.parse(inner_response.body)
|
|
39
|
-
{ thing: body["thing"] }
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
assert_true response[:ok]
|
|
43
|
-
assert_equal '{"token":"1234"}', response[:params]
|
|
44
|
-
assert_equal "/my/test/url", response[:endpoint_url]
|
|
45
|
-
assert_equal 200, response[:status]
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_post_redirect_success
|
|
49
|
-
stub_http("/my/test/url", [307, {"Location" => "/my/redirect/url"}, '{"ok": false, "redirect": true}'])
|
|
50
|
-
stub_http("/my/redirect/url", [200, {}, '{"ok": true, "thing": "123"}'])
|
|
51
|
-
|
|
52
|
-
response = service_post_with_redirects("/my/test/url", {token: "1234"}.to_json, {}) do |inner_response|
|
|
53
|
-
body = JSON.parse(inner_response.body)
|
|
54
|
-
{ thing: body["thing"] }
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
assert_true response[:ok]
|
|
58
|
-
assert_equal '{"token":"1234"}', response[:params]
|
|
59
|
-
assert_equal "/my/test/url", response[:endpoint_url]
|
|
60
|
-
assert_equal 200, response[:status]
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def test_post_http_failure
|
|
64
|
-
stub_http("/my/wrong/url", [404, {}, ""])
|
|
65
|
-
|
|
66
|
-
assert_raises(CC::Service::HTTPError) do
|
|
67
|
-
service_post("/my/wrong/url", {token: "1234"}.to_json, {})
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def test_post_some_other_failure
|
|
72
|
-
stub_http("/my/wrong/url"){ raise ArgumentError.new("lol") }
|
|
73
|
-
|
|
74
|
-
assert_raises(ArgumentError) do
|
|
75
|
-
service_post("/my/wrong/url", {token: "1234"}.to_json, {})
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def test_services
|
|
80
|
-
services = CC::Service.services
|
|
81
|
-
|
|
82
|
-
assert !services.include?(CC::PullRequests)
|
|
83
|
-
end
|
|
84
|
-
end
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
require File.expand_path('../helper', __FILE__)
|
|
2
|
-
|
|
3
|
-
class TestStashPullRequests < CC::Service::TestCase
|
|
4
|
-
def test_receive_test
|
|
5
|
-
@stubs.get "/rest/api/1.0/users" do
|
|
6
|
-
[200, {}, "{ 'values': [] }"]
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
response = receive_test
|
|
10
|
-
|
|
11
|
-
assert_equal({ ok: true, message: "Test succeeded" }, response)
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def test_failed_receive_test
|
|
15
|
-
@stubs.get "/rest/api/1.0/users" do
|
|
16
|
-
[401, {}, ""]
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
response = receive_test
|
|
20
|
-
|
|
21
|
-
assert_equal({ ok: false, message: "API request unsuccessful (401)" }, response)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def test_pull_request_status_pending
|
|
25
|
-
expect_status_update("abc123", {
|
|
26
|
-
"state" => "INPROGRESS",
|
|
27
|
-
"description" => /is analyzing/,
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
receive_pull_request(
|
|
31
|
-
commit_sha: "abc123",
|
|
32
|
-
state: "pending",
|
|
33
|
-
)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def test_pull_request_status_success_detailed
|
|
37
|
-
expect_status_update("abc123", {
|
|
38
|
-
"state" => "SUCCESSFUL",
|
|
39
|
-
"description" => "Code Climate found 2 new issues and 1 fixed issue.",
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
receive_pull_request(
|
|
43
|
-
commit_sha: "abc123",
|
|
44
|
-
state: "success",
|
|
45
|
-
)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_pull_request_status_failure
|
|
49
|
-
expect_status_update("abc123", {
|
|
50
|
-
"state" => "FAILED",
|
|
51
|
-
"description" => "Code Climate found 2 new issues and 1 fixed issue.",
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
receive_pull_request(
|
|
55
|
-
commit_sha: "abc123",
|
|
56
|
-
state: "failure"
|
|
57
|
-
)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
def test_pull_request_status_error
|
|
61
|
-
expect_status_update("abc123", {
|
|
62
|
-
"state" => "FAILED",
|
|
63
|
-
"description" => "Code Climate encountered an error attempting to analyze this pull request."
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
receive_pull_request(
|
|
67
|
-
commit_sha: "abc123",
|
|
68
|
-
state: "error"
|
|
69
|
-
)
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def test_pull_request_status_error_message_provided
|
|
73
|
-
message = "Everything broke."
|
|
74
|
-
|
|
75
|
-
expect_status_update("abc123", {
|
|
76
|
-
"state" => "FAILED",
|
|
77
|
-
"description" => message
|
|
78
|
-
})
|
|
79
|
-
|
|
80
|
-
receive_pull_request(
|
|
81
|
-
commit_sha: "abc123",
|
|
82
|
-
message: message,
|
|
83
|
-
state: "error"
|
|
84
|
-
)
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def test_pull_request_status_skipped
|
|
88
|
-
expect_status_update("abc123", {
|
|
89
|
-
"state" => "SUCCESSFUL",
|
|
90
|
-
"description" => "Code Climate has skipped analysis of this commit."
|
|
91
|
-
})
|
|
92
|
-
|
|
93
|
-
receive_pull_request(
|
|
94
|
-
commit_sha: "abc123",
|
|
95
|
-
state: "skipped",
|
|
96
|
-
)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def test_failed_receive_pull_request
|
|
100
|
-
commit_sha = "abc123"
|
|
101
|
-
|
|
102
|
-
@stubs.post("/rest/build-status/1.0/commits/#{commit_sha}") do
|
|
103
|
-
[401, {}, ""]
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
assert_raises(CC::Service::HTTPError) do
|
|
107
|
-
receive_pull_request(
|
|
108
|
-
commit_sha: "abc123",
|
|
109
|
-
state: "success",
|
|
110
|
-
)
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
private
|
|
115
|
-
|
|
116
|
-
def expect_status_update(commit_sha, params)
|
|
117
|
-
@stubs.post("/rest/build-status/1.0/commits/#{commit_sha}") do |env|
|
|
118
|
-
body = JSON.parse(env[:body])
|
|
119
|
-
|
|
120
|
-
params.each do |k, v|
|
|
121
|
-
assert v === body[k],
|
|
122
|
-
"Unexpected value for #{k}. #{v.inspect} !== #{body[k].inspect}"
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def default_config
|
|
128
|
-
{ domain: "example.com", username: "zaphod", password: "g4rgl3bl4st3r" }
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def receive_pull_request(event_data, config = {})
|
|
132
|
-
receive(
|
|
133
|
-
CC::Service::StashPullRequests,
|
|
134
|
-
default_config.merge(config),
|
|
135
|
-
{ name: "pull_request", issue_comparison_counts: {'fixed' => 1, 'new' => 2} }.merge(event_data)
|
|
136
|
-
)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def receive_test(config = {}, event_data = {})
|
|
140
|
-
receive(
|
|
141
|
-
CC::Service::StashPullRequests,
|
|
142
|
-
default_config.merge(config),
|
|
143
|
-
{ name: "test" }.merge(event_data)
|
|
144
|
-
)
|
|
145
|
-
end
|
|
146
|
-
end
|
data/test/with_metrics_test.rb
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
|
-
|
|
3
|
-
require File.expand_path('../helper', __FILE__)
|
|
4
|
-
|
|
5
|
-
class WithMetrics < CC::Service::TestCase
|
|
6
|
-
|
|
7
|
-
class FakeInvocation
|
|
8
|
-
def call
|
|
9
|
-
raise CC::Service::HTTPError.new("Whoa", {})
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_statsd_error_key
|
|
14
|
-
statsd = Object.new
|
|
15
|
-
statsd.stubs(:timing)
|
|
16
|
-
statsd.expects("increment").with("services.errors.githubpullrequests.cc-service-http_error")
|
|
17
|
-
CC::Service::Invocation::WithMetrics.new(FakeInvocation.new, statsd, "githubpullrequests").call rescue CC::Service::HTTPError
|
|
18
|
-
end
|
|
19
|
-
end
|