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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -0
  3. data/.rubocop.yml +1 -0
  4. data/Gemfile +1 -2
  5. data/Rakefile +4 -7
  6. data/base_rubocop.yml +152 -0
  7. data/bin/bundler +5 -5
  8. data/bin/coderay +5 -5
  9. data/bin/nokogiri +5 -5
  10. data/bin/pry +5 -5
  11. data/bin/rake +5 -5
  12. data/codeclimate-services.gemspec +15 -15
  13. data/config/load.rb +2 -2
  14. data/lib/cc/formatters/linked_formatter.rb +2 -2
  15. data/lib/cc/formatters/snapshot_formatter.rb +10 -10
  16. data/lib/cc/formatters/ticket_formatter.rb +0 -2
  17. data/lib/cc/helpers/quality_helper.rb +2 -2
  18. data/lib/cc/helpers/vulnerability_helper.rb +0 -2
  19. data/lib/cc/presenters/pull_requests_presenter.rb +1 -5
  20. data/lib/cc/pull_requests.rb +7 -3
  21. data/lib/cc/service.rb +9 -10
  22. data/lib/cc/service/formatter.rb +3 -3
  23. data/lib/cc/service/helper.rb +2 -3
  24. data/lib/cc/service/http.rb +9 -9
  25. data/lib/cc/service/invocation.rb +6 -6
  26. data/lib/cc/service/invocation/with_error_handling.rb +9 -8
  27. data/lib/cc/service/invocation/with_metrics.rb +4 -4
  28. data/lib/cc/service/invocation/with_return_values.rb +0 -1
  29. data/lib/cc/service/response_check.rb +4 -5
  30. data/lib/cc/services.rb +2 -2
  31. data/lib/cc/services/asana.rb +8 -9
  32. data/lib/cc/services/campfire.rb +2 -3
  33. data/lib/cc/services/flowdock.rb +5 -5
  34. data/lib/cc/services/github_issues.rb +6 -7
  35. data/lib/cc/services/github_pull_requests.rb +42 -5
  36. data/lib/cc/services/gitlab_merge_requests.rb +6 -2
  37. data/lib/cc/services/hipchat.rb +3 -4
  38. data/lib/cc/services/jira.rb +8 -9
  39. data/lib/cc/services/lighthouse.rb +4 -5
  40. data/lib/cc/services/pivotal_tracker.rb +6 -7
  41. data/lib/cc/services/slack.rb +8 -8
  42. data/lib/cc/services/stash_pull_requests.rb +2 -2
  43. data/lib/cc/services/version.rb +1 -1
  44. data/pull_request_test.rb +11 -10
  45. data/service_test.rb +5 -5
  46. data/spec/axiom/types/password_spec.rb +14 -0
  47. data/spec/cc/formatters/snapshot_formatter_spec.rb +44 -0
  48. data/spec/cc/presenters/pull_requests_presenter_spec.rb +45 -0
  49. data/{test/asana_test.rb → spec/cc/service/asana_spec.rb} +27 -29
  50. data/{test/campfire_test.rb → spec/cc/service/campfire_spec.rb} +40 -44
  51. data/{test/flowdock_test.rb → spec/cc/service/flowdock_spec.rb} +46 -48
  52. data/{test/github_issues_test.rb → spec/cc/service/github_issues_spec.rb} +33 -35
  53. data/spec/cc/service/github_pull_requests_spec.rb +223 -0
  54. data/{test/gitlab_merge_requests_test.rb → spec/cc/service/gitlab_merge_requests_spec.rb} +30 -35
  55. data/{test/hipchat_test.rb → spec/cc/service/hipchat_spec.rb} +38 -40
  56. data/spec/cc/service/invocation/error_handling_spec.rb +49 -0
  57. data/spec/cc/service/invocation/return_values_spec.rb +19 -0
  58. data/spec/cc/service/invocation/with_metrics_spec.rb +18 -0
  59. data/{test/invocation_test.rb → spec/cc/service/invocation_spec.rb} +31 -34
  60. data/{test/jira_test.rb → spec/cc/service/jira_spec.rb} +25 -27
  61. data/{test/lighthouse_test.rb → spec/cc/service/lighthouse_spec.rb} +23 -26
  62. data/spec/cc/service/pivotal_tracker_spec.rb +70 -0
  63. data/{test/slack_test.rb → spec/cc/service/slack_spec.rb} +66 -77
  64. data/spec/cc/service/stash_pull_requests_spec.rb +132 -0
  65. data/spec/cc/service_spec.rb +78 -0
  66. data/{test → spec}/fixtures.rb +3 -4
  67. data/spec/spec_helper.rb +37 -0
  68. data/{test → spec}/support/fake_logger.rb +0 -0
  69. data/spec/support/service_context.rb +42 -0
  70. metadata +57 -52
  71. data/test/axiom/types/password_test.rb +0 -22
  72. data/test/formatters/snapshot_formatter_test.rb +0 -47
  73. data/test/github_pull_requests_test.rb +0 -217
  74. data/test/helper.rb +0 -58
  75. data/test/invocation_error_handling_test.rb +0 -51
  76. data/test/invocation_return_values_test.rb +0 -21
  77. data/test/pivotal_tracker_test.rb +0 -73
  78. data/test/presenters/pull_requests_presenter_test.rb +0 -70
  79. data/test/service_test.rb +0 -84
  80. data/test/stash_pull_requests_test.rb +0 -146
  81. 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
@@ -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