diff --git a/lib/cc/services/slack.rb b/lib/cc/services/slack.rb index 6ac0576..3a07d43 100644 --- a/lib/cc/services/slack.rb +++ b/lib/cc/services/slack.rb @@ -1,6 +1,6 @@ class CC::Service::Slack < CC::Service class Config < CC::Service::Config - attribute :url, String, + attribute :webhook_url, String, label: "Webhook URL", description: "The Slack webhook URL you would like message posted to" @@ -42,6 +42,7 @@ def speak(message, options = {}) body[:channel] = config.channel end - http_post(config.url, body) + http.headers['Content-Type'] = 'application/json' + http_post(config.webhook_url, body.to_json) end end diff --git a/service_test.rb b/service_test.rb new file mode 100755 index 0000000..827c43d --- /dev/null +++ b/service_test.rb @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby +# +# Ad-hoc script for sending the test event to service classes +# +### +require 'cc/services' +CC::Service.load_services + +def test_service(klass, config) + service = klass.new(:test, config, { repo_name: "Example" }) + service.receive +end + +test_service(CC::Service::Slack, { + webhook_url: "...", + channel: "..." +}) diff --git a/test/slack_test.rb b/test/slack_test.rb index f377cbe..c4a93b1 100644 --- a/test/slack_test.rb +++ b/test/slack_test.rb @@ -99,7 +99,7 @@ def test_multiple_vulnerabilities def assert_slack_receives(event_name, emoji, event_data, expected_body) @stubs.post '/token' do |env| - body = Hash[URI.decode_www_form(env[:body])] + body = JSON.parse(env[:body]) assert_equal "Code Climate", body["username"] assert_equal emoji, body["icon_emoji"] # may be nil assert_equal expected_body, body["text"] @@ -109,7 +109,7 @@ def assert_slack_receives(event_name, emoji, event_data, expected_body) receive( CC::Service::Slack, event_name, - { url: "http://api.slack.com/token", channel: "#general" }, + { webhook_url: "http://api.slack.com/token", channel: "#general" }, event_data ) end