flapjack-diner 0.15 → 1.0.0.rc1

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.
@@ -35,6 +35,24 @@ module Flapjack
35
35
  end
36
36
  end
37
37
 
38
+ def boolean(*elements)
39
+ elements.each do |element|
40
+ if target = @query[element]
41
+ next if [TrueClass, FalseClass].include?(target.class)
42
+ @errors << "'#{target}' should be 'true' or 'false'."
43
+ end
44
+ end
45
+ end
46
+
47
+ def array_of_strings(*elements)
48
+ elements.each do |element|
49
+ if target = @query[element]
50
+ next if target.is_a?(Array) && target.all? {|t| t.is_a?(String)}
51
+ @errors << "'#{target}' should be an Array of Strings."
52
+ end
53
+ end
54
+ end
55
+
38
56
  def required(*elements)
39
57
  elements.each do |element|
40
58
  @errors << "'#{element}' is required." if @query[element].nil?
@@ -49,7 +67,7 @@ module Flapjack
49
67
  return super unless klass = classify_name(name)
50
68
  elements = args
51
69
  elements.each do |element|
52
- @errors << "'#{element}' is expected to be a #{klass}" unless @query[element].is_a?(klass)
70
+ @errors << "'#{element}' is expected to be a #{klass}" unless @query[element].nil? || @query[element].is_a?(klass)
53
71
  end
54
72
  end
55
73
 
@@ -1,5 +1,5 @@
1
1
  module Flapjack
2
2
  module Diner
3
- VERSION = "0.15"
3
+ VERSION = "1.0.0.rc1"
4
4
  end
5
5
  end
@@ -4,23 +4,12 @@ require 'flapjack-diner'
4
4
  describe Flapjack::Diner do
5
5
 
6
6
  let(:server) { 'flapjack.com' }
7
- let(:entity) { 'ex-abcd-data-17.example.com' }
8
- let(:check) { 'ping'}
9
-
10
- let(:rule_data) {
11
- {"contact_id" => "21",
12
- "entity_tags" => ["database","physical"],
13
- "entities" => ["foo-app-01.example.com"],
14
- "time_restrictions" => nil,
15
- "warning_media" => ["email"],
16
- "critical_media" => ["sms", "email"],
17
- "warning_blackhole" => false,
18
- "critical_blackhole" => false
19
- }
20
- }
21
-
22
- let(:response) { '{"key":"value"}' }
23
- let(:response_body) { {'key' => 'value'} }
7
+
8
+ let(:time) { Time.now }
9
+
10
+ def response_with_data(name, data = [])
11
+ "{\"#{name}\":#{data.to_json}}"
12
+ end
24
13
 
25
14
  before(:each) do
26
15
  Flapjack::Diner.base_uri(server)
@@ -31,704 +20,1177 @@ describe Flapjack::Diner do
31
20
  WebMock.reset!
32
21
  end
33
22
 
34
- it "returns a json list of entities" do
35
- req = stub_request(:get, "http://#{server}/entities").to_return(
36
- :body => response)
37
-
38
- result = Flapjack::Diner.entities
39
- req.should have_been_requested
40
- result.should_not be_nil
41
- result.should == response_body
42
- end
43
-
44
- it "returns a json list of entities from a non-standard port" do
45
- Flapjack::Diner.base_uri('flapjack.com:54321')
46
-
47
- req = stub_request(:get, "http://#{server}:54321/entities").to_return(
48
- :body => response)
49
-
50
- result = Flapjack::Diner.entities
51
- req.should have_been_requested
52
- result.should_not be_nil
53
- result.should == response_body
54
- end
55
-
56
- it "returns a json list of checks for an entity" do
57
- req = stub_request(:get, "http://#{server}/checks/#{entity}").to_return(
58
- :body => response)
59
-
60
- result = Flapjack::Diner.checks(entity)
61
- req.should have_been_requested
62
- result.should_not be_nil
63
- result.should == response_body
64
- end
65
-
66
- it "returns a json list of check statuses for an entity" do
67
- req = stub_request(:get, "http://#{server}/status").
68
- with(:query => {:entity => entity}).
69
- to_return(:body => response)
70
-
71
- result = Flapjack::Diner.bulk_status(:entity => entity)
72
- req.should have_been_requested
73
- result.should_not be_nil
74
- result.should == response_body
75
- end
76
-
77
- it "returns a json list of check statuses for an entity, legacy" do
78
- req = stub_request(:get, "http://#{server}/status/#{entity}").
79
- to_return(:body => response)
80
-
81
- result = Flapjack::Diner.status(entity)
82
- req.should have_been_requested
83
- result.should_not be_nil
84
- result.should == response_body
85
- end
86
-
87
- it "returns a list of entity statuses for a bulk query" do
88
- req = stub_request(:get, "http://#{server}/status").
89
- with(:query => {:entity => ['abc.net', 'def.com'], :check => {'ghi.net' => 'ping', 'jkl.org' => ['ping', 'ssh']}}).
90
- to_return(:body => response)
91
-
92
- result = Flapjack::Diner.bulk_status(:entity => ['abc.net', 'def.com'], :check => {'ghi.net' => 'ping', 'jkl.org' => ['ping', 'ssh']})
93
- req.should have_been_requested
94
- result.should_not be_nil
95
- result.should == response_body
96
- end
97
-
98
- it "returns a single check status for an entity" do
99
- req = stub_request(:get, "http://#{server}/status").
100
- with(:query => {:check => {entity => check}}).
101
- to_return(:body => response)
102
-
103
- result = Flapjack::Diner.bulk_status(:check => {entity => check})
104
- req.should have_been_requested
105
- result.should_not be_nil
106
- result.should == response_body
107
- end
108
-
109
- it "returns a single check status for an entity, legacy" do
110
- req = stub_request(:get, "http://#{server}/status/#{entity}/#{check}").
111
- to_return(:body => response)
112
-
113
- result = Flapjack::Diner.status(entity, :check => check)
114
- req.should have_been_requested
115
- result.should_not be_nil
116
- result.should == response_body
117
- end
118
-
119
- it "returns a list of scheduled maintenance periods for all checks on an entity" do
120
- req = stub_request(:get, "http://#{server}/scheduled_maintenances/#{entity}").
121
- to_return(:body => response)
122
-
123
- result = Flapjack::Diner.scheduled_maintenances(entity)
124
- req.should have_been_requested
125
- result.should_not be_nil
126
- result.should == response_body
127
- end
128
-
129
- it "returns a list of scheduled maintenance periods for a check on an entity" do
130
- req = stub_request(:get, "http://#{server}/scheduled_maintenances/#{entity}/#{check}").
131
- to_return(:body => response)
132
-
133
- result = Flapjack::Diner.scheduled_maintenances(entity, :check => check)
134
- req.should have_been_requested
135
- result.should_not be_nil
136
- result.should == response_body
137
- end
138
-
139
- it "returns a list of scheduled maintenance periods for a bulk query" do
140
- req = stub_request(:get, "http://#{server}/scheduled_maintenances").
141
- with(:query => {:entity => 'abc.net', :check => {'def.org' => 'ping'}}).
142
- to_return(:body => response)
143
-
144
- result = Flapjack::Diner.bulk_scheduled_maintenances(:entity => 'abc.net', :check => {'def.org' => 'ping'})
145
- req.should have_been_requested
146
- result.should_not be_nil
147
- result.should == response_body
148
- end
149
-
150
- it "returns a list of unscheduled maintenance periods for all checks on an entity" do
151
- req = stub_request(:get, "http://#{server}/unscheduled_maintenances/#{entity}").
152
- to_return(:body => response)
153
-
154
- result = Flapjack::Diner.unscheduled_maintenances(entity)
155
- req.should have_been_requested
156
- result.should_not be_nil
157
- result.should == response_body
158
- end
159
-
160
- it "returns a list of unscheduled maintenance periods for a check on an entity" do
161
- req = stub_request(:get, "http://#{server}/unscheduled_maintenances/#{entity}/#{check}").
162
- to_return(:body => response)
163
-
164
- result = Flapjack::Diner.unscheduled_maintenances(entity, :check => check)
165
- req.should have_been_requested
166
- result.should_not be_nil
167
- result.should == response_body
168
- end
169
-
170
- it "returns a list of unscheduled maintenance periods for a bulk query" do
171
- req = stub_request(:get, "http://#{server}/unscheduled_maintenances").
172
- with(:query => {:entity => 'abc.net', :check => {'def.org' => 'ping'}}).
173
- to_return(:body => response)
174
-
175
- result = Flapjack::Diner.bulk_unscheduled_maintenances(:entity => 'abc.net', :check => {'def.org' => 'ping'})
176
- req.should have_been_requested
177
- result.should_not be_nil
178
- result.should == response_body
179
- end
180
-
181
- it "returns a list of outages for all checks on an entity" do
182
- req = stub_request(:get, "http://#{server}/outages/#{entity}").
183
- to_return(:body => response)
23
+ context 'contacts' do
24
+ context 'create' do
25
+
26
+ it "submits a POST request for a contact" do
27
+ data = [{:first_name => 'Jim',
28
+ :last_name => 'Smith',
29
+ :email => 'jims@example.com',
30
+ :timezone => 'UTC',
31
+ :tags => ['admin', 'night_shift']}]
32
+
33
+ req = stub_request(:post, "http://#{server}/contacts").
34
+ with(:body => {:contacts => data}.to_json,
35
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
36
+ to_return(:status => 201, :body => response_with_data('contacts', data))
37
+
38
+ result = Flapjack::Diner.create_contacts(data)
39
+ req.should have_been_requested
40
+ result.should_not be_nil
41
+ result.should be_true
42
+ end
43
+
44
+ it "submits a POST request for several contacts" do
45
+ data = [{:first_name => 'Jim',
46
+ :last_name => 'Smith',
47
+ :email => 'jims@example.com',
48
+ :timezone => 'UTC',
49
+ :tags => ['admin', 'night_shift']},
50
+ {:first_name => 'Joan',
51
+ :last_name => 'Smith',
52
+ :email => 'joans@example.com'}]
53
+
54
+ req = stub_request(:post, "http://#{server}/contacts").
55
+ with(:body => {:contacts => data}.to_json,
56
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
57
+ to_return(:status => 201, :body => response_with_data('contacts', data))
58
+
59
+ result = Flapjack::Diner.create_contacts(data)
60
+ req.should have_been_requested
61
+ result.should_not be_nil
62
+ result.should be_true
63
+ end
184
64
 
185
- result = Flapjack::Diner.outages(entity)
186
- req.should have_been_requested
187
- result.should_not be_nil
188
- result.should == response_body
189
- end
65
+ end
190
66
 
191
- it "returns a list of outages for a check on an entity" do
192
- req = stub_request(:get, "http://#{server}/outages/#{entity}/#{check}").
193
- to_return(:body => response)
67
+ context 'read' do
68
+ it "submits a GET request for all contacts" do
69
+ req = stub_request(:get, "http://#{server}/contacts").to_return(
70
+ :status => 200, :body => response_with_data('contacts'))
71
+
72
+ result = Flapjack::Diner.contacts
73
+ req.should have_been_requested
74
+ result.should_not be_nil
75
+ end
76
+
77
+ it "submits a GET request for one contact" do
78
+ req = stub_request(:get, "http://#{server}/contacts/72").to_return(
79
+ :body => response_with_data('contacts'))
80
+
81
+ result = Flapjack::Diner.contacts('72')
82
+ req.should have_been_requested
83
+ result.should_not be_nil
84
+ end
85
+
86
+ it "submits a GET request for several contacts" do
87
+ req = stub_request(:get, "http://#{server}/contacts/72,150").to_return(
88
+ :body => response_with_data('contacts'))
89
+
90
+ result = Flapjack::Diner.contacts('72', '150')
91
+ req.should have_been_requested
92
+ result.should_not be_nil
93
+ end
94
+ end
194
95
 
195
- result = Flapjack::Diner.outages(entity, :check => check)
196
- req.should have_been_requested
197
- result.should_not be_nil
198
- result.should == response_body
199
- end
96
+ context 'update' do
97
+
98
+ it "submits a PATCH request for one contact" do
99
+ req = stub_request(:patch, "http://#{server}/contacts/23").
100
+ with(:body => [{:op => 'replace', :path => '/contacts/0/timezone', :value => 'UTC'}].to_json,
101
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
102
+ to_return(:status => 204)
103
+
104
+ result = Flapjack::Diner.update_contacts(23, :timezone => 'UTC')
105
+ req.should have_been_requested
106
+ result.should_not be_nil
107
+ result.should be_true
108
+ end
109
+
110
+ it "submits a PATCH request for several contacts" do
111
+ req = stub_request(:patch, "http://#{server}/contacts/23,87").
112
+ with(:body => [{:op => 'replace', :path => '/contacts/0/timezone', :value => 'UTC'}].to_json,
113
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
114
+ to_return(:status => 204)
115
+
116
+ result = Flapjack::Diner.update_contacts(23, 87, :timezone => 'UTC')
117
+ req.should have_been_requested
118
+ result.should_not be_nil
119
+ result.should be_true
120
+ end
121
+
122
+ it "submits a PATCH request to change a link for one contact" do
123
+ req = stub_request(:patch, "http://#{server}/contacts/23").
124
+ with(:body => [{:op => 'add', :path => '/contacts/0/links/entities/-', :value => '57'}].to_json,
125
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
126
+ to_return(:status => 204)
127
+
128
+ result = Flapjack::Diner.update_contacts(23, :add_entity => '57')
129
+ req.should have_been_requested
130
+ result.should_not be_nil
131
+ result.should be_true
132
+ end
133
+
134
+ it "submits a PATCH request to change links for several contacts" do
135
+ req = stub_request(:patch, "http://#{server}/contacts/23,87").
136
+ with(:body => [{:op => 'add', :path => '/contacts/0/links/entities/-', :value => '57'}].to_json,
137
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
138
+ to_return(:status => 204)
139
+
140
+ result = Flapjack::Diner.update_contacts(23, 87, :add_entity => '57')
141
+ req.should have_been_requested
142
+ result.should_not be_nil
143
+ result.should be_true
144
+ end
200
145
 
201
- it "returns a list of outages for a bulk query" do
202
- req = stub_request(:get, "http://#{server}/outages").
203
- with(:query => {:entity => 'abc.net', :check => {'def.org' => 'ping'}}).
204
- to_return(:body => response)
146
+ end
205
147
 
206
- result = Flapjack::Diner.bulk_outages(:entity => 'abc.net', :check => {'def.org' => 'ping'})
207
- req.should have_been_requested
208
- result.should_not be_nil
209
- result.should == response_body
148
+ context 'delete' do
149
+ it "submits a DELETE request for one contact" do
150
+ req = stub_request(:delete, "http://#{server}/contacts/72").
151
+ to_return(:status => 204)
152
+
153
+ result = Flapjack::Diner.delete_contacts('72')
154
+ req.should have_been_requested
155
+ result.should_not be_nil
156
+ result.should be_true
157
+ end
158
+
159
+ it "submits a DELETE request for several contacts" do
160
+ req = stub_request(:delete, "http://#{server}/contacts/72,150").
161
+ to_return(:status => 204)
162
+
163
+ result = Flapjack::Diner.delete_contacts('72', '150')
164
+ req.should have_been_requested
165
+ result.should_not be_nil
166
+ result.should be_true
167
+ end
168
+ end
210
169
  end
211
170
 
212
- it "returns a list of downtimes for all checks on an entity" do
213
- req = stub_request(:get, "http://#{server}/downtime/#{entity}").
214
- to_return(:body => response)
171
+ context 'media' do
172
+ context 'create' do
173
+
174
+ it "submits a POST request for a medium" do
175
+ data = [{
176
+ :type => 'sms',
177
+ :address => '0123456789',
178
+ :interval => 300,
179
+ :rollup_threshold => 5
180
+ }]
181
+
182
+ req = stub_request(:post, "http://#{server}/contacts/1/media").
183
+ with(:body => {:media => data}.to_json,
184
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
185
+ to_return(:status => 201, :body => response_with_data('media', data))
186
+
187
+ result = Flapjack::Diner.create_contact_media(1, data)
188
+ req.should have_been_requested
189
+ result.should_not be_nil
190
+ result.should be_true
191
+ end
192
+
193
+ it "submits a POST request for several media" do
194
+ data = [{
195
+ :type => 'sms',
196
+ :address => '0123456789',
197
+ :interval => 300,
198
+ :rollup_threshold => 5
199
+ }, {
200
+ :type => 'email',
201
+ :address => 'ablated@example.org',
202
+ :interval => 180,
203
+ :rollup_threshold => 3
204
+ }]
205
+
206
+ req = stub_request(:post, "http://#{server}/contacts/1/media").
207
+ with(:body => {:media => data}.to_json,
208
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
209
+ to_return(:status => 201, :body => response_with_data('media', data))
210
+
211
+ result = Flapjack::Diner.create_contact_media(1, data)
212
+ req.should have_been_requested
213
+ result.should_not be_nil
214
+ result.should be_true
215
+ end
215
216
 
216
- result = Flapjack::Diner.downtime(entity)
217
- req.should have_been_requested
218
- result.should_not be_nil
219
- result.should == response_body
220
- end
221
-
222
- it "returns a list of downtimes for all checks on an entity between two times" do
223
- start = Time.iso8601('2011-08-01T00:00:00+10:00')
224
- finish = Time.iso8601('2011-08-31T00:00:00+10:00')
217
+ end
225
218
 
226
- req = stub_request(:get, "http://#{server}/downtime/#{entity}").
227
- with(:query => {:start_time => start.iso8601, :end_time => finish.iso8601}).
228
- to_return(:body => response)
219
+ context 'read' do
220
+ it "submits a GET request for all media" do
221
+ req = stub_request(:get, "http://#{server}/media").
222
+ to_return(:body => response_with_data('media'))
223
+
224
+ result = Flapjack::Diner.media
225
+ req.should have_been_requested
226
+ result.should_not be_nil
227
+ end
228
+
229
+ it "submits a GET request for one medium" do
230
+ req = stub_request(:get, "http://#{server}/media/72_sms").
231
+ to_return(:body => response_with_data('media'))
232
+
233
+ result = Flapjack::Diner.media('72_sms')
234
+ req.should have_been_requested
235
+ result.should_not be_nil
236
+ end
237
+
238
+ it "submits a GET request for several media" do
239
+ req = stub_request(:get, "http://#{server}/media/72_sms,150_email").
240
+ to_return(:body => response_with_data('media'))
241
+
242
+ result = Flapjack::Diner.media('72_sms', '150_email')
243
+ req.should have_been_requested
244
+ result.should_not be_nil
245
+ end
246
+ end
229
247
 
230
- result = Flapjack::Diner.downtime(entity, :start_time => start, :end_time => finish)
231
- req.should have_been_requested
232
- result.should_not be_nil
233
- result.should == response_body
234
- end
248
+ context 'update' do
249
+
250
+ it "submits a PATCH request for one medium" do
251
+ req = stub_request(:patch, "http://#{server}/media/23_email").
252
+ with(:body => [{:op => 'replace', :path => '/media/0/interval', :value => 50},
253
+ {:op => 'replace', :path => '/media/0/rollup_threshold', :value => 3}].to_json,
254
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
255
+ to_return(:status => 204)
256
+
257
+ result = Flapjack::Diner.update_media('23_email', :interval => 50, :rollup_threshold => 3)
258
+ req.should have_been_requested
259
+ result.should_not be_nil
260
+ result.should be_true
261
+ end
262
+
263
+ it "submits a PATCH request for several media" do
264
+ req = stub_request(:patch, "http://#{server}/media/23_email,87_sms").
265
+ with(:body => [{:op => 'replace', :path => '/media/0/interval', :value => 50},
266
+ {:op => 'replace', :path => '/media/0/rollup_threshold', :value => 3}].to_json,
267
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
268
+ to_return(:status => 204)
269
+
270
+ result = Flapjack::Diner.update_media('23_email', '87_sms', :interval => 50, :rollup_threshold => 3)
271
+ req.should have_been_requested
272
+ result.should_not be_nil
273
+ result.should be_true
274
+ end
235
275
 
236
- it "returns a list of downtimes for a check on an entity" do
237
- req = stub_request(:get, "http://#{server}/downtime/#{entity}/#{check}").
238
- to_return(:body => response)
276
+ end
239
277
 
240
- result = Flapjack::Diner.downtime(entity, :check => check)
241
- req.should have_been_requested
242
- result.should_not be_nil
243
- result.should == response_body
278
+ context 'delete' do
279
+ it "submits a DELETE request for one medium" do
280
+ req = stub_request(:delete, "http://#{server}/media/72_sms").
281
+ to_return(:status => 204)
282
+
283
+ result = Flapjack::Diner.delete_media('72_sms')
284
+ req.should have_been_requested
285
+ result.should_not be_nil
286
+ result.should be_true
287
+ end
288
+
289
+ it "submits a DELETE request for several media" do
290
+ req = stub_request(:delete, "http://#{server}/media/72_sms,150_email").
291
+ to_return(:status => 204)
292
+
293
+ result = Flapjack::Diner.delete_media('72_sms', '150_email')
294
+ req.should have_been_requested
295
+ result.should_not be_nil
296
+ result.should be_true
297
+ end
298
+ end
244
299
  end
245
300
 
246
- it "returns a list of downtimes for a bulk query between two times" do
247
- start = Time.iso8601('2011-08-01T00:00:00+10:00')
248
- finish = Time.iso8601('2011-08-31T00:00:00+10:00')
301
+ context 'pagerduty credentials' do
302
+ context 'create' do
249
303
 
250
- req = stub_request(:get, "http://#{server}/downtime").
251
- with(:query => {:entity => 'abc.net', :check => {'def.org' => 'ping'},
252
- :start_time => start.iso8601, :end_time => finish.iso8601}).
253
- to_return(:body => response)
304
+ it "submits a POST request for pagerduty credentials" do
305
+ data = [{:service_key => 'abc',
306
+ :subdomain => 'def',
307
+ :username => 'ghi',
308
+ :password => 'jkl',
309
+ }]
254
310
 
255
- result = Flapjack::Diner.bulk_downtime(:entity => 'abc.net', :check => {'def.org' => 'ping'},
256
- :start_time => start, :end_time => finish)
257
- req.should have_been_requested
258
- result.should_not be_nil
259
- result.should == response_body
260
- end
311
+ req = stub_request(:post, "http://#{server}/contacts/1/pagerduty_credentials").
312
+ with(:body => {:pagerduty_credentials => data}.to_json,
313
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
314
+ to_return(:status => 201, :body => response_with_data('pagerduty_credentials', data))
261
315
 
262
- it "acknowledges a check's state for an entity" do
263
- req = stub_request(:post, "http://#{server}/acknowledgements").with(
264
- :body => {:check => {entity => check}, :summary => 'dealing with it'}).to_return(
265
- :status => 204)
316
+ result = Flapjack::Diner.create_contact_pagerduty_credentials(1, data)
317
+ req.should have_been_requested
318
+ result.should_not be_nil
319
+ result.should be_true
320
+ end
266
321
 
267
- result = Flapjack::Diner.acknowledge!(entity, check, :summary => 'dealing with it')
268
- req.should have_been_requested
269
- result.should be_true
270
- end
322
+ end
271
323
 
272
- it "acknowledges all checks on an entity" do
273
- req = stub_request(:post, "http://#{server}/acknowledgements").with(
274
- :body => {:entity => entity, :summary => 'dealing with it'},
275
- :headers => {'Content-Type' => 'application/json'}).to_return(
276
- :status => 204)
324
+ context 'read' do
325
+ it "submits a GET request for all pagerduty credentials" do
326
+ req = stub_request(:get, "http://#{server}/pagerduty_credentials").
327
+ to_return(:body => response_with_data('pagerduty_credentials'))
328
+
329
+ result = Flapjack::Diner.pagerduty_credentials
330
+ req.should have_been_requested
331
+ result.should_not be_nil
332
+ end
333
+
334
+ it "submits a GET request for one set of pagerduty credentials" do
335
+ req = stub_request(:get, "http://#{server}/pagerduty_credentials/72").
336
+ to_return(:body => response_with_data('pagerduty_credentials'))
337
+
338
+ result = Flapjack::Diner.pagerduty_credentials('72')
339
+ req.should have_been_requested
340
+ result.should_not be_nil
341
+ end
342
+
343
+ it "submits a GET request for several sets of pagerduty credentials" do
344
+ req = stub_request(:get, "http://#{server}/pagerduty_credentials/72,150").
345
+ to_return(:body => response_with_data('pagerduty_credentials'))
346
+
347
+ result = Flapjack::Diner.pagerduty_credentials('72', '150')
348
+ req.should have_been_requested
349
+ result.should_not be_nil
350
+ end
351
+ end
277
352
 
278
- result = Flapjack::Diner.bulk_acknowledge!(:entity => entity, :summary => 'dealing with it')
279
- req.should have_been_requested
280
- result.should be_true
281
- end
353
+ context 'update' do
354
+
355
+ it "submits a PATCH request for one set of pagerduty credentials" do
356
+ req = stub_request(:patch, "http://#{server}/pagerduty_credentials/23").
357
+ with(:body => [{:op => 'replace', :path => '/pagerduty_credentials/0/password', :value => 'lmno'}].to_json,
358
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
359
+ to_return(:status => 204)
360
+
361
+ result = Flapjack::Diner.update_pagerduty_credentials('23', :password => 'lmno')
362
+ req.should have_been_requested
363
+ result.should_not be_nil
364
+ result.should be_true
365
+ end
366
+
367
+ it "submits a PATCH request for several sets of pagerduty credentials" do
368
+ req = stub_request(:patch, "http://#{server}/pagerduty_credentials/23,87").
369
+ with(:body => [{:op => 'replace', :path => '/pagerduty_credentials/0/username', :value => 'hijk'},
370
+ {:op => 'replace', :path => '/pagerduty_credentials/0/password', :value => 'lmno'}].to_json,
371
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
372
+ to_return(:status => 204)
373
+
374
+ result = Flapjack::Diner.update_pagerduty_credentials('23', '87', :username => 'hijk', :password => 'lmno')
375
+ req.should have_been_requested
376
+ result.should_not be_nil
377
+ result.should be_true
378
+ end
282
379
 
283
- it "acknowledges checks from multiple entities" do
284
- req = stub_request(:post, "http://#{server}/acknowledgements").with(
285
- :body => {:entity => [entity, 'lmn.net'], :summary => 'dealing with it'}).to_return(
286
- :status => 204)
380
+ end
287
381
 
288
- result = Flapjack::Diner.bulk_acknowledge!(:entity => [entity, 'lmn.net'], :summary => 'dealing with it')
289
- req.should have_been_requested
290
- result.should be_true
382
+ context 'delete' do
383
+ it "submits a DELETE request for one set of pagerduty credentials" do
384
+ req = stub_request(:delete, "http://#{server}/pagerduty_credentials/72").
385
+ to_return(:status => 204)
386
+
387
+ result = Flapjack::Diner.delete_pagerduty_credentials('72')
388
+ req.should have_been_requested
389
+ result.should_not be_nil
390
+ result.should be_true
391
+ end
392
+
393
+ it "submits a DELETE request for several media" do
394
+ req = stub_request(:delete, "http://#{server}/pagerduty_credentials/72,150").
395
+ to_return(:status => 204)
396
+
397
+ result = Flapjack::Diner.delete_pagerduty_credentials('72', '150')
398
+ req.should have_been_requested
399
+ result.should_not be_nil
400
+ result.should be_true
401
+ end
402
+ end
291
403
  end
292
404
 
293
- it "generates test notifications for a check on an entity" do
294
- req = stub_request(:post, "http://#{server}/test_notifications").with(
295
- :body => {:check => {entity => check}, :summary => 'testing notifications'}).to_return(
296
- :status => 204)
405
+ context 'notification rules' do
406
+
407
+ context 'create' do
408
+
409
+ it "submits a POST request for a notification rule" do
410
+ data = [{
411
+ "entity_tags" => ["database","physical"],
412
+ "entities" => ["foo-app-01.example.com"],
413
+ "time_restrictions" => nil,
414
+ "warning_media" => ["email"],
415
+ "critical_media" => ["sms", "email"],
416
+ "warning_blackhole" => false,
417
+ "critical_blackhole" => false
418
+ }]
419
+
420
+ req = stub_request(:post, "http://#{server}/contacts/1/notification_rules").
421
+ with(:body => {:notification_rules => data}.to_json,
422
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
423
+ to_return(:status => 201, :body => response_with_data('notification_rules', data))
424
+
425
+
426
+ result = Flapjack::Diner.create_contact_notification_rules(1, data)
427
+ req.should have_been_requested
428
+ result.should_not be_nil
429
+ result.should be_true
430
+ end
431
+
432
+ it "submits a POST request for several notification rules" do
433
+ data = [{
434
+ "entity_tags" => ["database","physical"],
435
+ "entities" => ["foo-app-01.example.com"],
436
+ "time_restrictions" => nil,
437
+ "warning_media" => ["email"],
438
+ "critical_media" => ["sms", "email"],
439
+ "warning_blackhole" => false,
440
+ "critical_blackhole" => false
441
+ }, {
442
+ "entity_tags" => nil,
443
+ "entities" => ["foo-app-02.example.com"],
444
+ "time_restrictions" => nil,
445
+ "warning_media" => ["email"],
446
+ "critical_media" => ["sms", "email"],
447
+ "warning_blackhole" => true,
448
+ "critical_blackhole" => false
449
+ }]
450
+
451
+ req = stub_request(:post, "http://#{server}/contacts/1/notification_rules").
452
+ with(:body => {:notification_rules => data}.to_json,
453
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
454
+ to_return(:status => 201, :body => response_with_data('notification_rules', data))
455
+
456
+ result = Flapjack::Diner.create_contact_notification_rules(1, data)
457
+ req.should have_been_requested
458
+ result.should_not be_nil
459
+ result.should be_true
460
+ end
297
461
 
298
- result = Flapjack::Diner.test_notifications!(entity, check, :summary => 'testing notifications')
299
- req.should have_been_requested
300
- result.should be_true
301
- end
462
+ end
302
463
 
303
- it "generates test notifications for all checks on an entity" do
304
- req = stub_request(:post, "http://#{server}/test_notifications").with(
305
- :body => {:entity => entity, :summary => 'testing notifications'}).to_return(
306
- :status => 204)
464
+ context 'read' do
465
+ it "submits a GET request for all notification rules" do
466
+ req = stub_request(:get, "http://#{server}/notification_rules").
467
+ to_return(:body => response_with_data('notification_rules'))
468
+
469
+ result = Flapjack::Diner.notification_rules
470
+ req.should have_been_requested
471
+ result.should_not be_nil
472
+ end
473
+
474
+ it "submits a GET request for one notification rule" do
475
+ req = stub_request(:get, "http://#{server}/notification_rules/30fd36ae-3922-4957-ae3e-c8f6dd27e543").
476
+ to_return(:body => response_with_data('notification_rules'))
477
+
478
+ result = Flapjack::Diner.notification_rules('30fd36ae-3922-4957-ae3e-c8f6dd27e543')
479
+ req.should have_been_requested
480
+ result.should_not be_nil
481
+ end
482
+
483
+ it "submits a GET request for several media" do
484
+ req = stub_request(:get, "http://#{server}/notification_rules/30fd36ae-3922-4957-ae3e-c8f6dd27e543,bfd8be61-3d80-4b95-94df-6e77183ce4e3").
485
+ to_return(:body => response_with_data('notification_rules'))
486
+
487
+ result = Flapjack::Diner.notification_rules('30fd36ae-3922-4957-ae3e-c8f6dd27e543', 'bfd8be61-3d80-4b95-94df-6e77183ce4e3')
488
+ req.should have_been_requested
489
+ result.should_not be_nil
490
+ end
491
+ end
307
492
 
308
- result = Flapjack::Diner.bulk_test_notifications!(:entity => entity, :summary => 'testing notifications')
309
- req.should have_been_requested
310
- result.should be_true
311
- end
493
+ context 'update' do
494
+
495
+ it "submits a PATCH request for one notification rule" do
496
+ req = stub_request(:patch, "http://#{server}/notification_rules/30fd36ae-3922-4957-ae3e-c8f6dd27e543").
497
+ with(:body => [{:op => 'replace', :path => '/notification_rules/0/warning_blackhole', :value => false}].to_json,
498
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
499
+ to_return(:status => 204)
500
+
501
+ result = Flapjack::Diner.update_notification_rules('30fd36ae-3922-4957-ae3e-c8f6dd27e543', :warning_blackhole => false)
502
+ req.should have_been_requested
503
+ result.should_not be_nil
504
+ result.should be_true
505
+ end
506
+
507
+ it "submits a PATCH request for several notification rules" do
508
+ req = stub_request(:patch, "http://#{server}/notification_rules/30fd36ae-3922-4957-ae3e-c8f6dd27e543,bfd8be61-3d80-4b95-94df-6e77183ce4e3").
509
+ with(:body => [{:op => 'replace', :path => '/notification_rules/0/warning_blackhole', :value => false}].to_json,
510
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
511
+ to_return(:status => 204)
512
+
513
+ result = Flapjack::Diner.update_notification_rules('30fd36ae-3922-4957-ae3e-c8f6dd27e543',
514
+ 'bfd8be61-3d80-4b95-94df-6e77183ce4e3', :warning_blackhole => false)
515
+ req.should have_been_requested
516
+ result.should_not be_nil
517
+ result.should be_true
518
+ end
312
519
 
313
- it "generates test notifications for checks from multiple entities" do
314
- req = stub_request(:post, "http://#{server}/test_notifications").with(
315
- :body => {:entity => [entity, 'lmn.net'], :summary => 'testing notifications'}).to_return(
316
- :status => 204)
520
+ end
317
521
 
318
- result = Flapjack::Diner.bulk_test_notifications!(:entity => [entity, 'lmn.net'], :summary => 'testing notifications')
319
- req.should have_been_requested
320
- result.should be_true
522
+ context 'delete' do
523
+ it "submits a DELETE request for a notification rule" do
524
+ req = stub_request(:delete, "http://#{server}/notification_rules/30fd36ae-3922-4957-ae3e-c8f6dd27e543").
525
+ to_return(:status => 204)
526
+
527
+ result = Flapjack::Diner.delete_notification_rules('30fd36ae-3922-4957-ae3e-c8f6dd27e543')
528
+ req.should have_been_requested
529
+ result.should_not be_nil
530
+ result.should be_true
531
+ end
532
+
533
+ it "submits a DELETE request for several notification rules" do
534
+ req = stub_request(:delete, "http://#{server}/notification_rules/30fd36ae-3922-4957-ae3e-c8f6dd27e543,bfd8be61-3d80-4b95-94df-6e77183ce4e3").
535
+ to_return(:status => 204)
536
+
537
+ result = Flapjack::Diner.delete_notification_rules('30fd36ae-3922-4957-ae3e-c8f6dd27e543', 'bfd8be61-3d80-4b95-94df-6e77183ce4e3')
538
+ req.should have_been_requested
539
+ result.should_not be_nil
540
+ result.should be_true
541
+ end
542
+ end
321
543
  end
322
544
 
323
- it "creates a scheduled maintenance period for an entity" do
324
- start_time = Time.now
325
- duration = 60 * 30 # in seconds, so 30 minutes
326
- summary = "fixing everything"
327
-
328
- req = stub_request(:post, "http://#{server}/scheduled_maintenances").
329
- with(:body => {:check => {entity => check}, :start_time => start_time.iso8601,
330
- :duration => duration, :summary => summary},
331
- :headers => {'Content-Type'=>'application/json'}).
545
+ context 'entities' do
546
+
547
+ context 'create' do
548
+
549
+ it "submits a POST request for an entity" do
550
+ data = [{
551
+ :name => 'example.org',
552
+ :id => '57_example'
553
+ }]
554
+
555
+ req = stub_request(:post, "http://#{server}/entities").
556
+ with(:body => {:entities => data}.to_json,
557
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
558
+ to_return(:status => 201, :body => response_with_data('entities', data))
559
+
560
+ result = Flapjack::Diner.create_entities(data)
561
+ req.should have_been_requested
562
+ result.should_not be_nil
563
+ result.should be_true
564
+ end
565
+
566
+ it "submits a POST request for several entities" do
567
+ data = [{
568
+ :name => 'example.org',
569
+ :id => '57_example'
570
+ }, {
571
+ :name => 'example2.org',
572
+ :id => '58'
573
+ }]
574
+
575
+ req = stub_request(:post, "http://#{server}/entities").
576
+ with(:body => {:entities => data}.to_json,
577
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
578
+ to_return(:status => 201, :body => response_with_data('entities', data))
579
+
580
+ result = Flapjack::Diner.create_entities(data)
581
+ req.should have_been_requested
582
+ result.should_not be_nil
583
+ result.should be_true
584
+ end
585
+
586
+ context 'scheduled maintenance periods' do
587
+
588
+ it "submits a POST request on an entity" do
589
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
590
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/entities/72").
591
+ with(:body => {:scheduled_maintenances => data}.to_json,
592
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
332
593
  to_return(:status => 204)
333
594
 
334
- result = Flapjack::Diner.create_scheduled_maintenance!(entity, check,
335
- :start_time => start_time, :duration => duration, :summary => summary)
336
- req.should have_been_requested
337
- result.should be_true
338
- end
339
-
340
- it "creates scheduled maintenance periods for all checks on an entity" do
341
- start_time = Time.now
342
- duration = 60 * 30 # in seconds, so 30 minutes
343
- summary = "fixing everything"
344
-
345
- req = stub_request(:post, "http://#{server}/scheduled_maintenances").
346
- with(:body => {:entity => entity, :start_time => start_time.iso8601,
347
- :duration => duration, :summary => summary},
348
- :headers => {'Content-Type'=>'application/json'}).
595
+ result = Flapjack::Diner.create_scheduled_maintenances_entities(72, data)
596
+ req.should have_been_requested
597
+ result.should_not be_nil
598
+ result.should be_true
599
+ end
600
+
601
+ it "submits a POST request on several entities" do
602
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
603
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/entities/72,150").
604
+ with(:body => {:scheduled_maintenances => data}.to_json,
605
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
349
606
  to_return(:status => 204)
350
607
 
351
- result = Flapjack::Diner.bulk_create_scheduled_maintenance!(:entity => entity,
352
- :start_time => start_time, :duration => duration, :summary => summary)
353
- req.should have_been_requested
354
- result.should be_true
355
- end
356
-
357
- it "creates scheduled maintenance periods for checks from multiple entities" do
358
- start_time = Time.now
359
- duration = 60 * 30 # in seconds, so 30 minutes
360
- summary = "fixing everything"
361
-
362
- req = stub_request(:post, "http://#{server}/scheduled_maintenances").
363
- with(:body => {:check => {entity => 'ping', 'pqr.org' => 'ssh'}, :start_time => start_time.iso8601,
364
- :duration => duration, :summary => summary},
365
- :headers => {'Content-Type'=>'application/json'}).
608
+ result = Flapjack::Diner.create_scheduled_maintenances_entities(72, 150, data)
609
+ req.should have_been_requested
610
+ result.should_not be_nil
611
+ result.should be_true
612
+ end
613
+
614
+ it "submits a POST request for multiple periods on an entity" do
615
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
616
+ {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
617
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/entities/72").
618
+ with(:body => {:scheduled_maintenances => data}.to_json,
619
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
366
620
  to_return(:status => 204)
367
621
 
368
- result = Flapjack::Diner.bulk_create_scheduled_maintenance!(:check => {entity => 'ping', 'pqr.org' => 'ssh'},
369
- :start_time => start_time, :duration => duration, :summary => summary)
370
- req.should have_been_requested
371
- result.should be_true
372
- end
373
-
374
- it "deletes a scheduled maintenance period for a check on an entity" do
375
- start_time = Time.now
376
-
377
- req = stub_request(:delete, "http://#{server}/scheduled_maintenances").
378
- with(:body => {:check => {entity => check}, :start_time => start_time.iso8601},
379
- :headers => {'Content-Type'=>'application/json'}).
622
+ result = Flapjack::Diner.create_scheduled_maintenances_entities(72, data)
623
+ req.should have_been_requested
624
+ result.should_not be_nil
625
+ result.should be_true
626
+ end
627
+
628
+ it "submits a POST request for multiple periods on several entities" do
629
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
630
+ {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
631
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/entities/72,150").
632
+ with(:body => {:scheduled_maintenances => data}.to_json,
633
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
380
634
  to_return(:status => 204)
381
635
 
382
- result = Flapjack::Diner.delete_scheduled_maintenance!(entity, check,
383
- :start_time => start_time)
384
- req.should have_been_requested
385
- result.should be_true
386
- end
636
+ result = Flapjack::Diner.create_scheduled_maintenances_entities(72, 150, data)
637
+ req.should have_been_requested
638
+ result.should_not be_nil
639
+ result.should be_true
640
+ end
387
641
 
388
- it "deletes scheduled maintenance periods for all checks on an entity" do
389
- start_time = Time.now
642
+ end
390
643
 
391
- req = stub_request(:delete, "http://#{server}/scheduled_maintenances").
392
- with(:body => {:entity => entity, :start_time => start_time.iso8601},
393
- :headers => {'Content-Type'=>'application/json'}).
394
- to_return(:status => 204)
644
+ context 'unscheduled maintenance periods' do
395
645
 
396
- result = Flapjack::Diner.bulk_delete_scheduled_maintenance!(:entity => entity,
397
- :start_time => start_time)
398
- req.should have_been_requested
399
- result.should be_true
400
- end
646
+ it "submits a POST request on an entity" do
647
+ data = [{:duration => 3600, :summary => 'working'}]
648
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/entities/72").
649
+ with(:body => {:unscheduled_maintenances => data}.to_json,
650
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
651
+ to_return(:status => 204)
401
652
 
402
- it "deletes scheduled maintenance periods for checks from multiple entities" do
403
- start_time = Time.now
653
+ result = Flapjack::Diner.create_unscheduled_maintenances_entities(72, data)
654
+ req.should have_been_requested
655
+ result.should_not be_nil
656
+ result.should be_true
657
+ end
658
+
659
+ it "submits a POST request on several entities" do
660
+ data = [{:duration => 3600, :summary => 'working'}]
661
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/entities/72,150").
662
+ with(:body => {:unscheduled_maintenances => data}.to_json,
663
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
664
+ to_return(:status => 204)
404
665
 
405
- req = stub_request(:delete, "http://#{server}/scheduled_maintenances").
406
- with(:body => {:check => {entity => 'ping', 'pqr.org' => 'ssh'},
407
- :start_time => start_time.iso8601},
408
- :headers => {'Content-Type'=>'application/json'}).
666
+ result = Flapjack::Diner.create_unscheduled_maintenances_entities(72, 150, data)
667
+ req.should have_been_requested
668
+ result.should_not be_nil
669
+ result.should be_true
670
+ end
671
+
672
+ it "submits a POST request for multiple periods on several entities" do
673
+ data = [{:duration => 3600, :summary => 'working'},
674
+ {:duration => 3600, :summary => 'more work'}]
675
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/entities/72,150").
676
+ with(:body => {:unscheduled_maintenances => data}.to_json,
677
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
409
678
  to_return(:status => 204)
410
679
 
411
- result = Flapjack::Diner.bulk_delete_scheduled_maintenance!(:check => {entity => 'ping', 'pqr.org' => 'ssh'},
412
- :start_time => start_time)
413
- req.should have_been_requested
414
- result.should be_true
415
- end
680
+ result = Flapjack::Diner.create_unscheduled_maintenances_entities(72, 150, data)
681
+ req.should have_been_requested
682
+ result.should_not be_nil
683
+ result.should be_true
684
+ end
416
685
 
417
- it "deletes an unscheduled maintenance period for a check on an entity" do
418
- end_time = Time.now
686
+ end
419
687
 
420
- req = stub_request(:delete, "http://#{server}/unscheduled_maintenances").
421
- with(:body => {:check => {entity => check}, :end_time => end_time.iso8601},
422
- :headers => {'Content-Type'=>'application/json'}).
423
- to_return(:status => 204)
688
+ context 'test notifications' do
424
689
 
425
- result = Flapjack::Diner.delete_unscheduled_maintenance!(entity, check,
426
- :end_time => end_time)
427
- req.should have_been_requested
428
- result.should be_true
429
- end
690
+ it "submits a POST request for an entity" do
691
+ req = stub_request(:post, "http://#{server}/test_notifications/entities/72").
692
+ with(:body => {:test_notifications => [{:summary => 'testing'}]}.to_json,
693
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
694
+ to_return(:status => 204)
430
695
 
431
- it "deletes scheduled maintenance periods for all checks on an entity" do
432
- end_time = Time.now
696
+ result = Flapjack::Diner.create_test_notifications_entities(72, [:summary => 'testing'])
697
+ req.should have_been_requested
698
+ result.should_not be_nil
699
+ result.should be_true
700
+ end
433
701
 
434
- req = stub_request(:delete, "http://#{server}/unscheduled_maintenances").
435
- with(:body => {:entity => entity, :end_time => end_time.iso8601},
436
- :headers => {'Content-Type'=>'application/json'}).
702
+ it "submits a POST request for several entities" do
703
+ req = stub_request(:post, "http://#{server}/test_notifications/entities/72,150").
704
+ with(:body => {:test_notifications => [{:summary => 'testing'}]}.to_json,
705
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
437
706
  to_return(:status => 204)
438
707
 
439
- result = Flapjack::Diner.bulk_delete_unscheduled_maintenance!(:entity => entity,
440
- :end_time => end_time)
441
- req.should have_been_requested
442
- result.should be_true
443
- end
444
-
445
- it "deletes scheduled maintenance periods for checks from multiple entities" do
446
- end_time = Time.now
708
+ result = Flapjack::Diner.create_test_notifications_entities(72, 150, [:summary => 'testing'])
709
+ req.should have_been_requested
710
+ result.should_not be_nil
711
+ result.should be_true
712
+ end
713
+
714
+ it "submits a POST request for multiple notifications on an entity" do
715
+ data = [{:summary => 'testing'}, {:summary => 'another test'}]
716
+ req = stub_request(:post, "http://#{server}/test_notifications/entities/72").
717
+ with(:body => {:test_notifications => data}.to_json,
718
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
719
+ to_return(:status => 204)
447
720
 
448
- req = stub_request(:delete, "http://#{server}/unscheduled_maintenances").
449
- with(:body => {:check => {entity => 'ping', 'pqr.org' => 'ssh'},
450
- :end_time => end_time.iso8601},
451
- :headers => {'Content-Type'=>'application/json'}).
721
+ result = Flapjack::Diner.create_test_notifications_entities(72, data)
722
+ req.should have_been_requested
723
+ result.should_not be_nil
724
+ result.should be_true
725
+ end
726
+
727
+ it "submits a POST request for multiple notifications on several entities" do
728
+ data = [{:summary => 'testing'}, {:summary => 'another test'}]
729
+ req = stub_request(:post, "http://#{server}/test_notifications/entities/72,150").
730
+ with(:body => {:test_notifications => data}.to_json,
731
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
452
732
  to_return(:status => 204)
453
733
 
454
- result = Flapjack::Diner.bulk_delete_unscheduled_maintenance!(:check => {entity => 'ping', 'pqr.org' => 'ssh'},
455
- :end_time => end_time)
456
- req.should have_been_requested
457
- result.should be_true
458
- end
734
+ result = Flapjack::Diner.create_test_notifications_entities(72, 150, data)
735
+ req.should have_been_requested
736
+ result.should_not be_nil
737
+ result.should be_true
738
+ end
459
739
 
740
+ end
460
741
 
461
- it "returns a list of contacts" do
462
- req = stub_request(:get, "http://#{server}/contacts").to_return(
463
- :body => response)
742
+ end
464
743
 
465
- result = Flapjack::Diner.contacts
466
- req.should have_been_requested
467
- result.should_not be_nil
468
- result.should == response_body
469
- end
744
+ context 'read' do
745
+ it "submits a GET request for all entities" do
746
+ req = stub_request(:get, "http://#{server}/entities").
747
+ to_return(:body => response_with_data('entities'))
748
+
749
+ result = Flapjack::Diner.entities
750
+ req.should have_been_requested
751
+ result.should_not be_nil
752
+ end
753
+
754
+ it "submits a GET request for one entity" do
755
+ req = stub_request(:get, "http://#{server}/entities/72").
756
+ to_return(:body => response_with_data('entities'))
757
+
758
+ result = Flapjack::Diner.entities('72')
759
+ req.should have_been_requested
760
+ result.should_not be_nil
761
+ end
762
+
763
+ it "submits a GET request for several entities" do
764
+ req = stub_request(:get, "http://#{server}/entities/72,150").
765
+ to_return(:body => response_with_data('entities'))
766
+
767
+ result = Flapjack::Diner.entities('72', '150')
768
+ req.should have_been_requested
769
+ result.should_not be_nil
770
+ end
771
+ end
470
772
 
471
- it "returns a single contact" do
472
- contact_id = '21'
473
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}").to_return(
474
- :body => response)
773
+ context 'update' do
774
+
775
+ it "submits a PATCH request for an entity" do
776
+ req = stub_request(:patch, "http://#{server}/entities/57").
777
+ with(:body => [{:op => 'replace', :path => '/entities/0/name', :value => 'example3.com'}].to_json,
778
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
779
+ to_return(:status => 204)
780
+
781
+ result = Flapjack::Diner.update_entities('57', :name => 'example3.com')
782
+ req.should have_been_requested
783
+ result.should_not be_nil
784
+ result.should be_true
785
+ end
786
+
787
+ it "submits a PATCH request for unscheduled maintenances on an entity" do
788
+ req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/entities/72").
789
+ with(:body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}].to_json,
790
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
791
+ to_return(:status => 204)
792
+
793
+ result = Flapjack::Diner.update_unscheduled_maintenances_entities('72', :end_time => time)
794
+ req.should have_been_requested
795
+ result.should_not be_nil
796
+ result.should be_true
797
+ end
798
+
799
+ it "submits a PATCH request for unscheduled maintenances on several entities" do
800
+ req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/entities/72,150").
801
+ with(:body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}].to_json,
802
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
803
+ to_return(:status => 204)
804
+
805
+ result = Flapjack::Diner.update_unscheduled_maintenances_entities('72', '150', :end_time => time)
806
+ req.should have_been_requested
807
+ result.should_not be_nil
808
+ result.should be_true
809
+ end
475
810
 
476
- result = Flapjack::Diner.contact(contact_id)
477
- req.should have_been_requested
478
- result.should_not be_nil
479
- result.should == response_body
480
- end
811
+ end
481
812
 
482
- it "returns notification rules for a contact" do
483
- contact_id = '21'
484
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}/notification_rules").to_return(
485
- :body => response)
813
+ context 'delete' do
486
814
 
487
- result = Flapjack::Diner.notification_rules(contact_id)
488
- req.should have_been_requested
489
- result.should_not be_nil
490
- result.should == response_body
491
- end
815
+ it "submits a DELETE request for scheduled maintenances on an entity" do
816
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/entities/72").
817
+ with(:query => {:start_time => time.iso8601}).
818
+ to_return(:status => 204)
492
819
 
493
- it "returns a single notification rule" do
494
- rule_id = '00001'
495
- req = stub_request(:get, "http://#{server}/notification_rules/#{rule_id}").
496
- to_return(:body => response)
820
+ result = Flapjack::Diner.delete_scheduled_maintenances_entities('72', :start_time => time.iso8601)
821
+ req.should have_been_requested
822
+ result.should_not be_nil
823
+ result.should be_true
824
+ end
497
825
 
498
- result = Flapjack::Diner.notification_rule(rule_id)
499
- req.should have_been_requested
500
- result.should_not be_nil
501
- result.should == response_body
502
- end
826
+ it "submits a DELETE request for scheduled maintenances on several entities" do
827
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/entities/72,150").
828
+ with(:query => {:start_time => time.iso8601}).
829
+ to_return(:status => 204)
503
830
 
504
- it "creates a notification rule" do
505
- rule_result = rule_data.merge('id' => '00001')
831
+ result = Flapjack::Diner.delete_scheduled_maintenances_entities('72', '150', :start_time => time.iso8601)
832
+ req.should have_been_requested
833
+ result.should_not be_nil
834
+ result.should be_true
835
+ end
506
836
 
507
- req = stub_request(:post, "http://#{server}/notification_rules").
508
- with(:body => rule_data,
509
- :headers => {'Content-Type'=>'application/json'}).
510
- to_return(:body => rule_result.to_json)
837
+ end
511
838
 
512
- result = Flapjack::Diner.create_notification_rule!(rule_data)
513
- req.should have_been_requested
514
- result.should == rule_result
515
839
  end
516
840
 
517
- it "updates a notification rule" do
518
- rule_id = '00001'
519
-
520
- rule_data_with_id = rule_data.merge('id' => rule_id)
841
+ context 'checks' do
842
+ context 'create' do
521
843
 
522
- req = stub_request(:put, "http://#{server}/notification_rules/#{rule_id}").
523
- with(:body => rule_data_with_id,
524
- :headers => {'Content-Type'=>'application/json'}).
525
- to_return(:body => rule_data_with_id.to_json)
844
+ context 'scheduled maintenance periods' do
526
845
 
527
- result = Flapjack::Diner.update_notification_rule!(rule_id, rule_data_with_id)
528
- req.should have_been_requested
529
- result.should == rule_data_with_id
530
- end
846
+ it "submits a POST request on a check" do
847
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
848
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
849
+ with(:body => {:scheduled_maintenances => data}.to_json,
850
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
851
+ to_return(:status => 204)
531
852
 
532
- it "deletes a notification rule" do
533
- rule_id = '00001'
534
- req = stub_request(:delete, "http://#{server}/notification_rules/#{rule_id}").to_return(
535
- :status => 204)
853
+ result = Flapjack::Diner.create_scheduled_maintenances_checks('example.com:SSH', data)
854
+ req.should have_been_requested
855
+ result.should_not be_nil
856
+ result.should be_true
857
+ end
858
+
859
+ it "submits a POST request on several checks" do
860
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
861
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH,example2.com:PING").
862
+ with(:body => {:scheduled_maintenances => data}.to_json,
863
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
864
+ to_return(:status => 204)
536
865
 
537
- result = Flapjack::Diner.delete_notification_rule!(rule_id)
538
- req.should have_been_requested
539
- result.should be_true
540
- end
866
+ result = Flapjack::Diner.create_scheduled_maintenances_checks('example.com:SSH', 'example2.com:PING', data)
867
+ req.should have_been_requested
868
+ result.should_not be_nil
869
+ result.should be_true
870
+ end
871
+
872
+ it "submits a POST request for multiple periods on a check" do
873
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
874
+ {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
875
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
876
+ with(:body => {:scheduled_maintenances => data}.to_json,
877
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
878
+ to_return(:status => 204)
541
879
 
542
- it "gets a list of entity tags" do
543
- req = stub_request(:get, "http://#{server}/entities/#{entity}/tags").to_return(
544
- :body => ['web', 'app'].to_json)
880
+ result = Flapjack::Diner.create_scheduled_maintenances_checks('example.com:SSH', data)
881
+ req.should have_been_requested
882
+ result.should_not be_nil
883
+ result.should be_true
884
+ end
885
+
886
+ it "submits a POST request for multiple periods on several checks" do
887
+ data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
888
+ {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
889
+ req = stub_request(:post, "http://#{server}/scheduled_maintenances/checks/example.com:SSH,example2.com:PING").
890
+ with(:body => {:scheduled_maintenances => data}.to_json,
891
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
892
+ to_return(:status => 204)
545
893
 
546
- result = Flapjack::Diner.entity_tags(entity)
547
- req.should have_been_requested
548
- result.should == ['web', 'app']
549
- end
894
+ result = Flapjack::Diner.create_scheduled_maintenances_checks('example.com:SSH', 'example2.com:PING', data)
895
+ req.should have_been_requested
896
+ result.should_not be_nil
897
+ result.should be_true
898
+ end
550
899
 
551
- it "adds tags to an entity" do
552
- req = stub_request(:post, "http://#{server}/entities/#{entity}/tags").
553
- with(:body => {:tag => ['web', 'app']},
554
- :headers => {'Content-Type'=>'application/json'}).
555
- to_return(:body => ['web', 'app'].to_json)
900
+ end
556
901
 
557
- result = Flapjack::Diner.add_entity_tags!(entity, 'web', 'app')
558
- req.should have_been_requested
559
- result.should == ['web', 'app']
560
- end
902
+ context 'unscheduled maintenance periods' do
561
903
 
562
- it "deletes tags from an entity" do
563
- req = stub_request(:delete, "http://#{server}/entities/#{entity}/tags").
564
- with(:body => {:tag => ['web']},
565
- :headers => {'Content-Type'=>'application/json'}).
904
+ it "submits a POST request on a check" do
905
+ data = [{:duration => 3600, :summary => 'working'}]
906
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH").
907
+ with(:body => {:unscheduled_maintenances => data}.to_json,
908
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
566
909
  to_return(:status => 204)
567
910
 
568
- result = Flapjack::Diner.delete_entity_tags!(entity, 'web')
569
- req.should have_been_requested
570
- result.should be_true
571
- end
572
-
573
- it "gets a list of contact tags" do
574
- contact_id = 21
575
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}/tags").to_return(
576
- :body => ['user', 'admin'].to_json)
577
-
578
- result = Flapjack::Diner.contact_tags(contact_id)
579
- req.should have_been_requested
580
- result.should == ['user', 'admin']
581
- end
911
+ result = Flapjack::Diner.create_unscheduled_maintenances_checks('example.com:SSH', data)
912
+ req.should have_been_requested
913
+ result.should_not be_nil
914
+ result.should be_true
915
+ end
916
+
917
+ it "submits a POST request on several checks" do
918
+ data = [{:duration => 3600, :summary => 'working'}]
919
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH,example2.com:PING").
920
+ with(:body => {:unscheduled_maintenances => data}.to_json,
921
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
922
+ to_return(:status => 204)
582
923
 
583
- it "gets tags for a contact's linked entities" do
584
- contact_id = 21
585
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}/entity_tags").to_return(
586
- :body => {'entity_1' => ['web', 'app']}.to_json)
924
+ result = Flapjack::Diner.create_unscheduled_maintenances_checks('example.com:SSH', 'example2.com:PING', data)
925
+ req.should have_been_requested
926
+ result.should_not be_nil
927
+ result.should be_true
928
+ end
929
+
930
+ it "submits a POST request for multiple periods on several checks" do
931
+ data = [{:duration => 3600, :summary => 'working'},
932
+ {:duration => 3600, :summary => 'more work'}]
933
+ req = stub_request(:post, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH,example2.com:PING").
934
+ with(:body => {:unscheduled_maintenances => data}.to_json,
935
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
936
+ to_return(:status => 204)
587
937
 
588
- result = Flapjack::Diner.contact_entitytags(contact_id)
589
- req.should have_been_requested
590
- result.should == {'entity_1' => ['web', 'app']}
591
- end
938
+ result = Flapjack::Diner.create_unscheduled_maintenances_checks('example.com:SSH', 'example2.com:PING', data)
939
+ req.should have_been_requested
940
+ result.should_not be_nil
941
+ result.should be_true
942
+ end
592
943
 
593
- it "adds tags to a contact's linked entities" do
594
- contact_id = 21
595
- req = stub_request(:post, "http://#{server}/contacts/#{contact_id}/entity_tags").
596
- with(:body => {:entity => {'entity_1' => ['web', 'app']}},
597
- :headers => {'Content-Type'=>'application/json'}).
598
- to_return(:body => {'entity_1' => ['web', 'app']}.to_json)
944
+ end
599
945
 
600
- result = Flapjack::Diner.add_contact_entitytags!(contact_id, {'entity_1' => ['web', 'app']})
601
- req.should have_been_requested
602
- result.should == {'entity_1' => ['web', 'app']}
603
- end
946
+ context 'test notifications' do
604
947
 
605
- it "deletes tags from a contact's linked entities" do
606
- contact_id = 21
607
- req = stub_request(:delete, "http://#{server}/contacts/#{contact_id}/entity_tags").
608
- with(:body => {:entity => {'entity_1' => ['web', 'app']}},
609
- :headers => {'Content-Type'=>'application/json'}).
948
+ it "submits a POST request for a check" do
949
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH").
950
+ with(:body => {:test_notifications => [{:summary => 'testing'}]}.to_json,
951
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
610
952
  to_return(:status => 204)
611
953
 
612
- result = Flapjack::Diner.delete_contact_entitytags!(contact_id, {'entity_1' => ['web', 'app']})
613
- req.should have_been_requested
614
- result.should be_true
615
- end
616
-
617
- it "adds tags to a contact" do
618
- contact_id = 21
619
- req = stub_request(:post, "http://#{server}/contacts/#{contact_id}/tags").
620
- with(:body => {:tag => ['admin', 'user']},
621
- :headers => {'Content-Type'=>'application/json'}).
622
- to_return(:body => ['admin', 'user'].to_json)
954
+ result = Flapjack::Diner.create_test_notifications_checks('example.com:SSH', [{:summary => 'testing'}])
955
+ req.should have_been_requested
956
+ result.should_not be_nil
957
+ result.should be_true
958
+ end
623
959
 
624
- result = Flapjack::Diner.add_contact_tags!(contact_id, 'admin', 'user')
625
- req.should have_been_requested
626
- result.should == ['admin', 'user']
627
- end
960
+ it "submits a POST request for several checks" do
961
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH,example2.com:PING").
962
+ with(:test_notifications => [{:summary => 'testing'}]).
963
+ to_return(:status => 204)
628
964
 
629
- it "deletes tags from a contact" do
630
- contact_id = 21
631
- req = stub_request(:delete, "http://#{server}/contacts/#{contact_id}/tags").
632
- with(:body => {:tag => ['admin']},
633
- :headers => {'Content-Type'=>'application/json'}).
965
+ result = Flapjack::Diner.create_test_notifications_checks('example.com:SSH', 'example2.com:PING', [{:summary => 'testing'}])
966
+ req.should have_been_requested
967
+ result.should_not be_nil
968
+ result.should be_true
969
+ end
970
+
971
+ it "submits a POST request for multiple notifications on a check" do
972
+ data = [{:summary => 'testing'}, {:summary => 'more testing'}]
973
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH").
974
+ with(:body => {:test_notifications => data}.to_json,
975
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
634
976
  to_return(:status => 204)
635
977
 
636
- result = Flapjack::Diner.delete_contact_tags!(contact_id, 'admin')
637
- req.should have_been_requested
638
- result.should be_true
639
- end
978
+ result = Flapjack::Diner.create_test_notifications_checks('example.com:SSH', data)
979
+ req.should have_been_requested
980
+ result.should_not be_nil
981
+ result.should be_true
982
+ end
983
+
984
+ it "submits a POST request for multiple notifications on several checks" do
985
+ data = [{:summary => 'testing'}, {:summary => 'more testing'}]
986
+ req = stub_request(:post, "http://#{server}/test_notifications/checks/example.com:SSH,example2.com:PING").
987
+ with(:body => {:test_notifications => data}.to_json,
988
+ :headers => {'Content-Type'=>'application/vnd.api+json'}).
989
+ to_return(:status => 204)
640
990
 
641
- it "returns a list of a contact's notification media values" do
642
- contact_id = '21'
643
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}/media").to_return(
644
- :body => response)
991
+ result = Flapjack::Diner.create_test_notifications_checks('example.com:SSH', 'example2.com:PING', data)
992
+ req.should have_been_requested
993
+ result.should_not be_nil
994
+ result.should be_true
995
+ end
645
996
 
646
- result = Flapjack::Diner.contact_media(contact_id)
647
- req.should have_been_requested
648
- result.should_not be_nil
649
- result.should == response_body
650
- end
997
+ end
651
998
 
652
- it "returns the values for a contact's notification medium" do
653
- contact_id = '21'
654
- media = 'sms'
655
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}/media/#{media}").to_return(
656
- :body => response)
999
+ end
657
1000
 
658
- result = Flapjack::Diner.contact_medium(contact_id, media)
659
- req.should have_been_requested
660
- result.should_not be_nil
661
- result.should == response_body
662
- end
1001
+ context 'update' do
663
1002
 
664
- it "updates a contact's notification medium" do
665
- contact_id = '21'
666
- media_type = 'sms'
667
- media_data = {"address" => "dmitri@example.com",
668
- "interval" => 900}
1003
+ it "submits a PATCH request for unscheduled maintenances on a check" do
1004
+ req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH").
1005
+ with(:body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}].to_json,
1006
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
1007
+ to_return(:status => 204)
669
1008
 
670
- req = stub_request(:put, "http://#{server}/contacts/#{contact_id}/media/#{media_type}").with(
671
- :body => media_data).to_return(:body => media_data.to_json)
1009
+ result = Flapjack::Diner.update_unscheduled_maintenances_checks('example.com:SSH', :end_time => time)
1010
+ req.should have_been_requested
1011
+ result.should_not be_nil
1012
+ result.should be_true
1013
+ end
672
1014
 
673
- result = Flapjack::Diner.update_contact_medium!(contact_id, media_type, media_data)
674
- req.should have_been_requested
675
- result.should == media_data
676
- end
1015
+ it "submits a PATCH request for unscheduled maintenances on several checks" do
1016
+ req = stub_request(:patch, "http://#{server}/unscheduled_maintenances/checks/example.com:SSH,example2.com:PING").
1017
+ with(:body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}].to_json,
1018
+ :headers => {'Content-Type'=>'application/json-patch+json'}).
1019
+ to_return(:status => 204)
677
1020
 
678
- it "deletes a contact's notification medium" do
679
- contact_id = '21'
680
- media = 'sms'
681
- req = stub_request(:delete, "http://#{server}/contacts/#{contact_id}/media/#{media}").to_return(
682
- :status => 204)
683
-
684
- result = Flapjack::Diner.delete_contact_medium!(contact_id, media)
685
- req.should have_been_requested
686
- result.should be_true
687
- end
1021
+ result = Flapjack::Diner.update_unscheduled_maintenances_checks('example.com:SSH', 'example2.com:PING', :end_time => time)
1022
+ req.should have_been_requested
1023
+ result.should_not be_nil
1024
+ result.should be_true
1025
+ end
688
1026
 
689
- it "returns a contact's timezone" do
690
- contact_id = '21'
691
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}/timezone").to_return(
692
- :body => response)
1027
+ end
693
1028
 
694
- result = Flapjack::Diner.contact_timezone(contact_id)
695
- req.should have_been_requested
696
- result.should_not be_nil
697
- result.should == response_body
698
- end
1029
+ context 'delete' do
699
1030
 
700
- it "updates a contact's timezone" do
701
- contact_id = '21'
702
- timezone_data = {'timezone' => "Australia/Perth"}
1031
+ it "submits a DELETE request for scheduled maintenances on a check" do
1032
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
1033
+ with(:query => {:start_time => time.iso8601}).
1034
+ to_return(:status => 204)
703
1035
 
704
- req = stub_request(:put, "http://#{server}/contacts/#{contact_id}/timezone").with(
705
- :body => timezone_data).to_return(:body => timezone_data.to_json)
1036
+ result = Flapjack::Diner.delete_scheduled_maintenances_checks('example.com:SSH', :start_time => time.iso8601)
1037
+ req.should have_been_requested
1038
+ result.should_not be_nil
1039
+ result.should be_true
1040
+ end
706
1041
 
707
- result = Flapjack::Diner.update_contact_timezone!(contact_id, timezone_data['timezone'])
708
- req.should have_been_requested
709
- result.should == timezone_data
710
- end
1042
+ it "submits a DELETE request for scheduled maintenances on several checks" do
1043
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com:SSH,example2.com:PING").
1044
+ with(:query => {:start_time => time.iso8601}).
1045
+ to_return(:status => 204)
711
1046
 
712
- it "deletes a contact's timezone" do
713
- contact_id = '21'
714
- req = stub_request(:delete, "http://#{server}/contacts/#{contact_id}/timezone").to_return(
715
- :status => 204)
1047
+ result = Flapjack::Diner.delete_scheduled_maintenances_checks('example.com:SSH', 'example2.com:PING', :start_time => time.iso8601)
1048
+ req.should have_been_requested
1049
+ result.should_not be_nil
1050
+ result.should be_true
1051
+ end
716
1052
 
717
- result = Flapjack::Diner.delete_contact_timezone!(contact_id)
718
- req.should have_been_requested
719
- result.should be_true
1053
+ end
720
1054
  end
721
1055
 
722
- it "returns nil with last_error available when requesting the timezone for a non existant contact" do
723
- contact_id = 'jkfldsj'
724
- req = stub_request(:get, "http://#{server}/contacts/#{contact_id}/timezone").to_return(
725
- :body => '{"errors": ["Not found"]}', :status => 404)
1056
+ context 'reports' do
1057
+ context 'read' do
1058
+
1059
+ ['status', 'scheduled_maintenance', 'unscheduled_maintenance', 'downtime', 'outage'].each do |report_type|
1060
+
1061
+ it "submits a GET request for a #{report_type} report on all entities" do
1062
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/entities").
1063
+ to_return(:body => response_with_data("#{report_type}_reports"))
1064
+
1065
+ result = Flapjack::Diner.send("#{report_type}_report_entities".to_sym)
1066
+ req.should have_been_requested
1067
+ result.should_not be_nil
1068
+ end
1069
+
1070
+ it "submits a GET request for a #{report_type} report on one entity" do
1071
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/entities/72").
1072
+ to_return(:body => response_with_data("#{report_type}_reports"))
1073
+
1074
+ result = Flapjack::Diner.send("#{report_type}_report_entities".to_sym, '72')
1075
+ req.should have_been_requested
1076
+ result.should_not be_nil
1077
+ end
1078
+
1079
+ it "submits a GET request for a #{report_type} report on several entities" do
1080
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/entities/72,150").
1081
+ to_return(:body => response_with_data("#{report_type}_reports"))
1082
+
1083
+ result = Flapjack::Diner.send("#{report_type}_report_entities".to_sym, '72', '150')
1084
+ req.should have_been_requested
1085
+ result.should_not be_nil
1086
+ end
1087
+
1088
+ it "submits a GET request for a #{report_type} report on all checks" do
1089
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks").
1090
+ to_return(:body => response_with_data("#{report_type}_reports"))
1091
+
1092
+ result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym)
1093
+ req.should have_been_requested
1094
+ result.should_not be_nil
1095
+ end
1096
+
1097
+ it "submits a GET request for a #{report_type} report on one check" do
1098
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH").
1099
+ to_return(:body => response_with_data("#{report_type}_reports"))
1100
+
1101
+ result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym,
1102
+ 'example.com:SSH')
1103
+ req.should have_been_requested
1104
+ result.should_not be_nil
1105
+ end
1106
+
1107
+ it "submits a GET request for a #{report_type} report on several checks" do
1108
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH,example2.com:PING").
1109
+ to_return(:body => response_with_data("#{report_type}_reports"))
1110
+
1111
+ result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym,
1112
+ 'example.com:SSH', 'example2.com:PING')
1113
+ req.should have_been_requested
1114
+ result.should_not be_nil
1115
+ end
1116
+
1117
+ end
1118
+
1119
+ ['scheduled_maintenance', 'unscheduled_maintenance', 'downtime', 'outage'].each do |report_type|
1120
+
1121
+ let(:start_time) { Time.now }
1122
+ let(:end_time) { start_time + (60 * 60 * 12) }
1123
+
1124
+ it "submits a time-limited GET request for a #{report_type} report on all entities" do
1125
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/entities").
1126
+ with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1127
+ to_return(:body => response_with_data("#{report_type}_reports"))
1128
+
1129
+ result = Flapjack::Diner.send("#{report_type}_report_entities".to_sym,
1130
+ :start_time => start_time, :end_time => end_time)
1131
+ req.should have_been_requested
1132
+ result.should_not be_nil
1133
+ end
1134
+
1135
+ it "submits a time-limited GET request for a #{report_type} report on one entity" do
1136
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/entities/72").
1137
+ with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1138
+ to_return(:body => response_with_data("#{report_type}_reports"))
1139
+
1140
+ result = Flapjack::Diner.send("#{report_type}_report_entities".to_sym,
1141
+ '72', :start_time => start_time, :end_time => end_time)
1142
+ req.should have_been_requested
1143
+ result.should_not be_nil
1144
+ end
1145
+
1146
+ it "submits a time-limited GET request for a #{report_type} report on several entities" do
1147
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/entities/72,150").
1148
+ with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1149
+ to_return(:body => response_with_data("#{report_type}_reports"))
1150
+
1151
+ result = Flapjack::Diner.send("#{report_type}_report_entities".to_sym,
1152
+ '72', '150', :start_time => start_time, :end_time => end_time)
1153
+ req.should have_been_requested
1154
+ result.should_not be_nil
1155
+ end
1156
+
1157
+ it "submits a time-limited GET request for a #{report_type} report on all checks" do
1158
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks").
1159
+ with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1160
+ to_return(:body => response_with_data("#{report_type}_reports"))
1161
+
1162
+ result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym,
1163
+ :start_time => start_time, :end_time => end_time)
1164
+ req.should have_been_requested
1165
+ result.should_not be_nil
1166
+ end
1167
+
1168
+ it "submits a time-limited GET request for a #{report_type} report on one check" do
1169
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH").
1170
+ with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1171
+ to_return(:body => response_with_data("#{report_type}_reports"))
1172
+
1173
+ result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym,
1174
+ 'example.com:SSH', :start_time => start_time, :end_time => end_time)
1175
+ req.should have_been_requested
1176
+ result.should_not be_nil
1177
+ end
1178
+
1179
+ it "submits a time-limited GET request for a #{report_type} report on several checks" do
1180
+ req = stub_request(:get, "http://#{server}/#{report_type}_report/checks/example.com:SSH,example2.com:PING").
1181
+ with(:query => {:start_time => start_time.iso8601, :end_time => end_time.iso8601}).
1182
+ to_return(:body => response_with_data("#{report_type}_reports"))
1183
+
1184
+ result = Flapjack::Diner.send("#{report_type}_report_checks".to_sym,
1185
+ 'example.com:SSH', 'example2.com:PING',
1186
+ :start_time => start_time, :end_time => end_time)
1187
+ req.should have_been_requested
1188
+ result.should_not be_nil
1189
+ end
1190
+
1191
+ end
726
1192
 
727
- result = Flapjack::Diner.contact_timezone(contact_id)
728
- last_error = Flapjack::Diner.last_error
729
- req.should have_been_requested
730
- result.should be_nil
731
- last_error.should_not be_nil
1193
+ end
732
1194
  end
733
1195
 
734
1196
  context "logging" do
@@ -740,8 +1202,9 @@ describe Flapjack::Diner do
740
1202
  end
741
1203
 
742
1204
  it "logs a GET request without a path" do
743
- req = stub_request(:get, "http://#{server}/entities").to_return(
744
- :body => response)
1205
+ response = response_with_data('entities')
1206
+ req = stub_request(:get, "http://#{server}/entities").
1207
+ to_return(:body => response)
745
1208
 
746
1209
  logger.should_receive(:info).with("GET http://#{server}/entities")
747
1210
  logger.should_receive(:info).with(" Response Code: 200")
@@ -750,63 +1213,29 @@ describe Flapjack::Diner do
750
1213
  result = Flapjack::Diner.entities
751
1214
  req.should have_been_requested
752
1215
  result.should_not be_nil
753
- result.should == response_body
754
- end
755
-
756
- it "logs a GET request with a path" do
757
- req = stub_request(:get, "http://#{server}/checks/#{entity}").to_return(
758
- :body => response)
759
-
760
- logger.should_receive(:info).with("GET http://#{server}/checks/#{entity}")
761
- logger.should_receive(:info).with(" Response Code: 200")
762
- logger.should_receive(:info).with(" Response Body: #{response}")
763
-
764
- result = Flapjack::Diner.checks(entity)
765
- req.should have_been_requested
766
- result.should_not be_nil
767
- result.should == response_body
768
1216
  end
769
1217
 
770
1218
  it "logs a POST request" do
771
- req = stub_request(:post, "http://#{server}/acknowledgements").
772
- with(:body => {:check => {entity => check}, :summary => 'dealing with it'},
773
- :headers => {'Content-Type'=>'application/json'}).
774
- to_return(:status => 204)
775
- logger.should_receive(:info).with("POST http://#{server}/acknowledgements\n" +
776
- " Params: {:summary=>\"dealing with it\", :check=>{\"ex-abcd-data-17.example.com\"=>\"ping\"}}")
777
- logger.should_receive(:info).with(" Response Code: 204")
1219
+ req = stub_request(:post, "http://#{server}/test_notifications/entities/27").
1220
+ to_return(:status => 200)
1221
+ logger.should_receive(:info).with("POST http://#{server}/test_notifications/entities/27\n" +
1222
+ " Params: {:test_notifications=>[{:summary=>\"dealing with it\"}]}")
1223
+ logger.should_receive(:info).with(" Response Code: 200")
778
1224
 
779
- result = Flapjack::Diner.acknowledge!(entity, check, :summary => 'dealing with it')
1225
+ result = Flapjack::Diner.create_test_notifications_entities(27, [{:summary => 'dealing with it'}])
780
1226
  req.should have_been_requested
781
1227
  result.should be_true
782
1228
  end
783
1229
 
784
- it "logs a JSON put request" do
785
- contact_id = '21'
786
- timezone_data = {:timezone => "Australia/Perth"}
787
-
788
- req = stub_request(:put, "http://#{server}/contacts/#{contact_id}/timezone").with(
789
- :body => timezone_data).to_return(:body => timezone_data.to_json, :status => [200, 'OK'])
790
-
791
- logger.should_receive(:info).
792
- with("PUT http://#{server}/contacts/#{contact_id}/timezone\n Params: #{timezone_data.inspect}")
793
- logger.should_receive(:info).with(" Response Code: 200 OK")
794
- logger.should_receive(:info).with(" Response Body: #{timezone_data.to_json}")
795
-
796
- result = Flapjack::Diner.update_contact_timezone!(contact_id, timezone_data[:timezone])
797
- req.should have_been_requested
798
- result.should == {'timezone' => "Australia/Perth"}
799
- end
800
-
801
1230
  it "logs a DELETE request" do
802
- contact_id = '21'
803
- req = stub_request(:delete, "http://#{server}/contacts/#{contact_id}/timezone").to_return(
804
- :status => 204)
1231
+ req = stub_request(:delete, "http://#{server}/scheduled_maintenances/checks/example.com:SSH").
1232
+ with(:query => {:start_time => time.iso8601}).
1233
+ to_return(:status => 204)
805
1234
 
806
- logger.should_receive(:info).with("DELETE http://#{server}/contacts/#{contact_id}/timezone")
1235
+ logger.should_receive(:info).with("DELETE http://#{server}/scheduled_maintenances/checks/#{CGI.escape('example.com:SSH')}?start_time=#{CGI.escape(time.iso8601)}")
807
1236
  logger.should_receive(:info).with(" Response Code: 204")
808
1237
 
809
- result = Flapjack::Diner.delete_contact_timezone!(contact_id)
1238
+ result = Flapjack::Diner.delete_scheduled_maintenances_checks('example.com:SSH', :start_time => time)
810
1239
  req.should have_been_requested
811
1240
  result.should be_true
812
1241
  end
@@ -838,34 +1267,7 @@ describe Flapjack::Diner do
838
1267
  req = stub_request(:get, /http:\/\/#{server}\/*/)
839
1268
 
840
1269
  expect {
841
- Flapjack::Diner.check_status(entity, nil)
842
- }.to raise_error
843
- req.should_not have_been_requested
844
- end
845
-
846
- it "raises an exception if bulk queries don't have entity or check arguments" do
847
- req = stub_request(:get, /http:\/\/#{server}\/*/)
848
-
849
- expect {
850
- Flapjack::Diner.bulk_downtime({})
851
- }.to raise_error
852
- req.should_not have_been_requested
853
- end
854
-
855
- it "raises an exception if bulk queries have invalid entity arguments" do
856
- req = stub_request(:get, /http:\/\/#{server}\/*/)
857
-
858
- expect {
859
- Flapjack::Diner.bulk_scheduled_maintenances(:entity => 23)
860
- }.to raise_error
861
- req.should_not have_been_requested
862
- end
863
-
864
- it "raises an exception if bulk queries have invalid check arguments" do
865
- req = stub_request(:get, /http:\/\/#{server}\/*/)
866
-
867
- expect {
868
- Flapjack::Diner.bulk_outages(:check => {'abc.com' => ['ping', 5]})
1270
+ Flapjack::Diner.delete_scheduled_maintenances_checks('example.com:SSH', :start_time => nil)
869
1271
  }.to raise_error
870
1272
  req.should_not have_been_requested
871
1273
  end
@@ -879,7 +1281,8 @@ describe Flapjack::Diner do
879
1281
  req = stub_request(:get, /http:\/\/#{server}\/*/)
880
1282
 
881
1283
  expect {
882
- Flapjack::Diner.downtime(entity, :start_time => start, :end_time => finish_str)
1284
+ Flapjack::Diner.downtime_report_checks('example.com:SSH',
1285
+ :start_time => start_time, :end_time => end_time)
883
1286
  }.to raise_error
884
1287
  req.should_not have_been_requested
885
1288
  end