Commit 9c2d03caa7c9aaf856aef04e6d1813fea3a019aa
1 parent
4f268405
Exists in
master
and in
1 other branch
Allow usage of the HipChat v2 API
Showing
5 changed files
with
73 additions
and
7 deletions
Show diff stats
Gemfile.lock
... | ... | @@ -130,8 +130,9 @@ GEM |
130 | 130 | tilt |
131 | 131 | hashie (2.0.5) |
132 | 132 | hike (1.2.3) |
133 | - hipchat (0.12.0) | |
133 | + hipchat (1.5.1) | |
134 | 134 | httparty |
135 | + mimemagic | |
135 | 136 | hoi (0.0.6) |
136 | 137 | httparty (> 0.6.0) |
137 | 138 | json (> 1.4.0) |
... | ... | @@ -139,7 +140,7 @@ GEM |
139 | 140 | activesupport |
140 | 141 | builder |
141 | 142 | htmlentities (4.3.3) |
142 | - httparty (0.13.3) | |
143 | + httparty (0.13.5) | |
143 | 144 | json (~> 1.8) |
144 | 145 | multi_xml (>= 0.5.2) |
145 | 146 | httpauth (0.2.0) |
... | ... | @@ -168,6 +169,7 @@ GEM |
168 | 169 | railties |
169 | 170 | method_source (0.8.2) |
170 | 171 | mime-types (1.25.1) |
172 | + mimemagic (0.3.0) | |
171 | 173 | mini_portile (0.6.2) |
172 | 174 | minitest (5.5.1) |
173 | 175 | mongoid (4.0.2) | ... | ... |
app/models/notification_services/hipchat_service.rb
... | ... | @@ -2,18 +2,34 @@ if defined? HipChat |
2 | 2 | class NotificationServices::HipchatService < NotificationService |
3 | 3 | Label = 'hipchat' |
4 | 4 | Fields += [ |
5 | + [:service, { | |
6 | + :placeholder => "'v1' (admin API token) or 'v2' (account API token)", | |
7 | + :label => "HipChat API version" | |
8 | + }], | |
9 | + [:service_url, { | |
10 | + :placeholder => "Optional, leave empty for HipChat.com", | |
11 | + :label => "Custom HipChat Server URL" | |
12 | + }], | |
5 | 13 | [:api_token, { |
6 | - :placeholder => "API Token" | |
14 | + :placeholder => "API token", | |
15 | + :label => "API token" | |
7 | 16 | }], |
8 | 17 | [:room_id, { |
9 | 18 | :placeholder => "Room name", |
10 | 19 | :label => "Room name" |
11 | 20 | }], |
12 | 21 | ] |
22 | + Mandatory_fields = [:service, :api_token, :room_id] | |
23 | + API_versions = ['v1', 'v2'] | |
13 | 24 | |
14 | 25 | def check_params |
15 | - if Fields.any? { |f, _| self[f].blank? } | |
16 | - errors.add :base, 'You must specify your Hipchat API token and Room ID' | |
26 | + Fields.each do |field, hash| | |
27 | + if Mandatory_fields.include?(field) && self[field].blank? | |
28 | + errors.add field, "You must specify #{hash[:label]}" | |
29 | + end | |
30 | + end | |
31 | + unless API_versions.include?(self[:service]) | |
32 | + errors.add :service, "API version must be #{API_versions.join(' or ')}" | |
17 | 33 | end |
18 | 34 | end |
19 | 35 | |
... | ... | @@ -29,7 +45,10 @@ if defined? HipChat |
29 | 45 | Times occurred: #{problem.notices_count} |
30 | 46 | MSG |
31 | 47 | |
32 | - client = HipChat::Client.new(api_token) | |
48 | + options = { :api_version => self[:service] } | |
49 | + options[:server_url] = self[:service_url] if service_url.present? | |
50 | + | |
51 | + client = HipChat::Client.new(api_token, options) | |
33 | 52 | client[room_id].send('Errbit', message, :color => 'red', :notify => true) |
34 | 53 | end |
35 | 54 | end | ... | ... |
db/migrate/20150527202629_add_v1_to_hipchat_notification_services.rb
0 → 100644
... | ... | @@ -0,0 +1,13 @@ |
1 | +class AddV1ToHipchatNotificationServices < Mongoid::Migration | |
2 | + def self.up | |
3 | + App.all.each do |app| | |
4 | + ns = app.notification_service | |
5 | + if ns.is_a?(NotificationServices::HipchatService) && ns.service.blank? | |
6 | + app.notification_service.update_attribute(:service, 'v1') | |
7 | + end | |
8 | + end | |
9 | + end | |
10 | + | |
11 | + def self.down | |
12 | + end | |
13 | +end | ... | ... |
spec/fabricators/notification_service_fabricator.rb
... | ... | @@ -16,6 +16,10 @@ Fabricator :slack_notification_service, :from => :notification_service, :class_n |
16 | 16 | service_url { sequence :word } |
17 | 17 | end |
18 | 18 | |
19 | -%w(campfire flowdock hipchat hoiio hubot pushover webhook).each do |t| | |
19 | +Fabricator :hipchat_notification_service, :from => :notification_service, :class_name => "NotificationService::HipchatService" do | |
20 | + service { 'v2' } | |
21 | +end | |
22 | + | |
23 | +%w(campfire flowdock hoiio hubot pushover webhook).each do |t| | |
20 | 24 | Fabricator "#{t}_notification_service".to_sym, :from => :notification_service, :class_name => "NotificationService::#{t.camelcase}Service" |
21 | 25 | end | ... | ... |
spec/models/notification_service/hipchat_service_spec.rb
... | ... | @@ -7,6 +7,34 @@ describe NotificationServices::HipchatService, type: 'model' do |
7 | 7 | allow_any_instance_of(HipChat::Client).to receive(:[]).and_return(room) |
8 | 8 | end |
9 | 9 | |
10 | + describe '#check_params' do | |
11 | + context 'empty field check' do | |
12 | + %w(service api_token room_id).each do |field| | |
13 | + it "'doesn\'t allow #{field} to be empty'" do | |
14 | + service[field.to_sym] = '' | |
15 | + service.check_params | |
16 | + expect(service.errors).to include(field.to_sym) | |
17 | + end | |
18 | + end | |
19 | + end | |
20 | + | |
21 | + context 'API version field check' do | |
22 | + %w(v1 v2).each do |version| | |
23 | + it "allows #{version}" do | |
24 | + service[:service] = version | |
25 | + service.check_params | |
26 | + expect(service.errors).to_not include(:service) | |
27 | + end | |
28 | + end | |
29 | + | |
30 | + it 'doesn\t allow an unknown version' do | |
31 | + service[:service] = 'vFOO' | |
32 | + service.check_params | |
33 | + expect(service.errors).to include(:service) | |
34 | + end | |
35 | + end | |
36 | + end | |
37 | + | |
10 | 38 | it 'sends message' do |
11 | 39 | expect(room).to receive(:send) |
12 | 40 | service.create_notification(problem) | ... | ... |