flapjack-diner 1.4.0 → 2.0.0.a4

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -1
  4. data/README.md +620 -413
  5. data/flapjack-diner.gemspec +1 -1
  6. data/lib/flapjack-diner/argument_validator.rb +77 -7
  7. data/lib/flapjack-diner/configuration.rb +409 -0
  8. data/lib/flapjack-diner/index_range.rb +42 -0
  9. data/lib/flapjack-diner/log_formatter.rb +22 -0
  10. data/lib/flapjack-diner/query.rb +114 -0
  11. data/lib/flapjack-diner/relationships.rb +180 -0
  12. data/lib/flapjack-diner/request.rb +280 -0
  13. data/lib/flapjack-diner/resources.rb +64 -0
  14. data/lib/flapjack-diner/response.rb +91 -0
  15. data/lib/flapjack-diner/tools.rb +47 -251
  16. data/lib/flapjack-diner/utility.rb +16 -0
  17. data/lib/flapjack-diner/version.rb +1 -1
  18. data/lib/flapjack-diner.rb +54 -20
  19. data/spec/argument_validator_spec.rb +87 -28
  20. data/spec/flapjack-diner_spec.rb +42 -64
  21. data/spec/relationships_spec.rb +211 -0
  22. data/spec/resources/checks_spec.rb +219 -79
  23. data/spec/resources/contacts_spec.rb +179 -151
  24. data/spec/resources/events_spec.rb +208 -0
  25. data/spec/resources/maintenance_periods_spec.rb +177 -565
  26. data/spec/resources/media_spec.rb +157 -171
  27. data/spec/resources/metrics_spec.rb +45 -0
  28. data/spec/resources/rules_spec.rb +278 -0
  29. data/spec/resources/states_spec.rb +93 -0
  30. data/spec/resources/statistics_spec.rb +53 -0
  31. data/spec/resources/tags_spec.rb +243 -0
  32. data/spec/spec_helper.rb +16 -0
  33. data/spec/support/fixture_data.rb +541 -0
  34. metadata +33 -31
  35. data/.rubocop.yml +0 -21
  36. data/.rubocop_todo.yml +0 -135
  37. data/lib/flapjack-diner/resources/checks.rb +0 -64
  38. data/lib/flapjack-diner/resources/contacts.rb +0 -70
  39. data/lib/flapjack-diner/resources/entities.rb +0 -68
  40. data/lib/flapjack-diner/resources/maintenance_periods.rb +0 -82
  41. data/lib/flapjack-diner/resources/media.rb +0 -61
  42. data/lib/flapjack-diner/resources/notification_rules.rb +0 -66
  43. data/lib/flapjack-diner/resources/notifications.rb +0 -28
  44. data/lib/flapjack-diner/resources/pagerduty_credentials.rb +0 -59
  45. data/lib/flapjack-diner/resources/reports.rb +0 -33
  46. data/spec/pacts/flapjack-diner-flapjack.json +0 -4515
  47. data/spec/resources/entities_spec.rb +0 -181
  48. data/spec/resources/notification_rules_spec.rb +0 -341
  49. data/spec/resources/notifications_spec.rb +0 -208
  50. data/spec/resources/pagerduty_credentials_spec.rb +0 -237
  51. data/spec/resources/reports_spec.rb +0 -255
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
  require 'flapjack-diner'
3
3
 
4
- describe Flapjack::Diner::Resources::MaintenancePeriods, :pact => true do
4
+ describe Flapjack::Diner::Resources, :pact => true do
5
5
 
6
6
  let(:time) { Time.now }
7
7
 
@@ -10,594 +10,206 @@ describe Flapjack::Diner::Resources::MaintenancePeriods, :pact => true do
10
10
  Flapjack::Diner.logger = nil
11
11
  end
12
12
 
13
- context 'entities' do
14
-
15
- context 'create' do
16
-
17
- context 'scheduled maintenance periods' do
18
-
19
- it "submits a POST request on an entity" do
20
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
21
-
22
- flapjack.given("an entity 'www.example.com' with id '1234' exists").
23
- upon_receiving("a POST request with one scheduled maintenance period").
24
- with(:method => :post, :path => '/scheduled_maintenances/entities/1234',
25
- :headers => {'Content-Type' => 'application/vnd.api+json'},
26
- :body => {:scheduled_maintenances => data}).
27
- will_respond_with(
28
- :status => 204,
29
- :body => '')
30
-
31
- result = Flapjack::Diner.create_scheduled_maintenances_entities('1234', data)
32
- expect(result).not_to be_nil
33
- expect(result).to be_truthy
34
- end
35
-
36
- it "submits a POST request on several entities" do
37
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
38
-
39
- flapjack.given("entities 'www.example.com', id '1234' and 'www2.example.com', id '5678' exist").
40
- upon_receiving("a POST request with one scheduled maintenance period").
41
- with(:method => :post, :path => '/scheduled_maintenances/entities/1234,5678',
42
- :headers => {'Content-Type' => 'application/vnd.api+json'},
43
- :body => {:scheduled_maintenances => data}).
44
- will_respond_with(
45
- :status => 204,
46
- :body => '')
47
-
48
- result = Flapjack::Diner.create_scheduled_maintenances_entities('1234', '5678', data)
49
- expect(result).not_to be_nil
50
- expect(result).to be_truthy
51
- end
52
-
53
- it "submits a POST request for multiple periods on an entity" do
54
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
55
- {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
56
-
57
- flapjack.given("an entity 'www.example.com' with id '1234' exists").
58
- upon_receiving("a POST request with two scheduled maintenance periods").
59
- with(:method => :post, :path => '/scheduled_maintenances/entities/1234',
60
- :headers => {'Content-Type' => 'application/vnd.api+json'},
61
- :body => {:scheduled_maintenances => data}).
62
- will_respond_with(
63
- :status => 204,
64
- :body => '')
65
-
66
- result = Flapjack::Diner.create_scheduled_maintenances_entities('1234', data)
67
- expect(result).not_to be_nil
68
- expect(result).to be_truthy
69
- end
70
-
71
- it "submits a POST request for multiple periods on several entities" do
72
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
73
- {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
74
-
75
- flapjack.given("entities 'www.example.com', id '1234' and 'www2.example.com', id '5678' exist").
76
- upon_receiving("a POST request with two scheduled maintenance periods").
77
- with(:method => :post, :path => '/scheduled_maintenances/entities/1234,5678',
78
- :headers => {'Content-Type' => 'application/vnd.api+json'},
79
- :body => {:scheduled_maintenances => data}).
80
- will_respond_with(
81
- :status => 204,
82
- :body => '')
83
-
84
- result = Flapjack::Diner.create_scheduled_maintenances_entities('1234', '5678', data)
85
- expect(result).not_to be_nil
86
- expect(result).to be_truthy
87
- end
88
-
89
- it "can't find the entity to create scheduled maintenance for" do
90
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
91
-
92
- flapjack.given("no entity exists").
93
- upon_receiving("a POST request with one scheduled maintenance period").
94
- with(:method => :post, :path => '/scheduled_maintenances/entities/1234',
95
- :headers => {'Content-Type' => 'application/vnd.api+json'},
96
- :body => {:scheduled_maintenances => data}).
97
- will_respond_with(
98
- :status => 404,
99
- :body => {:errors => ["could not find entity '1234'"]})
100
-
101
- result = Flapjack::Diner.create_scheduled_maintenances_entities('1234', data)
102
- expect(result).to be_nil
103
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
104
- :errors => ["could not find entity '1234'"])
105
- end
106
-
107
- end
108
-
109
- context 'unscheduled maintenance periods' do
110
-
111
- it "submits a POST request on an entity" do
112
- data = [{:duration => 3600, :summary => 'working'}]
113
-
114
- flapjack.given("an entity 'www.example.com' with id '1234' exists").
115
- upon_receiving("a POST request with one unscheduled maintenance period").
116
- with(:method => :post, :path => '/unscheduled_maintenances/entities/1234',
117
- :headers => {'Content-Type' => 'application/vnd.api+json'},
118
- :body => {:unscheduled_maintenances => data}).
119
- will_respond_with(
120
- :status => 204,
121
- :body => '')
122
-
123
- result = Flapjack::Diner.create_unscheduled_maintenances_entities('1234', data)
124
- expect(result).not_to be_nil
125
- expect(result).to be_truthy
126
- end
127
-
128
- it "submits a POST request on several entities" do
129
- data = [{:duration => 3600, :summary => 'working'}]
130
-
131
- flapjack.given("entities 'www.example.com', id '1234' and 'www2.example.com', id '5678' exist").
132
- upon_receiving("a POST request with one unscheduled maintenance period").
133
- with(:method => :post, :path => '/unscheduled_maintenances/entities/1234,5678',
134
- :headers => {'Content-Type' => 'application/vnd.api+json'},
135
- :body => {:unscheduled_maintenances => data}).
136
- will_respond_with(
137
- :status => 204,
138
- :body => '')
139
-
140
- result = Flapjack::Diner.create_unscheduled_maintenances_entities('1234', '5678', data)
141
- expect(result).not_to be_nil
142
- expect(result).to be_truthy
143
- end
144
-
145
- it "submits a POST request for multiple periods on an entity" do
146
- data = [{:duration => 3600, :summary => 'working'},
147
- {:duration => 3600, :summary => 'more work'}]
148
-
149
- flapjack.given("an entity 'www.example.com' with id '1234' exists").
150
- upon_receiving("a POST request with two unscheduled maintenance periods").
151
- with(:method => :post, :path => '/unscheduled_maintenances/entities/1234',
152
- :headers => {'Content-Type' => 'application/vnd.api+json'},
153
- :body => {:unscheduled_maintenances => data}).
154
- will_respond_with(
155
- :status => 204,
156
- :body => '')
157
-
158
- result = Flapjack::Diner.create_unscheduled_maintenances_entities('1234', data)
159
- expect(result).not_to be_nil
160
- expect(result).to be_truthy
161
- end
162
-
163
- it "submits a POST request for multiple periods on several entities" do
164
- data = [{:duration => 3600, :summary => 'working'},
165
- {:duration => 3600, :summary => 'more work'}]
166
-
167
- flapjack.given("entities 'www.example.com', id '1234' and 'www2.example.com', id '5678' exist").
168
- upon_receiving("a POST request with two unscheduled maintenance periods").
169
- with(:method => :post, :path => '/unscheduled_maintenances/entities/1234,5678',
170
- :headers => {'Content-Type' => 'application/vnd.api+json'},
171
- :body => {:unscheduled_maintenances => data}).
172
- will_respond_with(
173
- :status => 204,
174
- :body => '')
175
-
176
- result = Flapjack::Diner.create_unscheduled_maintenances_entities('1234', '5678', data)
177
- expect(result).not_to be_nil
178
- expect(result).to be_truthy
179
- end
180
-
181
- it "can't find the entity to create unscheduled maintenance for" do
182
- data = [{:duration => 3600, :summary => 'working'}]
183
-
184
- flapjack.given("no entity exists").
185
- upon_receiving("a POST request with one unscheduled maintenance period").
186
- with(:method => :post, :path => '/unscheduled_maintenances/entities/1234',
187
- :headers => {'Content-Type' => 'application/vnd.api+json'},
188
- :body => {:unscheduled_maintenances => data}).
189
- will_respond_with(
190
- :status => 404,
191
- :body => {:errors => ["could not find entity '1234'"]})
192
-
193
- result = Flapjack::Diner.create_unscheduled_maintenances_entities('1234', data)
194
- expect(result).to be_nil
195
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
196
- :errors => ["could not find entity '1234'"])
197
-
198
- end
199
-
200
- end
201
-
202
- end
203
-
204
- context 'update' do
205
-
206
- it "submits a PATCH request for unscheduled maintenances on an entity" do
207
- flapjack.given("an entity 'www.example.com' with id '1234' exists").
208
- upon_receiving("a PATCH request for an unscheduled maintenance period").
209
- with(:method => :patch,
210
- :path => '/unscheduled_maintenances/entities/1234',
211
- :body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}],
212
- :headers => {'Content-Type'=>'application/json-patch+json'}).
13
+ # TODO need tests for linkage to checks, deletion/ending from checks
14
+
15
+ context 'create' do
16
+
17
+ context 'scheduled maintenance periods' do
18
+
19
+ it "creates a scheduled maintenance period" do
20
+ req_data = maintenance_json('scheduled', scheduled_maintenance_data).merge(
21
+ :relationships => {
22
+ :check => {
23
+ :data => {:type => 'check', :id => check_data[:id]}
24
+ }
25
+ }
26
+ )
27
+ resp_data = maintenance_json('scheduled', scheduled_maintenance_data).
28
+ merge(:relationships => maintenance_rel('scheduled', scheduled_maintenance_data))
29
+
30
+ flapjack.given("a check exists").
31
+ upon_receiving("a POST request with one scheduled maintenance period").
32
+ with(:method => :post,
33
+ :path => '/scheduled_maintenances',
34
+ :headers => {'Content-Type' => 'application/vnd.api+json'},
35
+ :body => {:data => req_data}).
213
36
  will_respond_with(
214
- :status => 204,
215
- :body => '')
37
+ :status => 201,
38
+ :body => {:data => resp_data})
216
39
 
217
- result = Flapjack::Diner.update_unscheduled_maintenances_entities('1234', :end_time => time)
40
+ result = Flapjack::Diner.create_scheduled_maintenances(scheduled_maintenance_data.merge(:check => check_data[:id]))
218
41
  expect(result).not_to be_nil
219
- expect(result).to be_truthy
220
- end
221
-
222
- it "submits a PATCH request for unscheduled maintenances on several entities" do
223
- flapjack.given("entities 'www.example.com', id '1234' and 'www2.example.com', id '5678' exist").
224
- upon_receiving("a PATCH request for an unscheduled maintenance period").
225
- with(:method => :patch,
226
- :path => '/unscheduled_maintenances/entities/1234,5678',
227
- :body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}],
228
- :headers => {'Content-Type'=>'application/json-patch+json'}).
42
+ expect(result).to eq(resultify(resp_data))
43
+ end
44
+
45
+ it "creates several scheduled maintenance periods" do
46
+ req_data = [
47
+ maintenance_json('scheduled', scheduled_maintenance_data).merge(
48
+ :relationships => {
49
+ :check => {
50
+ :data => {:type => 'check', :id => check_data[:id]}
51
+ }
52
+ }
53
+ ),
54
+ maintenance_json('scheduled', scheduled_maintenance_2_data).merge(
55
+ :relationships => {
56
+ :check => {
57
+ :data => {:type => 'check', :id => check_data[:id]}
58
+ }
59
+ }
60
+ )
61
+ ]
62
+ resp_data = [
63
+ maintenance_json('scheduled', scheduled_maintenance_data).
64
+ merge(:relationships => maintenance_rel('scheduled', scheduled_maintenance_data)),
65
+ maintenance_json('scheduled', scheduled_maintenance_2_data).
66
+ merge(:relationships => maintenance_rel('scheduled', scheduled_maintenance_2_data))
67
+ ]
68
+
69
+ flapjack.given("a check exists").
70
+ upon_receiving("a POST request with two scheduled maintenance periods").
71
+ with(:method => :post,
72
+ :path => '/scheduled_maintenances',
73
+ :headers => {'Content-Type' => 'application/vnd.api+json; ext=bulk'},
74
+ :body => {:data => req_data}).
229
75
  will_respond_with(
230
- :status => 204,
231
- :body => '')
76
+ :status => 201,
77
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
78
+ :body => {:data => resp_data})
232
79
 
233
- result = Flapjack::Diner.update_unscheduled_maintenances_entities('1234', '5678', :end_time => time)
80
+ result = Flapjack::Diner.create_scheduled_maintenances(scheduled_maintenance_data.merge(:check => check_data[:id]),
81
+ scheduled_maintenance_2_data.merge(:check => check_data[:id]))
234
82
  expect(result).not_to be_nil
235
- expect(result).to be_truthy
236
- end
237
-
238
- it "can't find the entity to update maintenance for" do
239
- flapjack.given("no entity exists").
240
- upon_receiving("a PATCH request for an unscheduled maintenance period").
241
- with(:method => :patch,
242
- :path => '/unscheduled_maintenances/entities/1234',
243
- :body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}],
244
- :headers => {'Content-Type'=>'application/json-patch+json'}).
245
- will_respond_with(
246
- :status => 404,
247
- :body => {:errors => ["could not find entity '1234'"]})
248
-
249
- result = Flapjack::Diner.update_unscheduled_maintenances_entities('1234', :end_time => time)
250
- expect(result).to be_nil
251
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
252
- :errors => ["could not find entity '1234'"])
83
+ expect(result).to eq(resultify(resp_data))
253
84
  end
254
85
 
255
86
  end
256
87
 
257
- context 'delete' do
258
-
259
- it "submits a DELETE request for scheduled maintenances on an entity" do
260
- flapjack.given("an entity 'www.example.com' with id '1234' exists").
261
- upon_receiving("a DELETE request for a scheduled maintenance period").
262
- with(:method => :delete,
263
- :path => '/scheduled_maintenances/entities/1234',
264
- :query => "start_time=#{URI.encode_www_form_component(time.iso8601)}").
265
- will_respond_with(
266
- :status => 204,
267
- :body => '')
268
-
269
- result = Flapjack::Diner.delete_scheduled_maintenances_entities('1234', :start_time => time.iso8601)
270
- expect(result).not_to be_nil
271
- expect(result).to be_truthy
272
- end
273
-
274
- it "submits a DELETE request for scheduled maintenances on several entities" do
275
- flapjack.given("entities 'www.example.com', id '1234' and 'www2.example.com', id '5678' exist").
276
- upon_receiving("a DELETE request for a scheduled maintenance period").
277
- with(:method => :delete,
278
- :path => '/scheduled_maintenances/entities/1234,5678',
279
- :query => "start_time=#{URI.encode_www_form_component(time.iso8601)}").
280
- will_respond_with(
281
- :status => 204,
282
- :body => '')
283
-
284
- result = Flapjack::Diner.delete_scheduled_maintenances_entities('1234', '5678', :start_time => time.iso8601)
285
- expect(result).not_to be_nil
286
- expect(result).to be_truthy
287
- end
88
+ end
288
89
 
289
- it "can't find the entity to delete maintenance for" do
290
- flapjack.given("no entity exists").
291
- upon_receiving("a DELETE request for a scheduled maintenance period").
292
- with(:method => :delete,
293
- :path => '/scheduled_maintenances/entities/1234',
294
- :query => "start_time=#{URI.encode_www_form_component(time.iso8601)}").
295
- will_respond_with(
296
- :status => 404,
297
- :body => {:errors => ["could not find entity '1234'"]})
90
+ context 'update' do
91
+
92
+ it 'submits a PATCH request for an unscheduled maintenance period' do
93
+ flapjack.given("an unscheduled maintenance period exists").
94
+ upon_receiving("a PATCH request for a single unscheduled maintenance period").
95
+ with(:method => :patch,
96
+ :path => "/unscheduled_maintenances/#{unscheduled_maintenance_data[:id]}",
97
+ :headers => {'Content-Type' => 'application/vnd.api+json'},
98
+ :body => {:data => {:id => unscheduled_maintenance_data[:id],
99
+ :type => 'unscheduled_maintenance',
100
+ :attributes => {:end_time => time.iso8601}}}).
101
+ will_respond_with(
102
+ :status => 204,
103
+ :body => '' )
104
+
105
+ result = Flapjack::Diner.update_unscheduled_maintenances(:id => unscheduled_maintenance_data[:id], :end_time => time)
106
+ expect(result).to be_a(TrueClass)
107
+ end
298
108
 
299
- result = Flapjack::Diner.delete_scheduled_maintenances_entities('1234', :start_time => time.iso8601)
300
- expect(result).to be_nil
301
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
302
- :errors => ["could not find entity '1234'"])
303
- end
109
+ it 'submits a PATCH request for several unscheduled maintenance periods' do
110
+ flapjack.given("two unscheduled maintenance periods exist").
111
+ upon_receiving("a PATCH request for two unscheduled maintenance periods").
112
+ with(:method => :patch,
113
+ :path => "/unscheduled_maintenances",
114
+ :headers => {'Content-Type' => 'application/vnd.api+json; ext=bulk'},
115
+ :body => {:data => [{:id => unscheduled_maintenance_data[:id],
116
+ :type => 'unscheduled_maintenance',
117
+ :attributes => {:end_time => time.iso8601}},
118
+ {:id => unscheduled_maintenance_2_data[:id],
119
+ :type => 'unscheduled_maintenance',
120
+ :attributes => {:end_time => (time + 3600).iso8601}}]}).
121
+ will_respond_with(
122
+ :status => 204,
123
+ :body => '' )
124
+
125
+ result = Flapjack::Diner.update_unscheduled_maintenances(
126
+ {:id => unscheduled_maintenance_data[:id], :end_time => time},
127
+ {:id => unscheduled_maintenance_2_data[:id], :end_time => time + 3600})
128
+ expect(result).to be_a(TrueClass)
129
+ end
304
130
 
131
+ it "can't find the unscheduled maintenance period to update" do
132
+ flapjack.given("no data exists").
133
+ upon_receiving("a PATCH request for a single unscheduled maintenance period").
134
+ with(:method => :patch,
135
+ :path => "/unscheduled_maintenances/#{unscheduled_maintenance_data[:id]}",
136
+ :headers => {'Content-Type' => 'application/vnd.api+json'},
137
+ :body => {:data => {:id => unscheduled_maintenance_data[:id],
138
+ :type => 'unscheduled_maintenance',
139
+ :attributes => {:end_time => time.iso8601}}}).
140
+ will_respond_with(
141
+ :status => 404,
142
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
143
+ :body => {:errors => [{
144
+ :status => '404',
145
+ :detail => "could not find UnscheduledMaintenance record, id: '#{unscheduled_maintenance_data[:id]}'"
146
+ }]}
147
+ )
148
+
149
+ result = Flapjack::Diner.update_unscheduled_maintenances(:id => unscheduled_maintenance_data[:id], :end_time => time)
150
+ expect(result).to be_nil
151
+ expect(Flapjack::Diner.error).to eq([{:status => '404',
152
+ :detail => "could not find UnscheduledMaintenance record, id: '#{unscheduled_maintenance_data[:id]}'"}])
305
153
  end
306
154
 
307
155
  end
308
156
 
309
- context 'checks' do
310
-
311
- context 'create' do
312
-
313
- context 'scheduled maintenance periods' do
314
-
315
- it "submits a POST request on a check" do
316
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
317
-
318
- flapjack.given("a check 'www.example.com:SSH' exists").
319
- upon_receiving("a POST request with one scheduled maintenance period").
320
- with(:method => :post, :path => '/scheduled_maintenances/checks/www.example.com:SSH',
321
- :headers => {'Content-Type' => 'application/vnd.api+json'},
322
- :body => {:scheduled_maintenances => data}).
323
- will_respond_with(
324
- :status => 204,
325
- :body => '')
326
-
327
- result = Flapjack::Diner.create_scheduled_maintenances_checks('www.example.com:SSH', data)
328
- expect(result).not_to be_nil
329
- expect(result).to be_truthy
330
- end
331
-
332
- it "submits a POST request on several checks" do
333
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
334
-
335
- flapjack.given("checks 'www.example.com:SSH' and 'www2.example.com:PING' exist").
336
- upon_receiving("a POST request with one scheduled maintenance period").
337
- with(:method => :post, :path => '/scheduled_maintenances/checks/www.example.com:SSH,www2.example.com:PING',
338
- :headers => {'Content-Type' => 'application/vnd.api+json'},
339
- :body => {:scheduled_maintenances => data}).
340
- will_respond_with(
341
- :status => 204,
342
- :body => '')
343
-
344
- result = Flapjack::Diner.create_scheduled_maintenances_checks('www.example.com:SSH', 'www2.example.com:PING', data)
345
- expect(result).not_to be_nil
346
- expect(result).to be_truthy
347
- end
348
-
349
- it "submits a POST request for multiple periods on a check" do
350
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
351
- {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
352
-
353
- flapjack.given("a check 'www.example.com:SSH' exists").
354
- upon_receiving("a POST request with two scheduled maintenance periods").
355
- with(:method => :post, :path => '/scheduled_maintenances/checks/www.example.com:SSH',
356
- :headers => {'Content-Type' => 'application/vnd.api+json'},
357
- :body => {:scheduled_maintenances => data}).
358
- will_respond_with(
359
- :status => 204,
360
- :body => '')
361
-
362
- result = Flapjack::Diner.create_scheduled_maintenances_checks('www.example.com:SSH', data)
363
- expect(result).not_to be_nil
364
- expect(result).to be_truthy
365
- end
366
-
367
- it "submits a POST request for multiple periods on several checks" do
368
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'},
369
- {:start_time => (time + 7200).iso8601, :duration => 3600, :summary => 'more work'}]
370
-
371
- flapjack.given("checks 'www.example.com:SSH' and 'www2.example.com:PING' exist").
372
- upon_receiving("a POST request with two scheduled maintenance periods").
373
- with(:method => :post, :path => '/scheduled_maintenances/checks/www.example.com:SSH,www2.example.com:PING',
374
- :headers => {'Content-Type' => 'application/vnd.api+json'},
375
- :body => {:scheduled_maintenances => data}).
376
- will_respond_with(
377
- :status => 204,
378
- :body => '')
379
-
380
- result = Flapjack::Diner.create_scheduled_maintenances_checks('www.example.com:SSH', 'www2.example.com:PING', data)
381
- expect(result).not_to be_nil
382
- expect(result).to be_truthy
383
- end
384
-
385
- it "can't find the check to create scheduled maintenance for" do
386
- data = [{:start_time => time.iso8601, :duration => 3600, :summary => 'working'}]
387
-
388
- flapjack.given("no check exists").
389
- upon_receiving("a POST request with one scheduled maintenance period").
390
- with(:method => :post, :path => '/scheduled_maintenances/checks/www.example.com:SSH',
391
- :headers => {'Content-Type' => 'application/vnd.api+json'},
392
- :body => {:scheduled_maintenances => data}).
393
- will_respond_with(
394
- :status => 404,
395
- :body => {:errors => ["could not find entity 'www.example.com'"]})
396
-
397
- result = Flapjack::Diner.create_scheduled_maintenances_checks('www.example.com:SSH', data)
398
- expect(result).to be_nil
399
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
400
- :errors => ["could not find entity 'www.example.com'"])
401
- end
402
-
403
- end
157
+ context 'delete' do
404
158
 
405
- context 'unscheduled maintenance periods' do
406
-
407
- it "submits a POST request on a check" do
408
- data = [{:duration => 3600, :summary => 'working'}]
409
-
410
- flapjack.given("a check 'www.example.com:SSH' exists").
411
- upon_receiving("a POST request with one unscheduled maintenance period").
412
- with(:method => :post, :path => '/unscheduled_maintenances/checks/www.example.com:SSH',
413
- :headers => {'Content-Type' => 'application/vnd.api+json'},
414
- :body => {:unscheduled_maintenances => data}).
415
- will_respond_with(
416
- :status => 204,
417
- :body => '')
418
-
419
- result = Flapjack::Diner.create_unscheduled_maintenances_checks('www.example.com:SSH', data)
420
- expect(result).not_to be_nil
421
- expect(result).to be_truthy
422
- end
423
-
424
- it "submits a POST request on several checks" do
425
- data = [{:duration => 3600, :summary => 'working'}]
426
-
427
- flapjack.given("checks 'www.example.com:SSH' and 'www2.example.com:PING' exist").
428
- upon_receiving("a POST request with one unscheduled maintenance period").
429
- with(:method => :post, :path => '/unscheduled_maintenances/checks/www.example.com:SSH,www2.example.com:PING',
430
- :headers => {'Content-Type' => 'application/vnd.api+json'},
431
- :body => {:unscheduled_maintenances => data}).
432
- will_respond_with(
433
- :status => 204,
434
- :body => '')
435
-
436
- result = Flapjack::Diner.create_unscheduled_maintenances_checks('www.example.com:SSH', 'www2.example.com:PING', data)
437
- expect(result).not_to be_nil
438
- expect(result).to be_truthy
439
- end
440
-
441
- it "submits a POST request for multiple periods on a check" do
442
- data = [{:duration => 3600, :summary => 'working'},
443
- {:duration => 3600, :summary => 'more work'}]
444
-
445
- flapjack.given("a check 'www.example.com:SSH' exists").
446
- upon_receiving("a POST request with two unscheduled maintenance periods").
447
- with(:method => :post, :path => '/unscheduled_maintenances/checks/www.example.com:SSH',
448
- :headers => {'Content-Type' => 'application/vnd.api+json'},
449
- :body => {:unscheduled_maintenances => data}).
450
- will_respond_with(
451
- :status => 204,
452
- :body => '')
453
-
454
- result = Flapjack::Diner.create_unscheduled_maintenances_checks('www.example.com:SSH', data)
455
- expect(result).not_to be_nil
456
- expect(result).to be_truthy
457
- end
458
-
459
- it "submits a POST request for multiple periods on several checks" do
460
- data = [{:duration => 3600, :summary => 'working'},
461
- {:duration => 3600, :summary => 'more work'}]
462
-
463
- flapjack.given("checks 'www.example.com:SSH' and 'www2.example.com:PING' exist").
464
- upon_receiving("a POST request with two unscheduled maintenance periods").
465
- with(:method => :post, :path => '/unscheduled_maintenances/checks/www.example.com:SSH,www2.example.com:PING',
466
- :headers => {'Content-Type' => 'application/vnd.api+json'},
467
- :body => {:unscheduled_maintenances => data}).
468
- will_respond_with(
469
- :status => 204,
470
- :body => '')
471
-
472
- result = Flapjack::Diner.create_unscheduled_maintenances_checks('www.example.com:SSH', 'www2.example.com:PING', data)
473
- expect(result).not_to be_nil
474
- expect(result).to be_truthy
475
- end
476
-
477
- it "can't find the check to create unscheduled maintenance for" do
478
- data = [{:duration => 3600, :summary => 'working'}]
479
-
480
- flapjack.given("no check exists").
481
- upon_receiving("a POST request with one unscheduled maintenance period").
482
- with(:method => :post, :path => '/unscheduled_maintenances/checks/www.example.com:SSH',
483
- :headers => {'Content-Type' => 'application/vnd.api+json'},
484
- :body => {:unscheduled_maintenances => data}).
485
- will_respond_with(
486
- :status => 404,
487
- :body => {:errors => ["could not find entity 'www.example.com'"]})
488
-
489
- result = Flapjack::Diner.create_unscheduled_maintenances_checks('www.example.com:SSH', data)
490
- expect(result).to be_nil
491
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
492
- :errors => ["could not find entity 'www.example.com'"])
493
- end
494
-
495
- end
159
+ it "submits a DELETE request for a scheduled maintenance period" do
160
+ flapjack.given("a scheduled maintenance period exists").
161
+ upon_receiving("a DELETE request for a scheduled maintenance period").
162
+ with(:method => :delete,
163
+ :path => "/scheduled_maintenances/#{scheduled_maintenance_data[:id]}").
164
+ will_respond_with(
165
+ :status => 204,
166
+ :body => '')
496
167
 
168
+ result = Flapjack::Diner.delete_scheduled_maintenances(scheduled_maintenance_data[:id])
169
+ expect(result).to be_a(TrueClass)
497
170
  end
498
171
 
499
- context 'update' do
500
-
501
- it "submits a PATCH request for unscheduled maintenances on a check" do
502
- flapjack.given("a check 'www.example.com:SSH' exists").
503
- upon_receiving("a PATCH request for an unscheduled maintenance period").
504
- with(:method => :patch,
505
- :path => '/unscheduled_maintenances/checks/www.example.com:SSH',
506
- :body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}],
507
- :headers => {'Content-Type'=>'application/json-patch+json'}).
508
- will_respond_with(
509
- :status => 204,
510
- :body => '')
511
-
512
- result = Flapjack::Diner.update_unscheduled_maintenances_checks('www.example.com:SSH', :end_time => time)
513
- expect(result).not_to be_nil
514
- expect(result).to be_truthy
515
- end
516
-
517
- it "submits a PATCH request for unscheduled maintenances on several checks" do
518
- flapjack.given("checks 'www.example.com:SSH' and 'www2.example.com:PING' exist").
519
- upon_receiving("a PATCH request for an unscheduled maintenance period").
520
- with(:method => :patch,
521
- :path => '/unscheduled_maintenances/checks/www.example.com:SSH,www2.example.com:PING',
522
- :body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}],
523
- :headers => {'Content-Type'=>'application/json-patch+json'}).
524
- will_respond_with(
525
- :status => 204,
526
- :body => '')
527
-
528
- result = Flapjack::Diner.update_unscheduled_maintenances_checks('www.example.com:SSH', 'www2.example.com:PING', :end_time => time)
529
- expect(result).not_to be_nil
530
- expect(result).to be_truthy
531
- end
532
-
533
- it "can't find the check to update maintenance for" do
534
- flapjack.given("no check exists").
535
- upon_receiving("a PATCH request for an unscheduled maintenance period").
536
- with(:method => :patch,
537
- :path => '/unscheduled_maintenances/checks/www.example.com:SSH',
538
- :body => [{:op => 'replace', :path => '/unscheduled_maintenances/0/end_time', :value => time.iso8601}],
539
- :headers => {'Content-Type'=>'application/json-patch+json'}).
540
- will_respond_with(
541
- :status => 404,
542
- :body => {:errors => ["could not find entity 'www.example.com'"]})
543
-
544
- result = Flapjack::Diner.update_unscheduled_maintenances_checks('www.example.com:SSH', :end_time => time)
545
- expect(result).to be_nil
546
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
547
- :errors => ["could not find entity 'www.example.com'"])
548
- end
549
-
172
+ it "submits a DELETE request for several scheduled maintenance periods" do
173
+ scheduled_maintenances_data = [
174
+ {:type => 'scheduled_maintenance', :id => scheduled_maintenance_data[:id]},
175
+ {:type => 'scheduled_maintenance', :id => scheduled_maintenance_2_data[:id]}
176
+ ]
177
+
178
+ flapjack.given("two scheduled maintenance periods exist").
179
+ upon_receiving("a DELETE request for two scheduled maintenance periods").
180
+ with(:method => :delete,
181
+ :path => "/scheduled_maintenances",
182
+ :headers => {'Content-Type' => 'application/vnd.api+json; ext=bulk'},
183
+ :body => {:data => scheduled_maintenances_data}).
184
+ will_respond_with(
185
+ :status => 204,
186
+ :body => '')
187
+
188
+ result = Flapjack::Diner.delete_scheduled_maintenances(scheduled_maintenance_data[:id], scheduled_maintenance_2_data[:id])
189
+ expect(result).to be_a(TrueClass)
550
190
  end
551
191
 
552
- context 'delete' do
553
-
554
- it "submits a DELETE request for scheduled maintenances on a check" do
555
- flapjack.given("a check 'www.example.com:SSH' exists").
556
- upon_receiving("a DELETE request for a scheduled maintenance period").
557
- with(:method => :delete,
558
- :path => '/scheduled_maintenances/checks/www.example.com:SSH',
559
- :query => "start_time=#{URI.encode_www_form_component(time.iso8601)}").
560
- will_respond_with(
561
- :status => 204,
562
- :body => '')
563
-
564
- result = Flapjack::Diner.delete_scheduled_maintenances_checks('www.example.com:SSH', :start_time => time.iso8601)
565
- expect(result).not_to be_nil
566
- expect(result).to be_truthy
567
- end
568
-
569
- it "submits a DELETE request for scheduled maintenances on several checks" do
570
- flapjack.given("checks 'www.example.com:SSH' and 'www2.example.com:PING' exist").
571
- upon_receiving("a DELETE request for a scheduled maintenance period").
572
- with(:method => :delete,
573
- :path => '/scheduled_maintenances/checks/www.example.com:SSH,www2.example.com:PING',
574
- :query => "start_time=#{URI.encode_www_form_component(time.iso8601)}").
575
- will_respond_with(
576
- :status => 204,
577
- :body => '')
578
-
579
- result = Flapjack::Diner.delete_scheduled_maintenances_checks('www.example.com:SSH', 'www2.example.com:PING', :start_time => time.iso8601)
580
- expect(result).not_to be_nil
581
- expect(result).to be_truthy
582
- end
583
-
584
- it "can't find the check to delete maintenance for" do
585
- flapjack.given("no check exists").
586
- upon_receiving("a DELETE request for a scheduled maintenance period").
587
- with(:method => :delete,
588
- :path => '/scheduled_maintenances/checks/www.example.com:SSH',
589
- :query => "start_time=#{URI.encode_www_form_component(time.iso8601)}").
590
- will_respond_with(
591
- :status => 404,
592
- :body => {:errors => ["could not find entity 'www.example.com'"]})
593
-
594
- result = Flapjack::Diner.delete_scheduled_maintenances_checks('www.example.com:SSH', :start_time => time.iso8601)
595
- expect(result).to be_nil
596
- expect(Flapjack::Diner.last_error).to eq(:status_code => 404,
597
- :errors => ["could not find entity 'www.example.com'"])
598
- end
599
-
192
+ it "can't find the scheduled maintenance period to delete" do
193
+ flapjack.given("no data exists").
194
+ upon_receiving("a DELETE request for a scheduled maintenance period").
195
+ with(:method => :delete,
196
+ :path => "/scheduled_maintenances/#{scheduled_maintenance_data[:id]}",
197
+ :body => nil).
198
+ will_respond_with(
199
+ :status => 404,
200
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
201
+ :body => {:errors => [{
202
+ :status => '404',
203
+ :detail => "could not find ScheduledMaintenance record, id: '#{scheduled_maintenance_data[:id]}'"
204
+ }]}
205
+ )
206
+
207
+ result = Flapjack::Diner.delete_scheduled_maintenances(scheduled_maintenance_data[:id])
208
+ expect(result).to be_nil
209
+ expect(Flapjack::Diner.error).to eq([{:status => '404',
210
+ :detail => "could not find ScheduledMaintenance record, id: '#{scheduled_maintenance_data[:id]}'"}])
600
211
  end
212
+
601
213
  end
602
214
 
603
215
  end