From 4052ace6baa46dcf072df89e818be4f3557c68ba Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Fri, 21 Mar 2014 11:17:59 -0400 Subject: [PATCH 1/8] Implement template_success and template_failure for HipChat --- lib/travis/addons/hipchat/task.rb | 15 +++++++-- spec/travis/addons/hipchat/task_spec.rb | 41 +++++++++++++++++++++---- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/lib/travis/addons/hipchat/task.rb b/lib/travis/addons/hipchat/task.rb index 63e4885ca..913f5b7d1 100644 --- a/lib/travis/addons/hipchat/task.rb +++ b/lib/travis/addons/hipchat/task.rb @@ -43,8 +43,19 @@ def process end def template - template = config[:template] rescue nil - Array(template || DEFAULT_TEMPLATE) + Array(template_for(build[:state]) || DEFAULT_TEMPLATE) + end + + def template_for(state = nil) + if state == 'passed' && config[:template_success] + config[:template_success] + elsif state == 'failed' && config[:template_failure] + config[:template_failure] + else + config[:template] + end + rescue + nil end def color diff --git a/spec/travis/addons/hipchat/task_spec.rb b/spec/travis/addons/hipchat/task_spec.rb index fd38a680a..c35a8e3f3 100644 --- a/spec/travis/addons/hipchat/task_spec.rb +++ b/spec/travis/addons/hipchat/task_spec.rb @@ -50,13 +50,38 @@ def run(targets) http.verify_stubbed_calls end + it 'uses template_success if defined' do + targets = ["#{room_1_token}@room_1"] + template = ['%{repository}', '%{commit}'] + messages = ['svenfuchs/minimal', '62aae5f'] + + payload['build']['config']['notifications'] = { hipchat: { template_success: template } } + expect_hipchat('room_1', room_1_token, messages) + + run(targets) + http.verify_stubbed_calls + end + + it 'uses template_failure if defined for failed build' do + targets = ["#{room_1_token}@room_1"] + template = ['%{repository}', '%{commit}'] + messages = ['svenfuchs/minimal', '62aae5f'] + + payload['build']['config']['notifications'] = { hipchat: { template_failure: template } } + payload['build']['state'] = 'failed' + expect_hipchat('room_1', room_1_token, messages, message_color: 'red') + + run(targets) + http.verify_stubbed_calls + end + it "sends HTML notifications if requested" do targets = ["#{room_1_token}@room_1"] template = ['Details'] messages = ['Details'] payload['build']['config']['notifications'] = { hipchat: { template: template, format: 'html' } } - expect_hipchat('room_1', room_1_token, messages, 'message_format' => 'html') + expect_hipchat('room_1', room_1_token, messages, extra_body: {'message_format' => 'html'}) run(targets) http.verify_stubbed_calls @@ -87,7 +112,7 @@ def run(targets) ] payload["build"]["state"] = "errored" - expect_hipchat("room_1", room_1_token, messages, "color" => "gray") + expect_hipchat("room_1", room_1_token, messages, extra_body: {"color" => "gray"}) run(targets) http.verify_stubbed_calls @@ -101,9 +126,11 @@ def run(targets) end end - def expect_hipchat(room_id, token, lines, extra_body={}) + def expect_hipchat(room_id, token, lines, opts={}) + extra_body = opts[:extra_body] || {} + message_color = opts[:message_color] || 'green' Array(lines).each do |line| - body = { 'room_id' => room_id, 'from' => 'Travis CI', 'message' => line, 'color' => 'green', 'message_format' => 'text' }.merge(extra_body) + body = { 'room_id' => room_id, 'from' => 'Travis CI', 'message' => line, 'color' => message_color, 'message_format' => 'text' }.merge(extra_body) http.post("v1/rooms/message?format=json&auth_token=#{token}") do |env| env[:url].host.should == 'api.hipchat.com' Rack::Utils.parse_query(env[:body]).should == body @@ -111,9 +138,11 @@ def expect_hipchat(room_id, token, lines, extra_body={}) end end - def expect_hipchat_v2(room_id, token, lines, extra_body={}) + def expect_hipchat_v2(room_id, token, lines, opts={}) + extra_body = opts[:extra_body] || {} + message_color = opts[:message_color] || 'green' Array(lines).each do |line| - body = { 'message' => line, 'color' => 'green', 'message_format' => 'text' }.merge(extra_body).to_json + body = { 'message' => line, 'color' => message_color, 'message_format' => 'text' }.merge(extra_body).to_json http.post("https://api.hipchat.com/v2/room/#{URI::encode(room_id, Travis::Addons::Hipchat::HttpHelper::UNSAFE_URL_CHARS)}/notification?auth_token=#{token}") do |env| env[:request_headers]['Content-Type'].should == 'application/json' env[:body].should == body From 0891a33b579133299dffe53f8701a7cea596ff8d Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Fri, 21 Mar 2014 11:26:27 -0400 Subject: [PATCH 2/8] Implement template_success and template_failure for IRC --- lib/travis/addons/irc/task.rb | 14 ++++++- spec/travis/addons/irc/task_spec.rb | 60 +++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/lib/travis/addons/irc/task.rb b/lib/travis/addons/irc/task.rb index 06b70cfba..53013d2ce 100644 --- a/lib/travis/addons/irc/task.rb +++ b/lib/travis/addons/irc/task.rb @@ -76,7 +76,19 @@ def join? end def template - Array(try_config(:template) || DEFAULT_TEMPLATE) + Array(template_for(build[:state]) || DEFAULT_TEMPLATE) + end + + def template_for(state = nil) + if state == 'passed' && config[:template_success] + config[:template_success] + elsif state == 'failed' && config[:template_failure] + config[:template_failure] + else + config[:template] + end + rescue + nil end def client_options(port, ssl) diff --git a/spec/travis/addons/irc/task_spec.rb b/spec/travis/addons/irc/task_spec.rb index 78a518616..c280043a8 100644 --- a/spec/travis/addons/irc/task_spec.rb +++ b/spec/travis/addons/irc/task_spec.rb @@ -91,6 +91,35 @@ def run(channels = nil) run end + it 'with a custom message template_success' do + payload['build']['config']['notifications'] = { irc: { template_success: '%{repository} %{commit}' } } + + expect_irc 'irc.freenode.net', 1234, 'travis', [ + 'NICK travis-ci', + 'USER travis-ci travis-ci travis-ci :travis-ci', + 'JOIN #travis', + 'PRIVMSG #travis :[travis-ci] svenfuchs/minimal 62aae5f', + 'PART #travis', + 'QUIT' + ] + run + end + + it 'with a custom message template_failure for a failed build' do + payload['build']['config']['notifications'] = { irc: { template_failure: '%{repository} %{commit}' } } + payload['build']['state'] = 'failed' + + expect_irc 'irc.freenode.net', 1234, 'travis', [ + 'NICK travis-ci', + 'USER travis-ci travis-ci travis-ci :travis-ci', + 'JOIN #travis', + 'PRIVMSG #travis :[travis-ci] svenfuchs/minimal 62aae5f', + 'PART #travis', + 'QUIT' + ] + run + end + it 'with multiple custom message templates' do payload['build']['config']['notifications'] = { irc: { template: ['%{repository} %{commit}', '%{message}'] } } @@ -106,6 +135,37 @@ def run(channels = nil) run end + it 'with multiple custom message templates for successful build' do + payload['build']['config']['notifications'] = { irc: { template_success: ['%{repository} %{commit}', '%{message}'] } } + + expect_irc 'irc.freenode.net', 1234, 'travis', [ + 'NICK travis-ci', + 'USER travis-ci travis-ci travis-ci :travis-ci', + 'JOIN #travis', + 'PRIVMSG #travis :[travis-ci] svenfuchs/minimal 62aae5f', + 'PRIVMSG #travis :[travis-ci] The build passed.', + 'PART #travis', + 'QUIT' + ] + run + end + + it 'with multiple custom message templates for failed build' do + payload['build']['config']['notifications'] = { irc: { template_failure: ['%{repository} %{commit}', '%{message}'] } } + payload['build']['state'] = 'failed' + + expect_irc 'irc.freenode.net', 1234, 'travis', [ + 'NICK travis-ci', + 'USER travis-ci travis-ci travis-ci :travis-ci', + 'JOIN #travis', + 'PRIVMSG #travis :[travis-ci] svenfuchs/minimal 62aae5f', + 'PRIVMSG #travis :[travis-ci] The build was broken.', + 'PART #travis', + 'QUIT' + ] + run + end + it 'with two irc notifications to different hosts' do [['irc.freenode.net', 1234, 'travis'], ['irc.example.com', 6667, 'example']].each do |host, port, channel| expect_irc host, port, channel, [ From ebd876ef3aacc3d654d65986dfe7fc497864ecd3 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Fri, 21 Mar 2014 11:29:33 -0400 Subject: [PATCH 3/8] Implement template_success and template_failure for Campfire --- lib/travis/addons/campfire/task.rb | 15 ++++++++++++-- spec/travis/addons/campfire/task_spec.rb | 25 ++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/travis/addons/campfire/task.rb b/lib/travis/addons/campfire/task.rb index 0d9d2e7e9..d29030e74 100644 --- a/lib/travis/addons/campfire/task.rb +++ b/lib/travis/addons/campfire/task.rb @@ -43,8 +43,19 @@ def send_line(url, line) end def template - template = config[:template] rescue nil - Array(template || DEFAULT_TEMPLATE) + Array(template_for(build[:state]) || DEFAULT_TEMPLATE) + end + + def template_for(state = nil) + if state == 'passed' && config[:template_success] + config[:template_success] + elsif state == 'failed' && config[:template_failure] + config[:template_failure] + else + config[:template] + end + rescue + nil end def parse(target) diff --git a/spec/travis/addons/campfire/task_spec.rb b/spec/travis/addons/campfire/task_spec.rb index 8045ea356..e01d4799d 100644 --- a/spec/travis/addons/campfire/task_spec.rb +++ b/spec/travis/addons/campfire/task_spec.rb @@ -44,6 +44,31 @@ def run(targets) http.verify_stubbed_calls end + it 'using a custom template_success' do + targets = ['account-1:token-1@1234'] + template = ['%{repository}', '%{commit}'] + messages = ['svenfuchs/minimal', '62aae5f'] + + payload['build']['config']['notifications'] = { campfire: { template_success: template } } + expect_campfire('account-1', '1234', 'token-1', messages) + + run(targets) + http.verify_stubbed_calls + end + + it 'using a custom template_failure' do + targets = ['account-1:token-1@1234'] + template = ['%{repository}', '%{commit}'] + messages = ['svenfuchs/minimal', '62aae5f'] + + payload['build']['config']['notifications'] = { campfire: { template_failure: template } } + payload['build']['state'] = 'failed' + expect_campfire('account-1', '1234', 'token-1', messages) + + run(targets) + http.verify_stubbed_calls + end + def expect_campfire(account, room, token, body) host = "#{account}.campfirenow.com" path = "room/#{room}/speak.json" From ec78d4896b57c94eeb88b8cfc4af14afed8f55a9 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Fri, 21 Mar 2014 11:40:44 -0400 Subject: [PATCH 4/8] Implement template_success and template_failure for Slack --- lib/travis/addons/slack/task.rb | 12 ++++++++- spec/travis/addons/slack/task_spec.rb | 37 +++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/lib/travis/addons/slack/task.rb b/lib/travis/addons/slack/task.rb index 7260abb20..8a60902d9 100644 --- a/lib/travis/addons/slack/task.rb +++ b/lib/travis/addons/slack/task.rb @@ -70,7 +70,17 @@ def color end def template_from_config - slack_config.is_a?(Hash) ? slack_config[:template] : nil + slack_config.is_a?(Hash) ? template_for(build[:state]) : nil + end + + def template_for(state = nil) + if build[:state].to_s == 'passed' && slack_config[:template_success] + slack_config[:template_success] + elsif build[:state].to_s == 'failed' && slack_config[:template_failure] + slack_config[:template_failure] + else + slack_config[:template] + end end def slack_config diff --git a/spec/travis/addons/slack/task_spec.rb b/spec/travis/addons/slack/task_spec.rb index 982b326f4..8715d2465 100644 --- a/spec/travis/addons/slack/task_spec.rb +++ b/spec/travis/addons/slack/task_spec.rb @@ -50,10 +50,26 @@ def run(targets) run(targets) http.verify_stubbed_calls end - + it "allows specifying a custom template" do targets = ['team-1:token-1'] - payload['build']['config']['notifications'] = { slack: { template: 'Custom: %{author}'}} + payload['build']['config']['notifications'] = { slack: { template: 'Custom: %{author}'}} + message = { + icon_url: "https://travis-ci.org/images/travis-mascot-150.png", + attachments: [{ + text: "Custom: Sven Fuchs", + color: 'good' + }.stringify_keys] + }.stringify_keys + expect_slack('team-1', 'token-1', message) + + run(targets) + http.verify_stubbed_calls + end + + it "uses template_success for successful build" do + targets = ['team-1:token-1'] + payload['build']['config']['notifications'] = { slack: { template_success: 'Custom: %{author}'}} message = { icon_url: "https://travis-ci.org/images/travis-mascot-150.png", attachments: [{ @@ -67,6 +83,23 @@ def run(targets) http.verify_stubbed_calls end + it "uses template_failure for failed build" do + targets = ['team-1:token-1'] + payload['build']['config']['notifications'] = { slack: { template_failure: 'Custom: %{author}'}} + payload['build']['state'] = 'failed' + message = { + icon_url: "https://travis-ci.org/images/travis-mascot-150.png", + attachments: [{ + text: "Custom: Sven Fuchs", + color: 'danger' + }.stringify_keys] + }.stringify_keys + expect_slack('team-1', 'token-1', message) + + run(targets) + http.verify_stubbed_calls + end + it "ignores garbage configurations" do targets = ['3109euaofjelw;arj;gfer//asfg=adfaf4lk3rj'] expect { From a40bf193a63768094b3d28dc0fceea61bb044c85 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Fri, 21 Mar 2014 12:13:34 -0400 Subject: [PATCH 5/8] Implement template_success and template_failure for Sqwiggle --- lib/travis/addons/sqwiggle/task.rb | 18 +++++++-- spec/travis/addons/sqwiggle/task_spec.rb | 49 ++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 7 deletions(-) diff --git a/lib/travis/addons/sqwiggle/task.rb b/lib/travis/addons/sqwiggle/task.rb index f950599b3..2f8bd5407 100644 --- a/lib/travis/addons/sqwiggle/task.rb +++ b/lib/travis/addons/sqwiggle/task.rb @@ -6,9 +6,9 @@ module Sqwiggle # configuration (`.travis.yml`). # class Task < Travis::Task - DEFAULT_TEMPLATE = %Q[ + DEFAULT_TEMPLATE = %Q[ %{repository} - build number: %{build_number} (%{branch} - %{commit} : %{author}) - - build has + build has %{result} ] @@ -23,7 +23,19 @@ def message private def template - (config[:template] rescue nil) || DEFAULT_TEMPLATE + template_for(build[:state]) || DEFAULT_TEMPLATE + end + + def template_for(state = nil) + if build[:state] == 'passed' && config[:template_success] + config[:template_success] + elsif build[:state] == 'failed' && config[:template_failure] + config[:template_failure] + else + config[:template] + end + rescue + nil end def process diff --git a/spec/travis/addons/sqwiggle/task_spec.rb b/spec/travis/addons/sqwiggle/task_spec.rb index 2a2189275..4f869e019 100644 --- a/spec/travis/addons/sqwiggle/task_spec.rb +++ b/spec/travis/addons/sqwiggle/task_spec.rb @@ -21,7 +21,7 @@ def run(targets) targets = ['12345@2', '23456@3'] message = %Q[svenfuchs/minimal - build number: 2 (master - 62aae5f : Sven Fuchs) - - build has + build has passed ].squish @@ -59,11 +59,52 @@ def run(targets) http.verify_stubbed_calls end + it 'uses template_success for successful build if defined' do + targets = ['12345@1'] + template = '%{repository} %{commit}' + message = 'svenfuchs/minimal 62aae5f' + + payload['build']['config']['notifications'] = { sqwiggle: { template_success: template } } + + sqwiggle_payload = { + text: message, + format: 'html', + color: 'green', + parse: false + } + + expect_sqwiggle('12345', sqwiggle_payload, 1) + + run(targets) + http.verify_stubbed_calls + end + + it 'uses template_failure for failed build if defined' do + targets = ['12345@1'] + template = '%{repository} %{commit}' + message = 'svenfuchs/minimal 62aae5f' + + payload['build']['config']['notifications'] = { sqwiggle: { template_failure: template } } + payload['build']['state'] = 'failed' + + sqwiggle_payload = { + text: message, + format: 'html', + color: 'red', + parse: false + } + + expect_sqwiggle('12345', sqwiggle_payload, 1) + + run(targets) + http.verify_stubbed_calls + end + it "sends red messages for failed builds" do targets = ["12345@1"] message = %Q[svenfuchs/minimal - build number: 2 (master - 62aae5f : Sven Fuchs) - - build has + build has failed ].squish @@ -80,12 +121,12 @@ def run(targets) run(targets) http.verify_stubbed_calls end - + it "sends gray messages for errored builds" do targets = ["12345@1"] message = %Q[svenfuchs/minimal - build number: 2 (master - 62aae5f : Sven Fuchs) - - build has + build has errored ].squish From 715c59670d1958c8d9a139701b595689ccbf1e32 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Sun, 23 Mar 2014 12:17:57 -0400 Subject: [PATCH 6/8] Refactor template_for logic into one place --- lib/travis/addons/campfire/task.rb | 12 ------------ lib/travis/addons/hipchat/task.rb | 12 ------------ lib/travis/addons/irc/task.rb | 12 ------------ lib/travis/addons/slack/task.rb | 14 ++------------ lib/travis/addons/sqwiggle/task.rb | 12 ------------ lib/travis/task.rb | 12 ++++++++++++ 6 files changed, 14 insertions(+), 60 deletions(-) diff --git a/lib/travis/addons/campfire/task.rb b/lib/travis/addons/campfire/task.rb index d29030e74..b625e6cf9 100644 --- a/lib/travis/addons/campfire/task.rb +++ b/lib/travis/addons/campfire/task.rb @@ -46,18 +46,6 @@ def template Array(template_for(build[:state]) || DEFAULT_TEMPLATE) end - def template_for(state = nil) - if state == 'passed' && config[:template_success] - config[:template_success] - elsif state == 'failed' && config[:template_failure] - config[:template_failure] - else - config[:template] - end - rescue - nil - end - def parse(target) target =~ /([\w-]+):([\w-]+)@(\d+)/ ["https://#{$1}.campfirenow.com/room/#{$3}/speak.json", $2] diff --git a/lib/travis/addons/hipchat/task.rb b/lib/travis/addons/hipchat/task.rb index 913f5b7d1..dcaa81db5 100644 --- a/lib/travis/addons/hipchat/task.rb +++ b/lib/travis/addons/hipchat/task.rb @@ -46,18 +46,6 @@ def template Array(template_for(build[:state]) || DEFAULT_TEMPLATE) end - def template_for(state = nil) - if state == 'passed' && config[:template_success] - config[:template_success] - elsif state == 'failed' && config[:template_failure] - config[:template_failure] - else - config[:template] - end - rescue - nil - end - def color { "passed" => "green", diff --git a/lib/travis/addons/irc/task.rb b/lib/travis/addons/irc/task.rb index 53013d2ce..98f2f2a46 100644 --- a/lib/travis/addons/irc/task.rb +++ b/lib/travis/addons/irc/task.rb @@ -79,18 +79,6 @@ def template Array(template_for(build[:state]) || DEFAULT_TEMPLATE) end - def template_for(state = nil) - if state == 'passed' && config[:template_success] - config[:template_success] - elsif state == 'failed' && config[:template_failure] - config[:template_failure] - else - config[:template] - end - rescue - nil - end - def client_options(port, ssl) { :port => port, diff --git a/lib/travis/addons/slack/task.rb b/lib/travis/addons/slack/task.rb index 8a60902d9..291d3b192 100644 --- a/lib/travis/addons/slack/task.rb +++ b/lib/travis/addons/slack/task.rb @@ -70,20 +70,10 @@ def color end def template_from_config - slack_config.is_a?(Hash) ? template_for(build[:state]) : nil + config.is_a?(Hash) ? template_for(build[:state]) : nil end - def template_for(state = nil) - if build[:state].to_s == 'passed' && slack_config[:template_success] - slack_config[:template_success] - elsif build[:state].to_s == 'failed' && slack_config[:template_failure] - slack_config[:template_failure] - else - slack_config[:template] - end - end - - def slack_config + def config build[:config].try(:[], :notifications).try(:[], :slack) || {} end diff --git a/lib/travis/addons/sqwiggle/task.rb b/lib/travis/addons/sqwiggle/task.rb index 2f8bd5407..a0ea85f2e 100644 --- a/lib/travis/addons/sqwiggle/task.rb +++ b/lib/travis/addons/sqwiggle/task.rb @@ -26,18 +26,6 @@ def template template_for(build[:state]) || DEFAULT_TEMPLATE end - def template_for(state = nil) - if build[:state] == 'passed' && config[:template_success] - config[:template_success] - elsif build[:state] == 'failed' && config[:template_failure] - config[:template_failure] - else - config[:template] - end - rescue - nil - end - def process targets.each do |target| send_message(*parse(target)) diff --git a/lib/travis/task.rb b/lib/travis/task.rb index 63e5630a7..dd88866dc 100644 --- a/lib/travis/task.rb +++ b/lib/travis/task.rb @@ -89,5 +89,17 @@ def http_options def timeout(options = { after: 60 }, &block) Timeout::timeout(options[:after], &block) end + + def template_for(state = nil) + if state == 'passed' && config[:template_success] + config[:template_success] + elsif state == 'failed' && config[:template_failure] + config[:template_failure] + else + config[:template] + end + rescue + nil + end end end From 1e86a021c7447f11032e9371f493396c736e6c56 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Sun, 23 Mar 2014 12:26:19 -0400 Subject: [PATCH 7/8] Add support for custom template for errored builds --- lib/travis/task.rb | 2 ++ spec/travis/addons/campfire/task_spec.rb | 13 ++++++++++ spec/travis/addons/hipchat/task_spec.rb | 13 ++++++++++ spec/travis/addons/irc/task_spec.rb | 31 ++++++++++++++++++++++++ spec/travis/addons/slack/task_spec.rb | 17 +++++++++++++ spec/travis/addons/sqwiggle/task_spec.rb | 21 ++++++++++++++++ 6 files changed, 97 insertions(+) diff --git a/lib/travis/task.rb b/lib/travis/task.rb index dd88866dc..79024b8f5 100644 --- a/lib/travis/task.rb +++ b/lib/travis/task.rb @@ -95,6 +95,8 @@ def template_for(state = nil) config[:template_success] elsif state == 'failed' && config[:template_failure] config[:template_failure] + elsif state == 'errored' && config[:template_error] + config[:template_error] else config[:template] end diff --git a/spec/travis/addons/campfire/task_spec.rb b/spec/travis/addons/campfire/task_spec.rb index e01d4799d..6872ab63d 100644 --- a/spec/travis/addons/campfire/task_spec.rb +++ b/spec/travis/addons/campfire/task_spec.rb @@ -69,6 +69,19 @@ def run(targets) http.verify_stubbed_calls end + it 'using a custom template_error' do + targets = ['account-1:token-1@1234'] + template = ['%{repository}', '%{commit}'] + messages = ['svenfuchs/minimal', '62aae5f'] + + payload['build']['config']['notifications'] = { campfire: { template_error: template } } + payload['build']['state'] = 'errored' + expect_campfire('account-1', '1234', 'token-1', messages) + + run(targets) + http.verify_stubbed_calls + end + def expect_campfire(account, room, token, body) host = "#{account}.campfirenow.com" path = "room/#{room}/speak.json" diff --git a/spec/travis/addons/hipchat/task_spec.rb b/spec/travis/addons/hipchat/task_spec.rb index c35a8e3f3..94c19cfbe 100644 --- a/spec/travis/addons/hipchat/task_spec.rb +++ b/spec/travis/addons/hipchat/task_spec.rb @@ -75,6 +75,19 @@ def run(targets) http.verify_stubbed_calls end + it 'uses template_error if defined for errored build' do + targets = ["#{room_1_token}@room_1"] + template = ['%{repository}', '%{commit}'] + messages = ['svenfuchs/minimal', '62aae5f'] + + payload['build']['config']['notifications'] = { hipchat: { template_error: template } } + payload['build']['state'] = 'errored' + expect_hipchat('room_1', room_1_token, messages, message_color: 'gray') + + run(targets) + http.verify_stubbed_calls + end + it "sends HTML notifications if requested" do targets = ["#{room_1_token}@room_1"] template = ['Details'] diff --git a/spec/travis/addons/irc/task_spec.rb b/spec/travis/addons/irc/task_spec.rb index c280043a8..b5c3cd774 100644 --- a/spec/travis/addons/irc/task_spec.rb +++ b/spec/travis/addons/irc/task_spec.rb @@ -120,6 +120,21 @@ def run(channels = nil) run end + it 'with a custom message template_error for a errored build' do + payload['build']['config']['notifications'] = { irc: { template_error: '%{repository} %{commit}' } } + payload['build']['state'] = 'errored' + + expect_irc 'irc.freenode.net', 1234, 'travis', [ + 'NICK travis-ci', + 'USER travis-ci travis-ci travis-ci :travis-ci', + 'JOIN #travis', + 'PRIVMSG #travis :[travis-ci] svenfuchs/minimal 62aae5f', + 'PART #travis', + 'QUIT' + ] + run + end + it 'with multiple custom message templates' do payload['build']['config']['notifications'] = { irc: { template: ['%{repository} %{commit}', '%{message}'] } } @@ -166,6 +181,22 @@ def run(channels = nil) run end + it 'with multiple custom message templates for errored build' do + payload['build']['config']['notifications'] = { irc: { template_error: ['%{repository} %{commit}', '%{message}'] } } + payload['build']['state'] = 'errored' + + expect_irc 'irc.freenode.net', 1234, 'travis', [ + 'NICK travis-ci', + 'USER travis-ci travis-ci travis-ci :travis-ci', + 'JOIN #travis', + 'PRIVMSG #travis :[travis-ci] svenfuchs/minimal 62aae5f', + 'PRIVMSG #travis :[travis-ci] The build has errored.', + 'PART #travis', + 'QUIT' + ] + run + end + it 'with two irc notifications to different hosts' do [['irc.freenode.net', 1234, 'travis'], ['irc.example.com', 6667, 'example']].each do |host, port, channel| expect_irc host, port, channel, [ diff --git a/spec/travis/addons/slack/task_spec.rb b/spec/travis/addons/slack/task_spec.rb index 8715d2465..898d65592 100644 --- a/spec/travis/addons/slack/task_spec.rb +++ b/spec/travis/addons/slack/task_spec.rb @@ -83,6 +83,23 @@ def run(targets) http.verify_stubbed_calls end + it "uses template_error for errored build" do + targets = ['team-1:token-1'] + payload['build']['config']['notifications'] = { slack: { template_error: 'Custom: %{author}'}} + payload['build']['state'] = 'errored' + message = { + icon_url: "https://travis-ci.org/images/travis-mascot-150.png", + attachments: [{ + text: "Custom: Sven Fuchs", + color: 'warning' + }.stringify_keys] + }.stringify_keys + expect_slack('team-1', 'token-1', message) + + run(targets) + http.verify_stubbed_calls + end + it "uses template_failure for failed build" do targets = ['team-1:token-1'] payload['build']['config']['notifications'] = { slack: { template_failure: 'Custom: %{author}'}} diff --git a/spec/travis/addons/sqwiggle/task_spec.rb b/spec/travis/addons/sqwiggle/task_spec.rb index 4f869e019..20a5daaa4 100644 --- a/spec/travis/addons/sqwiggle/task_spec.rb +++ b/spec/travis/addons/sqwiggle/task_spec.rb @@ -79,6 +79,27 @@ def run(targets) http.verify_stubbed_calls end + it 'uses template_error for errored build if defined' do + targets = ['12345@1'] + template = '%{repository} %{commit}' + message = 'svenfuchs/minimal 62aae5f' + + payload['build']['config']['notifications'] = { sqwiggle: { template_error: template } } + payload['build']['state'] = 'errored' + + sqwiggle_payload = { + text: message, + format: 'html', + color: 'gray', + parse: false + } + + expect_sqwiggle('12345', sqwiggle_payload, 1) + + run(targets) + http.verify_stubbed_calls + end + it 'uses template_failure for failed build if defined' do targets = ['12345@1'] template = '%{repository} %{commit}' From c55b01224b40071ea7038e54e37a706892e54928 Mon Sep 17 00:00:00 2001 From: Hiro Asari Date: Sun, 23 Mar 2014 12:42:16 -0400 Subject: [PATCH 8/8] Raise exception if Travis::Task subclass does not implment #config We could conceivably refactor #config instead. --- lib/travis/task.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/travis/task.rb b/lib/travis/task.rb index 79024b8f5..6f8078651 100644 --- a/lib/travis/task.rb +++ b/lib/travis/task.rb @@ -103,5 +103,9 @@ def template_for(state = nil) rescue nil end + + def config + raise NotImplementedError, "#config must be implemented by the subclass" + end end end