codeclimate-services 0.3.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 +7 -0
- data/.gitignore +17 -0
- data/.ruby-version +1 -0
- data/.travis.yml +13 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +121 -0
- data/Rakefile +11 -0
- data/bin/bundler +16 -0
- data/bin/coderay +16 -0
- data/bin/nokogiri +16 -0
- data/bin/pry +16 -0
- data/bin/rake +16 -0
- data/codeclimate-services.gemspec +29 -0
- data/config/cacert.pem +4026 -0
- data/config/load.rb +4 -0
- data/lib/axiom/types/password.rb +7 -0
- data/lib/cc/formatters/linked_formatter.rb +60 -0
- data/lib/cc/formatters/plain_formatter.rb +36 -0
- data/lib/cc/formatters/snapshot_formatter.rb +101 -0
- data/lib/cc/formatters/ticket_formatter.rb +27 -0
- data/lib/cc/helpers/coverage_helper.rb +25 -0
- data/lib/cc/helpers/issue_helper.rb +9 -0
- data/lib/cc/helpers/quality_helper.rb +44 -0
- data/lib/cc/helpers/vulnerability_helper.rb +31 -0
- data/lib/cc/presenters/github_pull_requests_presenter.rb +54 -0
- data/lib/cc/service/config.rb +4 -0
- data/lib/cc/service/formatter.rb +34 -0
- data/lib/cc/service/helper.rb +54 -0
- data/lib/cc/service/http.rb +87 -0
- data/lib/cc/service/invocation/invocation_chain.rb +15 -0
- data/lib/cc/service/invocation/with_error_handling.rb +45 -0
- data/lib/cc/service/invocation/with_metrics.rb +37 -0
- data/lib/cc/service/invocation/with_retries.rb +17 -0
- data/lib/cc/service/invocation/with_return_values.rb +18 -0
- data/lib/cc/service/invocation.rb +57 -0
- data/lib/cc/service/response_check.rb +42 -0
- data/lib/cc/service.rb +127 -0
- data/lib/cc/services/asana.rb +90 -0
- data/lib/cc/services/campfire.rb +55 -0
- data/lib/cc/services/flowdock.rb +61 -0
- data/lib/cc/services/github_issues.rb +80 -0
- data/lib/cc/services/github_pull_requests.rb +210 -0
- data/lib/cc/services/hipchat.rb +57 -0
- data/lib/cc/services/jira.rb +93 -0
- data/lib/cc/services/lighthouse.rb +79 -0
- data/lib/cc/services/pivotal_tracker.rb +78 -0
- data/lib/cc/services/slack.rb +124 -0
- data/lib/cc/services/version.rb +5 -0
- data/lib/cc/services.rb +9 -0
- data/pull_request_test.rb +47 -0
- data/service_test.rb +86 -0
- data/test/asana_test.rb +85 -0
- data/test/axiom/types/password_test.rb +22 -0
- data/test/campfire_test.rb +144 -0
- data/test/fixtures.rb +68 -0
- data/test/flowdock_test.rb +148 -0
- data/test/formatters/snapshot_formatter_test.rb +47 -0
- data/test/github_issues_test.rb +96 -0
- data/test/github_pull_requests_test.rb +293 -0
- data/test/helper.rb +50 -0
- data/test/hipchat_test.rb +130 -0
- data/test/invocation_error_handling_test.rb +51 -0
- data/test/invocation_return_values_test.rb +21 -0
- data/test/invocation_test.rb +167 -0
- data/test/jira_test.rb +80 -0
- data/test/lighthouse_test.rb +74 -0
- data/test/pivotal_tracker_test.rb +73 -0
- data/test/presenters/github_pull_requests_presenter_test.rb +49 -0
- data/test/service_test.rb +63 -0
- data/test/slack_test.rb +222 -0
- data/test/support/fake_logger.rb +11 -0
- data/test/with_metrics_test.rb +19 -0
- metadata +263 -0
@@ -0,0 +1,167 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class TestInvocation < Test::Unit::TestCase
|
4
|
+
def test_success
|
5
|
+
service = FakeService.new(:some_result)
|
6
|
+
|
7
|
+
result = CC::Service::Invocation.invoke(service)
|
8
|
+
|
9
|
+
assert_equal 1, service.receive_count
|
10
|
+
assert_equal :some_result, result
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_success_with_return_values
|
14
|
+
service = FakeService.new(:some_result)
|
15
|
+
|
16
|
+
result = CC::Service::Invocation.invoke(service) do |i|
|
17
|
+
i.with :return_values, "error"
|
18
|
+
end
|
19
|
+
|
20
|
+
assert_equal 1, service.receive_count
|
21
|
+
assert_equal :some_result, result
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_failure_with_return_values
|
25
|
+
service = FakeService.new(nil)
|
26
|
+
|
27
|
+
result = CC::Service::Invocation.invoke(service) do |i|
|
28
|
+
i.with :return_values, "error"
|
29
|
+
end
|
30
|
+
|
31
|
+
assert_equal 1, service.receive_count
|
32
|
+
assert_equal( {ok: false, message: "error"}, result )
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_retries
|
36
|
+
service = FakeService.new
|
37
|
+
service.fake_error = RuntimeError.new
|
38
|
+
error_occurred = false
|
39
|
+
|
40
|
+
begin
|
41
|
+
CC::Service::Invocation.invoke(service) do |i|
|
42
|
+
i.with :retries, 3
|
43
|
+
end
|
44
|
+
rescue
|
45
|
+
error_occurred = true
|
46
|
+
end
|
47
|
+
|
48
|
+
assert error_occurred
|
49
|
+
assert_equal 1 + 3, service.receive_count
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_metrics
|
53
|
+
statsd = FakeStatsd.new
|
54
|
+
|
55
|
+
CC::Service::Invocation.invoke(FakeService.new) do |i|
|
56
|
+
i.with :metrics, statsd, "a_prefix"
|
57
|
+
end
|
58
|
+
|
59
|
+
assert_equal 1, statsd.incremented_keys.length
|
60
|
+
assert_equal "services.invocations.a_prefix", statsd.incremented_keys.first
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_metrics_on_errors
|
64
|
+
statsd = FakeStatsd.new
|
65
|
+
service = FakeService.new
|
66
|
+
service.fake_error = RuntimeError.new
|
67
|
+
error_occurred = false
|
68
|
+
|
69
|
+
begin
|
70
|
+
CC::Service::Invocation.invoke(service) do |i|
|
71
|
+
i.with :metrics, statsd, "a_prefix"
|
72
|
+
end
|
73
|
+
rescue
|
74
|
+
error_occurred = true
|
75
|
+
end
|
76
|
+
|
77
|
+
assert error_occurred
|
78
|
+
assert_equal 1, statsd.incremented_keys.length
|
79
|
+
assert_match /^services\.errors\.a_prefix/, statsd.incremented_keys.first
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_user_message
|
83
|
+
service = FakeService.new
|
84
|
+
service.fake_error = CC::Service::HTTPError.new("Boom", {})
|
85
|
+
service.override_user_message = "Hey do this"
|
86
|
+
logger = FakeLogger.new
|
87
|
+
|
88
|
+
result = CC::Service::Invocation.invoke(service) do |i|
|
89
|
+
i.with :error_handling, logger, "a_prefix"
|
90
|
+
end
|
91
|
+
|
92
|
+
assert_equal "Hey do this", result[:message]
|
93
|
+
assert_match /Boom/, result[:log_message]
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_error_handling
|
97
|
+
service = FakeService.new
|
98
|
+
service.fake_error = RuntimeError.new("Boom")
|
99
|
+
logger = FakeLogger.new
|
100
|
+
|
101
|
+
result = CC::Service::Invocation.invoke(service) do |i|
|
102
|
+
i.with :error_handling, logger, "a_prefix"
|
103
|
+
end
|
104
|
+
|
105
|
+
assert_equal({ok: false, message: "Boom", log_message: "Exception invoking service: [a_prefix] (RuntimeError) Boom"}, result)
|
106
|
+
assert_equal 1, logger.logged_errors.length
|
107
|
+
assert_match /^Exception invoking service: \[a_prefix\]/, logger.logged_errors.first
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_multiple_middleware
|
111
|
+
service = FakeService.new
|
112
|
+
service.fake_error = RuntimeError.new("Boom")
|
113
|
+
logger = FakeLogger.new
|
114
|
+
|
115
|
+
result = CC::Service::Invocation.invoke(service) do |i|
|
116
|
+
i.with :retries, 3
|
117
|
+
i.with :error_handling, logger
|
118
|
+
end
|
119
|
+
|
120
|
+
assert_equal({ok: false, message: "Boom", log_message: "Exception invoking service: (RuntimeError) Boom"}, result)
|
121
|
+
assert_equal 1 + 3, service.receive_count
|
122
|
+
assert_equal 1, logger.logged_errors.length
|
123
|
+
end
|
124
|
+
|
125
|
+
private
|
126
|
+
|
127
|
+
class FakeService
|
128
|
+
attr_reader :receive_count
|
129
|
+
attr_accessor :fake_error, :override_user_message
|
130
|
+
|
131
|
+
def initialize(result = nil)
|
132
|
+
@result = result
|
133
|
+
@receive_count = 0
|
134
|
+
end
|
135
|
+
|
136
|
+
def receive
|
137
|
+
@receive_count += 1
|
138
|
+
|
139
|
+
begin
|
140
|
+
raise @fake_error if @fake_error
|
141
|
+
rescue => e
|
142
|
+
if override_user_message
|
143
|
+
e.user_message = override_user_message
|
144
|
+
end
|
145
|
+
raise e
|
146
|
+
end
|
147
|
+
|
148
|
+
@result
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
class FakeStatsd
|
153
|
+
attr_reader :incremented_keys
|
154
|
+
|
155
|
+
def initialize
|
156
|
+
@incremented_keys = Set.new
|
157
|
+
end
|
158
|
+
|
159
|
+
def increment(key)
|
160
|
+
@incremented_keys << key
|
161
|
+
end
|
162
|
+
|
163
|
+
def timing(key, value)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
data/test/jira_test.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class TestJira < CC::Service::TestCase
|
4
|
+
def test_successful_receive
|
5
|
+
response = assert_jira_receives(
|
6
|
+
event(:quality, to: "D", from: "C"),
|
7
|
+
"Refactor User from a D on Code Climate",
|
8
|
+
"https://codeclimate.com/repos/1/feed"
|
9
|
+
)
|
10
|
+
assert_equal "10000", response[:id]
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_quality
|
14
|
+
assert_jira_receives(
|
15
|
+
event(:quality, to: "D", from: "C"),
|
16
|
+
"Refactor User from a D on Code Climate",
|
17
|
+
"https://codeclimate.com/repos/1/feed"
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_vulnerability
|
22
|
+
assert_jira_receives(
|
23
|
+
event(:vulnerability, vulnerabilities: [{
|
24
|
+
"warning_type" => "critical",
|
25
|
+
"location" => "app/user.rb line 120"
|
26
|
+
}]),
|
27
|
+
"New critical issue found in app/user.rb line 120",
|
28
|
+
"A critical vulnerability was found by Code Climate in app/user.rb line 120.\n\nhttps://codeclimate.com/repos/1/feed"
|
29
|
+
)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_issue
|
33
|
+
payload = {
|
34
|
+
issue: {
|
35
|
+
"check_name" => "Style/LongLine",
|
36
|
+
"description" => "Line is too long [1000/80]"
|
37
|
+
},
|
38
|
+
constant_name: "foo.rb",
|
39
|
+
details_url: "http://example.com/repos/id/foo.rb#issue_123"
|
40
|
+
}
|
41
|
+
|
42
|
+
assert_jira_receives(
|
43
|
+
event(:issue, payload),
|
44
|
+
"Fix \"Style/LongLine\" issue in foo.rb",
|
45
|
+
"Line is too long [1000/80]\n\nhttp://example.com/repos/id/foo.rb#issue_123"
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_receive_test
|
50
|
+
@stubs.post '/rest/api/2/issue' do |env|
|
51
|
+
[200, {}, '{"id": 12345, "key": "CC-123", "self": "http://foo.bar"}']
|
52
|
+
end
|
53
|
+
|
54
|
+
response = receive_event(name: "test")
|
55
|
+
|
56
|
+
assert_equal "Ticket <a href='http://foo.bar'>12345</a> created.", response[:message]
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def assert_jira_receives(event_data, title, ticket_body)
|
62
|
+
@stubs.post '/rest/api/2/issue' do |env|
|
63
|
+
body = JSON.parse(env[:body])
|
64
|
+
assert_equal "Basic Zm9vOmJhcg==", env[:request_headers]["Authorization"]
|
65
|
+
assert_equal title, body["fields"]["summary"]
|
66
|
+
assert_equal ticket_body, body["fields"]["description"]
|
67
|
+
[200, {}, '{"id":"10000"}']
|
68
|
+
end
|
69
|
+
|
70
|
+
receive_event(event_data)
|
71
|
+
end
|
72
|
+
|
73
|
+
def receive_event(event_data = nil)
|
74
|
+
receive(
|
75
|
+
CC::Service::Jira,
|
76
|
+
{ domain: "foo.com", username: "foo", password: "bar", project_id: "100" },
|
77
|
+
event_data || event(:quality, from: "C", to: "D")
|
78
|
+
)
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class TestLighthouse < CC::Service::TestCase
|
4
|
+
def test_quality
|
5
|
+
response = assert_lighthouse_receives(
|
6
|
+
event(:quality, to: "D", from: "C"),
|
7
|
+
"Refactor User from a D on Code Climate",
|
8
|
+
"https://codeclimate.com/repos/1/feed"
|
9
|
+
)
|
10
|
+
assert_equal "123", response[:id]
|
11
|
+
assert_equal "http://lighthouse.com/projects/123/tickets/123.json",
|
12
|
+
response[:url]
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_vulnerability
|
16
|
+
assert_lighthouse_receives(
|
17
|
+
event(:vulnerability, vulnerabilities: [{
|
18
|
+
"warning_type" => "critical",
|
19
|
+
"location" => "app/user.rb line 120"
|
20
|
+
}]),
|
21
|
+
"New critical issue found in app/user.rb line 120",
|
22
|
+
"A critical vulnerability was found by Code Climate in app/user.rb line 120.\n\nhttps://codeclimate.com/repos/1/feed"
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_issue
|
27
|
+
payload = {
|
28
|
+
issue: {
|
29
|
+
"check_name" => "Style/LongLine",
|
30
|
+
"description" => "Line is too long [1000/80]"
|
31
|
+
},
|
32
|
+
constant_name: "foo.rb",
|
33
|
+
details_url: "http://example.com/repos/id/foo.rb#issue_123"
|
34
|
+
}
|
35
|
+
|
36
|
+
assert_lighthouse_receives(
|
37
|
+
event(:issue, payload),
|
38
|
+
"Fix \"Style/LongLine\" issue in foo.rb",
|
39
|
+
"Line is too long [1000/80]\n\nhttp://example.com/repos/id/foo.rb#issue_123"
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_receive_test
|
44
|
+
@stubs.post 'projects/123/tickets.json' do |env|
|
45
|
+
[200, {}, '{"ticket":{"number": "123", "url":"http://foo.bar"}}']
|
46
|
+
end
|
47
|
+
|
48
|
+
response = receive_event(name: "test")
|
49
|
+
|
50
|
+
assert_equal "Ticket <a href='http://foo.bar'>123</a> created.", response[:message]
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def assert_lighthouse_receives(event_data, title, ticket_body)
|
56
|
+
@stubs.post 'projects/123/tickets.json' do |env|
|
57
|
+
body = JSON.parse(env[:body])
|
58
|
+
assert_equal "token", env[:request_headers]["X-LighthouseToken"]
|
59
|
+
assert_equal title, body["ticket"]["title"]
|
60
|
+
assert_equal ticket_body, body["ticket"]["body"]
|
61
|
+
[200, {}, '{"ticket":{"number": "123", "url":"http://lighthouse.com/projects/123/tickets/123.json"}}']
|
62
|
+
end
|
63
|
+
|
64
|
+
receive_event(event_data)
|
65
|
+
end
|
66
|
+
|
67
|
+
def receive_event(event_data = nil)
|
68
|
+
receive(
|
69
|
+
CC::Service::Lighthouse,
|
70
|
+
{ subdomain: "foo", api_token: "token", project_id: "123" },
|
71
|
+
event_data || event(:quality, from: "C", to: "D")
|
72
|
+
)
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class TestPivotalTracker < CC::Service::TestCase
|
4
|
+
def test_quality
|
5
|
+
response = assert_pivotal_receives(
|
6
|
+
event(:quality, to: "D", from: "C"),
|
7
|
+
"Refactor User from a D on Code Climate",
|
8
|
+
"https://codeclimate.com/repos/1/feed"
|
9
|
+
)
|
10
|
+
assert_equal "123", response[:id]
|
11
|
+
assert_equal "http://pivotaltracker.com/n/projects/123/stories/123",
|
12
|
+
response[:url]
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_vulnerability
|
16
|
+
assert_pivotal_receives(
|
17
|
+
event(:vulnerability, vulnerabilities: [{
|
18
|
+
"warning_type" => "critical",
|
19
|
+
"location" => "app/user.rb line 120"
|
20
|
+
}]),
|
21
|
+
"New critical issue found in app/user.rb line 120",
|
22
|
+
"A critical vulnerability was found by Code Climate in app/user.rb line 120.\n\nhttps://codeclimate.com/repos/1/feed"
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_issue
|
27
|
+
payload = {
|
28
|
+
issue: {
|
29
|
+
"check_name" => "Style/LongLine",
|
30
|
+
"description" => "Line is too long [1000/80]"
|
31
|
+
},
|
32
|
+
constant_name: "foo.rb",
|
33
|
+
details_url: "http://example.com/repos/id/foo.rb#issue_123"
|
34
|
+
}
|
35
|
+
|
36
|
+
assert_pivotal_receives(
|
37
|
+
event(:issue, payload),
|
38
|
+
"Fix \"Style/LongLine\" issue in foo.rb",
|
39
|
+
"Line is too long [1000/80]\n\nhttp://example.com/repos/id/foo.rb#issue_123"
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_receive_test
|
44
|
+
@stubs.post 'services/v3/projects/123/stories' do |env|
|
45
|
+
[200, {}, '<story><id>123</id><url>http://foo.bar</url></story>']
|
46
|
+
end
|
47
|
+
|
48
|
+
response = receive_event(name: "test")
|
49
|
+
|
50
|
+
assert_equal "Ticket <a href='http://foo.bar'>123</a> created.", response[:message]
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def assert_pivotal_receives(event_data, name, description)
|
56
|
+
@stubs.post 'services/v3/projects/123/stories' do |env|
|
57
|
+
body = Hash[URI.decode_www_form(env[:body])]
|
58
|
+
assert_equal "token", env[:request_headers]["X-TrackerToken"]
|
59
|
+
assert_equal name, body["story[name]"]
|
60
|
+
assert_equal description, body["story[description]"]
|
61
|
+
[200, {}, '<doc><story><id>123</id><url>http://pivotaltracker.com/n/projects/123/stories/123</url></story></doc>']
|
62
|
+
end
|
63
|
+
receive_event(event_data)
|
64
|
+
end
|
65
|
+
|
66
|
+
def receive_event(event_data = nil)
|
67
|
+
receive(
|
68
|
+
CC::Service::PivotalTracker,
|
69
|
+
{ api_token: "token", project_id: "123" },
|
70
|
+
event_data || event(:quality, from: "C", to: "D")
|
71
|
+
)
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "helper"
|
2
|
+
require "cc/presenters/github_pull_requests_presenter"
|
3
|
+
|
4
|
+
class TestGitHubPullRequestsPresenter < 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
|
+
private
|
41
|
+
|
42
|
+
def build_payload(issue_counts)
|
43
|
+
{ "issue_comparison_counts" => issue_counts }
|
44
|
+
end
|
45
|
+
|
46
|
+
def build_presenter(issue_counts)
|
47
|
+
CC::Service::GitHubPullRequestsPresenter.new(build_payload(issue_counts))
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,63 @@
|
|
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 |response|
|
38
|
+
body = JSON.parse(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_http_failure
|
49
|
+
stub_http("/my/wrong/url", [404, {}, ""])
|
50
|
+
|
51
|
+
assert_raises(CC::Service::HTTPError) do
|
52
|
+
service_post("/my/wrong/url", {token: "1234"}.to_json, {})
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_post_some_other_failure
|
57
|
+
stub_http("/my/wrong/url"){ raise ArgumentError.new("lol") }
|
58
|
+
|
59
|
+
assert_raises(ArgumentError) do
|
60
|
+
service_post("/my/wrong/url", {token: "1234"}.to_json, {})
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|