esp_sdk 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +6 -1
  4. data/Gemfile.lock +11 -1
  5. data/README.md +287 -28
  6. data/bin/esp +15 -0
  7. data/esp_sdk.gemspec +2 -0
  8. data/lib/esp/aws_clients.rb +60 -0
  9. data/lib/esp/commands/add_external_account.rb +57 -0
  10. data/lib/esp/commands/commands_tasks.rb +106 -0
  11. data/lib/esp/commands/console.rb +68 -0
  12. data/lib/esp/extensions/active_resource/formats/json_api_format.rb +12 -4
  13. data/lib/esp/extensions/active_resource/paginated_collection.rb +5 -5
  14. data/lib/esp/extensions/active_resource/validations.rb +1 -1
  15. data/lib/esp/external_account_creator.rb +77 -0
  16. data/lib/esp/resources/alert.rb +30 -34
  17. data/lib/esp/resources/cloud_trail_event.rb +5 -0
  18. data/lib/esp/resources/contact_request.rb +6 -5
  19. data/lib/esp/resources/custom_signature.rb +32 -56
  20. data/lib/esp/resources/dashboard.rb +8 -1
  21. data/lib/esp/resources/external_account.rb +27 -19
  22. data/lib/esp/resources/organization.rb +27 -3
  23. data/lib/esp/resources/region.rb +15 -3
  24. data/lib/esp/resources/report.rb +28 -24
  25. data/lib/esp/resources/resource.rb +26 -10
  26. data/lib/esp/resources/service.rb +5 -0
  27. data/lib/esp/resources/signature.rb +28 -12
  28. data/lib/esp/resources/stat.rb +21 -2
  29. data/lib/esp/resources/stat_custom_signature.rb +30 -4
  30. data/lib/esp/resources/stat_region.rb +29 -3
  31. data/lib/esp/resources/stat_service.rb +29 -3
  32. data/lib/esp/resources/stat_signature.rb +29 -3
  33. data/lib/esp/resources/sub_organization.rb +27 -3
  34. data/lib/esp/resources/suppression/region.rb +14 -32
  35. data/lib/esp/resources/suppression/signature.rb +14 -40
  36. data/lib/esp/resources/suppression/unique_identifier.rb +8 -6
  37. data/lib/esp/resources/suppression.rb +43 -5
  38. data/lib/esp/resources/tag.rb +5 -0
  39. data/lib/esp/resources/team.rb +33 -9
  40. data/lib/esp/resources/user.rb +29 -3
  41. data/lib/esp/version.rb +1 -1
  42. data/lib/esp.rb +25 -5
  43. data/test/esp/aws_clients_test.rb +101 -0
  44. data/test/esp/extensions/active_resource/formats/json_api_format_test.rb +26 -12
  45. data/test/esp/extensions/active_resource/paginated_collection_test.rb +93 -72
  46. data/test/esp/extensions/active_resource/validations_test.rb +2 -12
  47. data/test/esp/external_account_creator_test.rb +153 -0
  48. data/test/esp/resources/alert_test.rb +71 -33
  49. data/test/esp/resources/cloud_trail_event_test.rb +9 -1
  50. data/test/esp/resources/contact_request_test.rb +8 -0
  51. data/test/esp/resources/custom_signature_test.rb +8 -0
  52. data/test/esp/resources/dashboard_test.rb +8 -0
  53. data/test/esp/resources/external_account_test.rb +8 -0
  54. data/test/esp/resources/metadata_test.rb +1 -1
  55. data/test/esp/resources/organization_test.rb +8 -0
  56. data/test/esp/resources/region_test.rb +12 -4
  57. data/test/esp/resources/report_test.rb +13 -4
  58. data/test/esp/resources/resource_test.rb +208 -64
  59. data/test/esp/resources/service_test.rb +8 -0
  60. data/test/esp/resources/signature_test.rb +15 -9
  61. data/test/esp/resources/stat_custom_signature_test.rb +9 -1
  62. data/test/esp/resources/stat_region_test.rb +23 -1
  63. data/test/esp/resources/stat_service_test.rb +23 -1
  64. data/test/esp/resources/stat_signature_test.rb +23 -1
  65. data/test/esp/resources/stat_test.rb +52 -8
  66. data/test/esp/resources/sub_organization_test.rb +8 -0
  67. data/test/esp/resources/suppression/region_test.rb +10 -2
  68. data/test/esp/resources/suppression/signature_test.rb +10 -2
  69. data/test/esp/resources/suppression/unique_identifier_test.rb +10 -2
  70. data/test/esp/resources/suppression_test.rb +74 -14
  71. data/test/esp/resources/tag_test.rb +9 -1
  72. data/test/esp/resources/team_test.rb +8 -0
  73. data/test/esp/resources/user_test.rb +49 -19
  74. data/test/esp_test.rb +19 -1
  75. data/test/factories/alerts.rb +70 -0
  76. data/test/factories/organizations.rb +2 -2
  77. data/test/factories/regions.rb +1 -1
  78. data/test/factories/sub_organizations.rb +1 -1
  79. data/test/factories/suppressions.rb +109 -3
  80. data/test/factories/users.rb +65 -2
  81. data/test/test_helper.rb +9 -8
  82. metadata +41 -69
  83. data/bin/esp_console +0 -67
  84. data/rdoc/ActiveResource/Formats.html +0 -178
  85. data/rdoc/ActiveResource/PaginatedCollection.html +0 -912
  86. data/rdoc/ActiveResource.html +0 -182
  87. data/rdoc/ESP/Alert.html +0 -808
  88. data/rdoc/ESP/CloudTrailEvent.html +0 -377
  89. data/rdoc/ESP/ContactRequest.html +0 -368
  90. data/rdoc/ESP/CustomSignature.html +0 -748
  91. data/rdoc/ESP/Dashboard.html +0 -357
  92. data/rdoc/ESP/ExternalAccount.html +0 -567
  93. data/rdoc/ESP/Metadata.html +0 -411
  94. data/rdoc/ESP/Organization.html +0 -592
  95. data/rdoc/ESP/Region.html +0 -401
  96. data/rdoc/ESP/Report.html +0 -624
  97. data/rdoc/ESP/Service.html +0 -382
  98. data/rdoc/ESP/Signature.html +0 -557
  99. data/rdoc/ESP/Stat.html +0 -1780
  100. data/rdoc/ESP/StatCustomSignature.html +0 -1601
  101. data/rdoc/ESP/StatRegion.html +0 -1600
  102. data/rdoc/ESP/StatService.html +0 -1600
  103. data/rdoc/ESP/StatSignature.html +0 -1600
  104. data/rdoc/ESP/SubOrganization.html +0 -542
  105. data/rdoc/ESP/Suppression/Region.html +0 -456
  106. data/rdoc/ESP/Suppression/Signature.html +0 -472
  107. data/rdoc/ESP/Suppression/UniqueIdentifier.html +0 -419
  108. data/rdoc/ESP/Suppression.html +0 -651
  109. data/rdoc/ESP/Tag.html +0 -373
  110. data/rdoc/ESP/Team.html +0 -586
  111. data/rdoc/ESP/User.html +0 -485
  112. data/rdoc/ESP.html +0 -549
  113. data/rdoc/README_md.html +0 -503
  114. data/rdoc/created.rid +0 -31
  115. data/rdoc/images/add.png +0 -0
  116. data/rdoc/images/arrow_up.png +0 -0
  117. data/rdoc/images/brick.png +0 -0
  118. data/rdoc/images/brick_link.png +0 -0
  119. data/rdoc/images/bug.png +0 -0
  120. data/rdoc/images/bullet_black.png +0 -0
  121. data/rdoc/images/bullet_toggle_minus.png +0 -0
  122. data/rdoc/images/bullet_toggle_plus.png +0 -0
  123. data/rdoc/images/date.png +0 -0
  124. data/rdoc/images/delete.png +0 -0
  125. data/rdoc/images/find.png +0 -0
  126. data/rdoc/images/loadingAnimation.gif +0 -0
  127. data/rdoc/images/macFFBgHack.png +0 -0
  128. data/rdoc/images/package.png +0 -0
  129. data/rdoc/images/page_green.png +0 -0
  130. data/rdoc/images/page_white_text.png +0 -0
  131. data/rdoc/images/page_white_width.png +0 -0
  132. data/rdoc/images/plugin.png +0 -0
  133. data/rdoc/images/ruby.png +0 -0
  134. data/rdoc/images/tag_blue.png +0 -0
  135. data/rdoc/images/tag_green.png +0 -0
  136. data/rdoc/images/transparent.png +0 -0
  137. data/rdoc/images/wrench.png +0 -0
  138. data/rdoc/images/wrench_orange.png +0 -0
  139. data/rdoc/images/zoom.png +0 -0
  140. data/rdoc/index.html +0 -136
  141. data/rdoc/js/darkfish.js +0 -155
  142. data/rdoc/js/jquery.js +0 -4
  143. data/rdoc/js/navigation.js +0 -142
  144. data/rdoc/js/search.js +0 -94
  145. data/rdoc/js/search_index.js +0 -1
  146. data/rdoc/js/searcher.js +0 -228
  147. data/rdoc/rdoc.css +0 -595
  148. data/rdoc/table_of_contents.html +0 -942
@@ -7,7 +7,7 @@ module ActiveResource
7
7
  context '# decode' do
8
8
  context 'with ESP::Suppression' do
9
9
  should 'parse nested objects correctly' do
10
- json = json(:dashboard)
10
+ json = json(:dashboard)
11
11
  parsed_json = JSON.parse(json)
12
12
  stub_request(:get, %r{dashboard/recent.json*}).to_return(body: json_list(:dashboard, 1))
13
13
 
@@ -18,25 +18,28 @@ module ActiveResource
18
18
  end
19
19
 
20
20
  context 'with ESP::Alert' do
21
- should 'merge included objects' do
22
- json = json_list(:alert, 1)
21
+ should 'merge nested included objects' do
22
+ json = json(:alert)
23
23
  parsed_json = JSON.parse(json)
24
- stub_request(:get, %r{reports/1/alerts.json*}).to_return(body: json)
24
+ stub_request(:get, %r{alerts/1.json*}).to_return(body: json)
25
25
 
26
- alert = ESP::Alert.for_report(1, include: 'external_accounts,regions,signatures,cloud_trail_events').first
26
+ alert = ESP::Alert.find(1, include: 'external_account.team.organization,region,signature,cloud_trail_events')
27
27
 
28
28
  assert_equal parsed_json['included'].detect { |e| e['type'] == 'external_accounts' }['id'], alert.external_account.id
29
+ assert_equal parsed_json['included'].detect { |e| e['type'] == 'organizations' }['id'], alert.external_account.organization.id
30
+ assert_equal parsed_json['included'].detect { |e| e['type'] == 'teams' }['id'], alert.external_account.team.id
31
+ assert_equal parsed_json['included'].detect { |e| e['type'] == 'organizations' }['id'], alert.external_account.team.organization.id
29
32
  assert_equal parsed_json['included'].detect { |e| e['type'] == 'regions' }['id'], alert.region.id
30
33
  assert_equal parsed_json['included'].detect { |e| e['type'] == 'signatures' }['id'], alert.signature.id
31
34
  assert_equal parsed_json['included'].detect { |e| e['type'] == 'cloud_trail_events' }['id'], alert.cloud_trail_events.first.id
32
35
  end
33
36
 
34
37
  should 'assign foreign keys' do
35
- json = json_list(:alert, 1)
38
+ json = json_list(:alert, 1)
36
39
  parsed_json = JSON.parse(json)
37
- stub_request(:get, %r{reports/1/alerts.json*}).to_return(body: json)
40
+ stub_request(:put, %r{reports/1/alerts.json*}).to_return(body: json)
38
41
 
39
- alert = ESP::Alert.for_report(1).first
42
+ alert = ESP::Alert.where(report_id: 1).first
40
43
 
41
44
  assert_equal parsed_json['included'].detect { |e| e['type'] == 'external_accounts' }['id'], alert.external_account_id
42
45
  assert_equal parsed_json['included'].detect { |e| e['type'] == 'regions' }['id'], alert.region_id
@@ -60,14 +63,25 @@ module ActiveResource
60
63
  end
61
64
 
62
65
  should 'merge included objects' do
63
- alert = ESP::Alert.find(1, include: 'external_account,region,signature')
66
+ alert = ESP::Alert.find(1, include: 'external_account.team.organization,region,signature,custom_signature')
64
67
 
65
68
  assert_not_nil alert.attributes['external_account']
66
69
  assert_equal alert.external_account_id, alert.external_account.id
70
+ assert_not_nil alert.external_account.attributes['organization']
71
+ assert_equal alert.external_account.organization_id, alert.external_account.organization.id
72
+ assert_not_nil alert.external_account.attributes['team']
73
+ assert_equal alert.external_account.team_id, alert.external_account.team.id
74
+ assert_not_nil alert.external_account.team.attributes['organization']
75
+ assert_equal alert.external_account.team.organization_id, alert.external_account.team.organization.id
67
76
  assert_not_nil alert.attributes['region']
68
77
  assert_equal alert.region_id, alert.region.id
69
- assert_not_nil alert.attributes['signature']
70
- assert_equal alert.signature_id, alert.signature.id
78
+ if alert.signature.present?
79
+ assert_not_nil alert.attributes['signature']
80
+ assert_equal alert.signature_id, alert.signature.id
81
+ else
82
+ assert_not_nil alert.attributes['custom_signature']
83
+ assert_equal alert.custom_signature_id, alert.custom_signature.id
84
+ end
71
85
  end
72
86
 
73
87
  should 'assign foreign key for a belongs_to relationship' do
@@ -89,7 +103,7 @@ module ActiveResource
89
103
  context '.initialize' do
90
104
  should 'parse the response and return a descriptive error message' do
91
105
  error_response = json(:error, :active_record)
92
- response = Net::HTTPBadRequest.new('1.0', '200', '')
106
+ response = Net::HTTPBadRequest.new('1.0', '200', '')
93
107
  response.expects(:body).returns(error_response).at_least_once
94
108
 
95
109
  error = ActiveResource::BadRequest.new(response)
@@ -7,7 +7,7 @@ module ActiveResource
7
7
  context '#parse_pagination_links' do
8
8
  should 'not set the previous page or next page or last page when there is only 1 page' do
9
9
  report = build(:report)
10
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 2, page: { number: 1, size: 20 }))
10
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 2, page: { number: 1, size: 20 }))
11
11
 
12
12
  alerts = report.alerts
13
13
 
@@ -22,7 +22,7 @@ module ActiveResource
22
22
 
23
23
  should 'not set the previous page when on the first page' do
24
24
  report = build(:report)
25
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 2, page: { number: 1, size: 1 }))
25
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 2, page: { number: 1, size: 1 }))
26
26
 
27
27
  alerts = report.alerts
28
28
 
@@ -37,7 +37,7 @@ module ActiveResource
37
37
 
38
38
  should 'not set the next or last page page when on the last page' do
39
39
  report = build(:report)
40
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 2, page: { number: 2, size: 1 }))
40
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 2, page: { number: 2, size: 1 }))
41
41
 
42
42
  alerts = report.alerts
43
43
 
@@ -52,7 +52,7 @@ module ActiveResource
52
52
 
53
53
  should 'set the next, last and previous page page when not on the first or last page' do
54
54
  report = build(:report)
55
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 }))
55
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 }))
56
56
 
57
57
  alerts = report.alerts
58
58
 
@@ -67,7 +67,7 @@ module ActiveResource
67
67
 
68
68
  should 'set page size on each link' do
69
69
  report = build(:report)
70
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 }))
70
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 }))
71
71
 
72
72
  alerts = report.alerts
73
73
 
@@ -80,7 +80,7 @@ module ActiveResource
80
80
  # The last page may not contain the full per page number of records, and will therefore come back with an incorrect size since the
81
81
  # size is based on the collection size. This will mess up further calls to previous_page or first page so remove the size so it will bring back the default size.
82
82
  report = build(:report)
83
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 2 }))
83
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 2 }))
84
84
 
85
85
  alerts = report.alerts
86
86
 
@@ -89,31 +89,33 @@ module ActiveResource
89
89
  end
90
90
 
91
91
  context '#first_page' do
92
- should 'call the api with the original url and the page number 1 param' do
92
+ should 'call the api with the original url and params and the page number 1 param' do
93
93
  report = build(:report)
94
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
95
- alerts = report.alerts
94
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
95
+ alerts = report.alerts(status: 'pass')
96
96
 
97
97
  page = alerts.first_page
98
98
 
99
99
  assert_equal '1', page.current_page_number
100
100
  assert_equal '2', alerts.current_page_number # original object is unchanged
101
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
102
- if req.uri.query.present? # The first call will not have query params, only the second call
103
- assert_equal "page[number]=1", URI.unescape(req.uri.query)
101
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
102
+ body = JSON.parse(req.body)
103
+ if body["page"].present? # The first call will not have a body["page"], only the second call
104
+ assert_equal 1, body["page"]["number"]
105
+ assert_equal 'pass', body["filter"]["status"]
104
106
  end
105
107
  end
106
108
  end
107
109
 
108
110
  should 'not call the api and return self if already on the first page' do
109
111
  report = build(:report)
110
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
112
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
111
113
  alerts = report.alerts
112
114
 
113
115
  page = alerts.first_page
114
116
 
115
117
  assert_equal '1', page.current_page_number
116
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
118
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
117
119
  assert_predicate req.uri.query, :blank? # It will only be called once to get the first page
118
120
  end
119
121
  end
@@ -122,46 +124,48 @@ module ActiveResource
122
124
  context '#first_page!' do
123
125
  should 'call the api with the original url and the page number 1 param and update itself' do
124
126
  report = build(:report)
125
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
127
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
126
128
  alerts = report.alerts
127
129
 
128
130
  alerts.first_page!
129
131
 
130
132
  assert_equal '1', alerts.current_page_number
131
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
132
- if req.uri.query.present? # The first call will not have query params, only the second call
133
- assert_equal "page[number]=1", URI.unescape(req.uri.query)
134
- end
133
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
134
+ body = JSON.parse(req.body)
135
+ assert_equal 1, body["page"]["number"] if body.present? # The first call will not have a body, only the second call
135
136
  end
136
137
  end
137
138
  end
138
139
 
139
140
  context '#previous_page' do
140
- should 'call the api with the original url and the previous page number param' do
141
+ should 'call the api with the original url and original params and the previous page number param' do
141
142
  report = build(:report)
142
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
143
- alerts = report.alerts
143
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
144
+ alerts = report.alerts(status: 'pass')
144
145
 
145
146
  page = alerts.previous_page
146
147
 
147
148
  assert_equal '1', page.current_page_number
148
149
  assert_equal '2', alerts.current_page_number # original object is unchanged
149
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
150
- if req.uri.query.present? # The first call will not have query params, only the second call
151
- assert_equal "page[number]=1&page[size]=1", URI.unescape(req.uri.query)
150
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
151
+ body = JSON.parse(req.body)
152
+ if body["page"].present? # The first call will not have a body["page"], only the second call
153
+ assert_equal '1', body["page"]["number"]
154
+ assert_equal '1', body["page"]["size"]
155
+ assert_equal 'pass', body["filter"]["status"]
152
156
  end
153
157
  end
154
158
  end
155
159
 
156
160
  should 'not call the api and return self if already on the first page' do
157
161
  report = build(:report)
158
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
162
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
159
163
  alerts = report.alerts
160
164
 
161
165
  page = alerts.previous_page
162
166
 
163
167
  assert_equal '1', page.current_page_number
164
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
168
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
165
169
  assert_predicate req.uri.query, :blank? # It will only be called once to get the first page
166
170
  end
167
171
  end
@@ -170,46 +174,51 @@ module ActiveResource
170
174
  context '#previous_page!' do
171
175
  should 'call the api with the original url and the previous page number param and update itself' do
172
176
  report = build(:report)
173
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
177
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 1, size: 1 }))
174
178
  alerts = report.alerts
175
179
 
176
180
  alerts.previous_page!
177
181
 
178
182
  assert_equal '1', alerts.current_page_number
179
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
180
- if req.uri.query.present? # The first call will not have query params, only the second call
181
- assert_equal "page[number]=1&page[size]=1", URI.unescape(req.uri.query)
183
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
184
+ body = JSON.parse(req.body)
185
+ if body.present? # The first call will not have a body, only the second call
186
+ assert_equal '1', body["page"]["number"]
187
+ assert_equal '1', body["page"]["size"]
182
188
  end
183
189
  end
184
190
  end
185
191
  end
186
192
 
187
193
  context '#next_page' do
188
- should 'call the api with the original url and the next page number param' do
194
+ should 'call the api with the original url and original params and the next page number param' do
189
195
  report = build(:report)
190
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
191
- alerts = report.alerts
196
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
197
+ alerts = report.alerts(status: 'pass')
192
198
 
193
199
  page = alerts.next_page
194
200
 
195
201
  assert_equal '3', page.current_page_number
196
202
  assert_equal '2', alerts.current_page_number # original object is unchanged
197
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
198
- if req.uri.query.present? # The first call will not have query params, only the second call
199
- assert_equal "page[number]=3&page[size]=1", URI.unescape(req.uri.query)
203
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
204
+ body = JSON.parse(req.body)
205
+ if body["page"].present? # The first call will not have a body["page"], only the second call
206
+ assert_equal '3', body["page"]["number"]
207
+ assert_equal '1', body["page"]["size"]
208
+ assert_equal 'pass', body["filter"]["status"]
200
209
  end
201
210
  end
202
211
  end
203
212
 
204
213
  should 'not call the api and return self if already on the last page' do
205
214
  report = build(:report)
206
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
215
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
207
216
  alerts = report.alerts
208
217
 
209
218
  page = alerts.next_page
210
219
 
211
220
  assert_equal '3', page.current_page_number
212
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
221
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
213
222
  assert_predicate req.uri.query, :blank? # It will only be called once to get the first page
214
223
  end
215
224
  end
@@ -218,46 +227,51 @@ module ActiveResource
218
227
  context '#next_page!' do
219
228
  should 'call the api with the original url and the next page number param and update itself' do
220
229
  report = build(:report)
221
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
230
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
222
231
  alerts = report.alerts
223
232
 
224
233
  alerts.next_page!
225
234
 
226
235
  assert_equal '3', alerts.current_page_number
227
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
228
- if req.uri.query.present? # The first call will not have query params, only the second call
229
- assert_equal "page[number]=3&page[size]=1", URI.unescape(req.uri.query)
236
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
237
+ body = JSON.parse(req.body)
238
+ if body.present? # The first call will not have a body, only the second call
239
+ assert_equal '3', body["page"]["number"]
240
+ assert_equal '1', body["page"]["size"]
230
241
  end
231
242
  end
232
243
  end
233
244
  end
234
245
 
235
246
  context '#last_page' do
236
- should 'call the api with the original url and the last page number param' do
247
+ should 'call the api with the original url and original params and the last page number param' do
237
248
  report = build(:report)
238
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
239
- alerts = report.alerts
249
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
250
+ alerts = report.alerts(status: 'pass')
240
251
 
241
252
  page = alerts.last_page
242
253
 
243
254
  assert_equal '3', page.current_page_number
244
255
  assert_equal '2', alerts.current_page_number # original object is unchanged
245
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
246
- if req.uri.query.present? # The first call will not have query params, only the second call
247
- assert_equal "page[number]=3&page[size]=1", URI.unescape(req.uri.query)
256
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
257
+ body = JSON.parse(req.body)
258
+ if body["page"].present? # The first call will not have a body["page"], only the second call
259
+ assert_equal '3', body["page"]["number"]
260
+ assert_equal '1', body["page"]["size"]
261
+ assert_equal 'pass', body["filter"]["status"]
248
262
  end
249
263
  end
250
264
  end
251
265
 
252
266
  should 'not call the api and return self if already on the last page' do
253
267
  report = build(:report)
254
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
268
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
255
269
  alerts = report.alerts
256
270
 
257
271
  page = alerts.last_page
258
272
 
259
273
  assert_equal '3', page.current_page_number
260
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
274
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
261
275
  assert_predicate req.uri.query, :blank? # It will only be called once to get the first page
262
276
  end
263
277
  end
@@ -266,15 +280,17 @@ module ActiveResource
266
280
  context '#last_page!' do
267
281
  should 'call the api with the original url and the last page number param and update itself' do
268
282
  report = build(:report)
269
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
283
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
270
284
  alerts = report.alerts
271
285
 
272
286
  alerts.last_page!
273
287
 
274
288
  assert_equal '3', alerts.current_page_number
275
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
276
- if req.uri.query.present? # The first call will not have query params, only the second call
277
- assert_equal "page[number]=3&page[size]=1", URI.unescape(req.uri.query)
289
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
290
+ body = JSON.parse(req.body)
291
+ if body.present? # The first call will not have a body, only the second call
292
+ assert_equal '3', body["page"]["number"]
293
+ assert_equal '1', body["page"]["size"]
278
294
  end
279
295
  end
280
296
  end
@@ -283,7 +299,7 @@ module ActiveResource
283
299
  context '#page' do
284
300
  should 'raise an error if the page number is not given' do
285
301
  report = build(:report)
286
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
302
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
287
303
  alerts = report.alerts
288
304
 
289
305
  error = assert_raises ArgumentError do
@@ -294,7 +310,7 @@ module ActiveResource
294
310
 
295
311
  should 'raise an error if the page number is not a positive number' do
296
312
  report = build(:report)
297
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
313
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
298
314
  alerts = report.alerts
299
315
 
300
316
  error = assert_raises ArgumentError do
@@ -305,7 +321,7 @@ module ActiveResource
305
321
 
306
322
  should 'raise an error if the page number is greater than the last page number' do
307
323
  report = build(:report)
308
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
324
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
309
325
  alerts = report.alerts
310
326
 
311
327
  error = assert_raises ArgumentError do
@@ -314,31 +330,34 @@ module ActiveResource
314
330
  assert_equal "Page number cannot be greater than the last page number.", error.message
315
331
  end
316
332
 
317
- should 'call the api with the original url and the page number param' do
333
+ should 'call the api with the original url and original params and the page number param' do
318
334
  report = build(:report)
319
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
320
- alerts = report.alerts
335
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
336
+ alerts = report.alerts(status: 'pass')
321
337
 
322
338
  page = alerts.page(3)
323
339
 
324
340
  assert_equal '3', page.current_page_number
325
341
  assert_equal '2', alerts.current_page_number # original object is unchanged
326
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
327
- if req.uri.query.present? # The first call will not have query params, only the second call
328
- assert_equal "page[number]=3&page[size]=1", URI.unescape(req.uri.query)
342
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
343
+ body = JSON.parse(req.body)
344
+ if body["page"].present? # The first call will not have a body["page"], only the second call
345
+ assert_equal 3, body["page"]["number"]
346
+ assert_equal '1', body["page"]["size"]
347
+ assert_equal 'pass', body["filter"]["status"]
329
348
  end
330
349
  end
331
350
  end
332
351
 
333
352
  should 'not call the api and return self if already on that page' do
334
353
  report = build(:report)
335
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 }))
354
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 }))
336
355
  alerts = report.alerts
337
356
 
338
357
  page = alerts.page(2)
339
358
 
340
359
  assert_equal '2', page.current_page_number
341
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
360
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
342
361
  assert_predicate req.uri.query, :blank? # It will only be called once to get the first page
343
362
  end
344
363
  end
@@ -347,15 +366,17 @@ module ActiveResource
347
366
  context '#page!' do
348
367
  should 'call the api with the original url and the page number 1 param and update itself' do
349
368
  report = build(:report)
350
- stub_request(:get, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
369
+ stub_request(:put, %r{reports/#{report.id}/alerts.json*}).to_return(body: json_list(:alert, 3, page: { number: 2, size: 1 })).then.to_return(body: json_list(:alert, 3, page: { number: 3, size: 1 }))
351
370
  alerts = report.alerts
352
371
 
353
372
  alerts.page!(3)
354
373
 
355
374
  assert_equal '3', alerts.current_page_number
356
- assert_requested(:get, %r{reports/#{report.id}/alerts.json*}) do |req|
357
- if req.uri.query.present? # The first call will not have query params, only the second call
358
- assert_equal "page[number]=3&page[size]=1", URI.unescape(req.uri.query)
375
+ assert_requested(:put, %r{reports/#{report.id}/alerts.json*}) do |req|
376
+ body = JSON.parse(req.body)
377
+ if body.present? # The first call will not have a body, only the second call
378
+ assert_equal '3', body["page"]["number"].to_s
379
+ assert_equal '1', body["page"]["size"].to_s
359
380
  end
360
381
  end
361
382
  end
@@ -373,7 +394,7 @@ module ActiveResource
373
394
  end
374
395
 
375
396
  should 'always return the correct page and update itself when using the ! methods' do
376
- report = ESP::Report.last
397
+ report = ESP::Report.all.detect { |r| r.status == 'complete' }
377
398
  alerts = report.alerts
378
399
  last_page_number = alerts.last_page_number
379
400
 
@@ -402,7 +423,7 @@ module ActiveResource
402
423
  end
403
424
 
404
425
  should 'always return the correct page and when not using the ! methods' do
405
- report = ESP::Report.last
426
+ report = ESP::Report.all.detect { |r| r.status == 'complete' }
406
427
  alerts = report.alerts
407
428
  last_page_number = alerts.last_page_number
408
429
 
@@ -6,12 +6,7 @@ module ActiveResource
6
6
  context "with ESP::Team" do
7
7
  context '#load_remote_errors' do
8
8
  should 'should parse an active record response and put error messages in the errors object' do
9
- error = ActiveResource::ResourceInvalid.new('') # ResourceInvalid gets caught by the create method.
10
- error_response = json(:error, :active_record)
11
- response = mock(body: error_response)
12
- error.expects(:response).returns(response)
13
- ActiveResource::Connection.any_instance.expects(:post).raises(error)
14
- stub_request(:post, /teams.json*/).to_return(body: json_list(:alert, 2))
9
+ stub_request(:post, /teams.json*/).to_return(status: 422, body: json(:error, :active_record))
15
10
 
16
11
  team = ESP::Team.create
17
12
 
@@ -21,12 +16,7 @@ module ActiveResource
21
16
  end
22
17
 
23
18
  should 'should parse a non active record response and put error messages in the errors object' do
24
- error = ActiveResource::ResourceInvalid.new('') # ResourceInvalid gets caught by the create method.
25
- error_response = json(:error)
26
- response = mock(body: error_response)
27
- error.expects(:response).returns(response)
28
- ActiveResource::Connection.any_instance.expects(:post).raises(error)
29
- stub_request(:post, /teams.json*/).to_return(body: json_list(:alert, 2))
19
+ stub_request(:post, /teams.json*/).to_return(status: 422, body: json(:error))
30
20
 
31
21
  team = ESP::Team.create
32
22