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
@@ -0,0 +1,208 @@
1
+ require 'spec_helper'
2
+ require 'flapjack-diner'
3
+
4
+ describe Flapjack::Diner::Resources, :pact => true do
5
+
6
+ before(:each) do
7
+ Flapjack::Diner.base_uri('localhost:19081')
8
+ Flapjack::Diner.logger = nil
9
+ end
10
+
11
+ context 'create' do
12
+
13
+ context 'test notifications' do
14
+
15
+ it "submits a POST request for a check" do
16
+ req_data = test_notification_json(test_notification_data).merge(
17
+ :relationships => {
18
+ :check => {
19
+ :data => {:type => 'check', :id => check_data[:id]}
20
+ }
21
+ }
22
+ )
23
+ resp_data = test_notification_json(test_notification_data)
24
+
25
+ flapjack.given("a check exists").
26
+ upon_receiving("a POST request with one test notification").
27
+ with(:method => :post, :path => "/test_notifications",
28
+ :headers => {'Content-Type' => 'application/vnd.api+json'},
29
+ :body => {:data => req_data}).
30
+ will_respond_with(
31
+ :status => 201,
32
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
33
+ :body => {:data => resp_data})
34
+
35
+ result = Flapjack::Diner.create_test_notifications(test_notification_data.merge(:check => check_data[:id]))
36
+ expect(result).not_to be_nil
37
+ expect(result).to eq(resultify(resp_data))
38
+ end
39
+
40
+ it "submits a POST request for checks linked to a tag" do
41
+ req_data = test_notification_json(test_notification_data).merge(
42
+ :relationships => {
43
+ :tag => {
44
+ :data => {:type => 'tag', :id => tag_data[:id]}
45
+ }
46
+ }
47
+ )
48
+ resp_data = test_notification_json(test_notification_data)
49
+
50
+ flapjack.given("a tag exists").
51
+ upon_receiving("a POST request with one test notification").
52
+ with(:method => :post, :path => "/test_notifications",
53
+ :headers => {'Content-Type' => 'application/vnd.api+json'},
54
+ :body => {:data => req_data}).
55
+ will_respond_with(
56
+ :status => 201,
57
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
58
+ :body => {:data => resp_data})
59
+
60
+ result = Flapjack::Diner.create_test_notifications(test_notification_data.merge(:tag => tag_data[:id]))
61
+ expect(result).not_to be_nil
62
+ expect(result).to eq(resultify(resp_data))
63
+ end
64
+
65
+ it "submits a POST request for multiple notifications on a check" do
66
+ req_data = [
67
+ test_notification_json(test_notification_data).merge(
68
+ :relationships => {
69
+ :check => {
70
+ :data => {:type => 'check', :id => check_data[:id]}
71
+ }
72
+ }
73
+ ),
74
+ test_notification_json(test_notification_2_data).merge(
75
+ :relationships => {
76
+ :check => {
77
+ :data => {:type => 'check', :id => check_data[:id]}
78
+ }
79
+ }
80
+ )
81
+ ]
82
+ resp_data = [
83
+ test_notification_json(test_notification_data),
84
+ test_notification_json(test_notification_2_data)
85
+ ]
86
+
87
+ flapjack.given("a check exists").
88
+ upon_receiving("a POST request with two test notifications").
89
+ with(:method => :post, :path => "/test_notifications",
90
+ :headers => {'Content-Type' => 'application/vnd.api+json; ext=bulk'},
91
+ :body => {:data => req_data}).
92
+ will_respond_with(
93
+ :status => 201,
94
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
95
+ :body => {:data => resp_data})
96
+
97
+ result = Flapjack::Diner.create_test_notifications(
98
+ test_notification_data.merge(:check => check_data[:id]),
99
+ test_notification_2_data.merge(:check => check_data[:id])
100
+ )
101
+ expect(result).not_to be_nil
102
+ expect(result).to eq(resultify(resp_data))
103
+ end
104
+
105
+ it "submits a POST request for multiple notifications for checks linked to a tag" do
106
+ req_data = [
107
+ test_notification_json(test_notification_data).merge(
108
+ :relationships => {
109
+ :tag => {
110
+ :data => {:type => 'tag', :id => tag_data[:id]}
111
+ }
112
+ }
113
+ ),
114
+ test_notification_json(test_notification_2_data).merge(
115
+ :relationships => {
116
+ :tag => {
117
+ :data => {:type => 'tag', :id => tag_data[:id]}
118
+ }
119
+ }
120
+ )
121
+ ]
122
+
123
+ resp_data = [
124
+ test_notification_json(test_notification_data),
125
+ test_notification_json(test_notification_2_data)
126
+ ]
127
+
128
+ flapjack.given("a tag exists").
129
+ upon_receiving("a POST request with two test notifications").
130
+ with(:method => :post, :path => "/test_notifications",
131
+ :headers => {'Content-Type' => 'application/vnd.api+json; ext=bulk'},
132
+ :body => {:data => req_data}).
133
+ will_respond_with(
134
+ :status => 201,
135
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
136
+ :body => {:data => resp_data})
137
+
138
+ result = Flapjack::Diner.create_test_notifications(
139
+ test_notification_data.merge(:tag => tag_data[:id]),
140
+ test_notification_2_data.merge(:tag => tag_data[:id])
141
+ )
142
+ expect(result).not_to be_nil
143
+ expect(result).to eq(resultify(resp_data))
144
+ end
145
+
146
+ it "can't find the check to create notifications for" do
147
+ req_data = test_notification_json(test_notification_data).merge(
148
+ :relationships => {
149
+ :check => {
150
+ :data => {:type => 'check', :id => check_data[:id]}
151
+ }
152
+ }
153
+ )
154
+
155
+ flapjack.given("no data exists").
156
+ upon_receiving("a POST request with one test notification for a check").
157
+ with(:method => :post, :path => "/test_notifications",
158
+ :headers => {'Content-Type' => 'application/vnd.api+json'},
159
+ :body => {:data => req_data}).
160
+ will_respond_with(
161
+ :status => 404,
162
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
163
+ :body => {:errors => [{
164
+ :status => '404',
165
+ :detail => "could not find Check record, id: '#{check_data[:id]}'"
166
+ }]}
167
+ )
168
+
169
+ result = Flapjack::Diner.create_test_notifications(test_notification_data.merge(:check => check_data[:id]))
170
+ expect(result).to be_nil
171
+ expect(Flapjack::Diner.error).to eq([{:status => '404',
172
+ :detail => "could not find Check record, id: '#{check_data[:id]}'"}])
173
+ end
174
+
175
+ it "can't find the tag to create notifications for" do
176
+ req_data = test_notification_json(test_notification_data).merge(
177
+ :relationships => {
178
+ :tag => {
179
+ :data => {:type => 'tag', :id => tag_data[:id]}
180
+ }
181
+ }
182
+ )
183
+
184
+ flapjack.given("no data exists").
185
+ upon_receiving("a POST request with one test notification for a tag").
186
+ with(:method => :post, :path => "/test_notifications",
187
+ :headers => {'Content-Type' => 'application/vnd.api+json'},
188
+ :body => {:data => req_data}).
189
+ will_respond_with(
190
+ :status => 404,
191
+ :headers => {'Content-Type' => 'application/vnd.api+json; supported-ext=bulk; charset=utf-8'},
192
+ :body => {:errors => [{
193
+ :status => '404',
194
+ :detail => "could not find Tag record, id: '#{tag_data[:id]}'"
195
+ }]}
196
+ )
197
+
198
+ result = Flapjack::Diner.create_test_notifications(test_notification_data.merge(:tag => tag_data[:id]))
199
+ expect(result).to be_nil
200
+ expect(Flapjack::Diner.error).to eq([{:status => '404',
201
+ :detail => "could not find Tag record, id: '#{tag_data[:id]}'"}])
202
+ end
203
+
204
+ end
205
+
206
+ end
207
+
208
+ end