bugsnag-maze-runner 6.27.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/bugsnag-print-load-paths +6 -0
- data/bin/download-logs +76 -0
- data/bin/maze-runner +136 -0
- data/bin/upload-app +56 -0
- data/lib/features/scripts/await-android-emulator.sh +11 -0
- data/lib/features/scripts/clear-android-app-data.sh +8 -0
- data/lib/features/scripts/force-stop-android-app.sh +8 -0
- data/lib/features/scripts/install-android-app.sh +15 -0
- data/lib/features/scripts/launch-android-app.sh +38 -0
- data/lib/features/scripts/launch-android-emulator.sh +15 -0
- data/lib/features/steps/android_steps.rb +51 -0
- data/lib/features/steps/app_automator_steps.rb +228 -0
- data/lib/features/steps/aws_sam_steps.rb +212 -0
- data/lib/features/steps/breadcrumb_steps.rb +50 -0
- data/lib/features/steps/browser_steps.rb +93 -0
- data/lib/features/steps/build_api_steps.rb +25 -0
- data/lib/features/steps/document_server_steps.rb +7 -0
- data/lib/features/steps/error_reporting_steps.rb +342 -0
- data/lib/features/steps/feature_flag_steps.rb +190 -0
- data/lib/features/steps/header_steps.rb +72 -0
- data/lib/features/steps/log_steps.rb +29 -0
- data/lib/features/steps/multipart_request_steps.rb +142 -0
- data/lib/features/steps/network_steps.rb +75 -0
- data/lib/features/steps/payload_steps.rb +234 -0
- data/lib/features/steps/proxy_steps.rb +34 -0
- data/lib/features/steps/query_parameter_steps.rb +31 -0
- data/lib/features/steps/request_assertion_steps.rb +107 -0
- data/lib/features/steps/runner_steps.rb +406 -0
- data/lib/features/steps/session_tracking_steps.rb +116 -0
- data/lib/features/steps/value_steps.rb +119 -0
- data/lib/features/support/env.rb +7 -0
- data/lib/features/support/internal_hooks.rb +260 -0
- data/lib/maze/appium_server.rb +112 -0
- data/lib/maze/assertions/request_set_assertions.rb +97 -0
- data/lib/maze/aws/sam.rb +112 -0
- data/lib/maze/bitbar_devices.rb +84 -0
- data/lib/maze/bitbar_utils.rb +112 -0
- data/lib/maze/browser_stack_devices.rb +160 -0
- data/lib/maze/browser_stack_utils.rb +164 -0
- data/lib/maze/browsers_bs.yml +220 -0
- data/lib/maze/browsers_cbt.yml +100 -0
- data/lib/maze/bugsnag_config.rb +42 -0
- data/lib/maze/capabilities.rb +126 -0
- data/lib/maze/checks/assert_check.rb +91 -0
- data/lib/maze/checks/noop_check.rb +34 -0
- data/lib/maze/compare.rb +161 -0
- data/lib/maze/configuration.rb +174 -0
- data/lib/maze/docker.rb +108 -0
- data/lib/maze/document_server.rb +46 -0
- data/lib/maze/driver/appium.rb +217 -0
- data/lib/maze/driver/browser.rb +138 -0
- data/lib/maze/driver/resilient_appium.rb +51 -0
- data/lib/maze/errors.rb +20 -0
- data/lib/maze/helper.rb +118 -0
- data/lib/maze/hooks/appium_hooks.rb +216 -0
- data/lib/maze/hooks/browser_hooks.rb +68 -0
- data/lib/maze/hooks/command_hooks.rb +9 -0
- data/lib/maze/hooks/hooks.rb +61 -0
- data/lib/maze/interactive_cli.rb +173 -0
- data/lib/maze/logger.rb +73 -0
- data/lib/maze/macos_utils.rb +14 -0
- data/lib/maze/network.rb +49 -0
- data/lib/maze/option/parser.rb +245 -0
- data/lib/maze/option/processor.rb +143 -0
- data/lib/maze/option/validator.rb +184 -0
- data/lib/maze/option.rb +64 -0
- data/lib/maze/plugins/bugsnag_reporting_plugin.rb +49 -0
- data/lib/maze/plugins/cucumber_report_plugin.rb +101 -0
- data/lib/maze/plugins/global_retry_plugin.rb +38 -0
- data/lib/maze/proxy.rb +114 -0
- data/lib/maze/request_list.rb +82 -0
- data/lib/maze/retry_handler.rb +76 -0
- data/lib/maze/runner.rb +149 -0
- data/lib/maze/sauce_labs_utils.rb +96 -0
- data/lib/maze/server.rb +207 -0
- data/lib/maze/servlets/base_servlet.rb +22 -0
- data/lib/maze/servlets/command_servlet.rb +44 -0
- data/lib/maze/servlets/log_servlet.rb +64 -0
- data/lib/maze/servlets/reflective_servlet.rb +69 -0
- data/lib/maze/servlets/servlet.rb +160 -0
- data/lib/maze/smart_bear_utils.rb +71 -0
- data/lib/maze/store.rb +15 -0
- data/lib/maze/terminating_server.rb +129 -0
- data/lib/maze/timers.rb +51 -0
- data/lib/maze/wait.rb +35 -0
- data/lib/maze.rb +27 -0
- metadata +371 -0
@@ -0,0 +1,212 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../maze'
|
4
|
+
require_relative '../../maze/aws/sam'
|
5
|
+
|
6
|
+
# @!group AWS SAM steps
|
7
|
+
|
8
|
+
# Invoke a lambda directly with 'sam invoke'
|
9
|
+
#
|
10
|
+
# @step_input lambda_name [String] The name of the lambda to invoke
|
11
|
+
# @step_input directory [String] The directory to invoke the lambda in
|
12
|
+
Given('I invoke the {string} lambda in {string}') do |lambda_name, directory|
|
13
|
+
Maze::Aws::Sam.invoke(directory, lambda_name)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Invoke a lambda directly with 'sam invoke' and the given event
|
17
|
+
#
|
18
|
+
# @step_input lambda_name [String] The name of the lambda to invoke
|
19
|
+
# @step_input directory [String] The directory to invoke the lambda in
|
20
|
+
# @step_input event_file [String] The event file to call the lambda with
|
21
|
+
Given('I invoke the {string} lambda in {string} with the {string} event') do |lambda_name, directory, event_file|
|
22
|
+
Maze::Aws::Sam.invoke(directory, lambda_name, event_file)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Test the exit code of the SAM CLI process.
|
26
|
+
#
|
27
|
+
# @step_input expected [Integer] The expected exit code
|
28
|
+
Then('the SAM exit code equals {int}') do |expected|
|
29
|
+
Maze.check.equal(expected, Maze::Aws::Sam.last_exit_code)
|
30
|
+
end
|
31
|
+
|
32
|
+
# Test the Lambda response is empty but not-null. This indicates the Lambda did
|
33
|
+
# not respond but did run successfully
|
34
|
+
Then('the lambda response is empty') do
|
35
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
36
|
+
|
37
|
+
Maze.check.equal({}, Maze::Aws::Sam.last_response)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Test a Lambda response field equals the given string.
|
41
|
+
#
|
42
|
+
# @step_input key_path [String] The response element to test
|
43
|
+
# @step_input expected [String] The string to test against
|
44
|
+
Then('the lambda response {string} equals {string}') do |key_path, expected|
|
45
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
46
|
+
|
47
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
48
|
+
|
49
|
+
Maze.check.equal(expected, actual)
|
50
|
+
end
|
51
|
+
|
52
|
+
# Test a Lambda response field contains the given string.
|
53
|
+
#
|
54
|
+
# @step_input key_path [String] The response element to test
|
55
|
+
# @step_input expected [String] The string to test against
|
56
|
+
Then('the lambda response {string} contains {string}') do |key_path, expected|
|
57
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
58
|
+
|
59
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
60
|
+
|
61
|
+
Maze.check.include(actual, expected)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Test a Lambda response field equals the given integer.
|
65
|
+
#
|
66
|
+
# @step_input key_path [String] The response element to test
|
67
|
+
# @step_input expected [Integer] The integer to test against
|
68
|
+
Then('the lambda response {string} equals {int}') do |key_path, expected|
|
69
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
70
|
+
|
71
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
72
|
+
|
73
|
+
Maze.check.equal(expected, actual)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Test a Lambda response field is true.
|
77
|
+
#
|
78
|
+
# @step_input key_path [String] The response element to test
|
79
|
+
Then('the lambda response {string} is true') do |key_path|
|
80
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
81
|
+
|
82
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
83
|
+
|
84
|
+
Maze.check.true(actual)
|
85
|
+
end
|
86
|
+
|
87
|
+
# Test a Lambda response field is false.
|
88
|
+
#
|
89
|
+
# @step_input key_path [String] The response element to test
|
90
|
+
Then('the lambda response {string} is false') do |key_path|
|
91
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
92
|
+
|
93
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
94
|
+
|
95
|
+
Maze.check.false(actual)
|
96
|
+
end
|
97
|
+
|
98
|
+
# Test a Lambda response field is null.
|
99
|
+
#
|
100
|
+
# @step_input key_path [String] The response element to test
|
101
|
+
Then('the lambda response {string} is null') do |key_path|
|
102
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
103
|
+
|
104
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
105
|
+
|
106
|
+
Maze.check.nil(actual)
|
107
|
+
end
|
108
|
+
|
109
|
+
# Test a Lambda response field is not null.
|
110
|
+
#
|
111
|
+
# @step_input key_path [String] The response element to test
|
112
|
+
Then('the lambda response {string} is not null') do |key_path|
|
113
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
114
|
+
|
115
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
116
|
+
|
117
|
+
Maze.check.not_nil(actual)
|
118
|
+
end
|
119
|
+
|
120
|
+
# Test a Lambda response field is greater than the given integer.
|
121
|
+
#
|
122
|
+
# @step_input key_path [String] The response element to test
|
123
|
+
# @step_input expected [Integer] The integer to test against
|
124
|
+
Then('the lambda response {string} is greater than {int}') do |key_path, expected|
|
125
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
126
|
+
|
127
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
128
|
+
|
129
|
+
Maze.check.operator(actual, :>, expected)
|
130
|
+
end
|
131
|
+
|
132
|
+
# Test a Lambda response field is less than the given integer.
|
133
|
+
#
|
134
|
+
# @step_input key_path [String] The response element to test
|
135
|
+
# @step_input expected [Integer] The integer to test against
|
136
|
+
Then('the lambda response {string} is less than {int}') do |key_path, expected|
|
137
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
138
|
+
|
139
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
140
|
+
|
141
|
+
Maze.check.operator(actual, :<, expected)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Test a Lambda response field starts with the given string.
|
145
|
+
#
|
146
|
+
# @step_input key_path [String] The response element to test
|
147
|
+
# @step_input expected [String] The string to test against
|
148
|
+
Then('the lambda response {string} starts with {string}') do |key_path, expected|
|
149
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
150
|
+
|
151
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
152
|
+
|
153
|
+
Maze.check.kind_of(String, actual)
|
154
|
+
Maze.check.true(
|
155
|
+
actual.start_with?(expected),
|
156
|
+
"Field '#{key_path}' value ('#{actual}') does not start with '#{expected}'"
|
157
|
+
)
|
158
|
+
end
|
159
|
+
|
160
|
+
# Test a Lambda response field ends with the given string.
|
161
|
+
#
|
162
|
+
# @step_input key_path [String] The response element to test
|
163
|
+
# @step_input expected [String] The string to test against
|
164
|
+
Then('the lambda response {string} ends with {string}') do |key_path, expected|
|
165
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
166
|
+
|
167
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
168
|
+
|
169
|
+
Maze.check.kind_of(String, actual)
|
170
|
+
Maze.check.true(
|
171
|
+
actual.end_with?(expected),
|
172
|
+
"Field '#{key_path}' value ('#{actual}') does not start with '#{expected}'"
|
173
|
+
)
|
174
|
+
end
|
175
|
+
|
176
|
+
# Test a Lambda response field is an array with a specific number of elements.
|
177
|
+
#
|
178
|
+
# @step_input key_path [String] The response element to test
|
179
|
+
# @step_input expected [Integer] The expected number of elements
|
180
|
+
Then('the lambda response {string} is an array with {int} element(s)') do |key_path, expected|
|
181
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
182
|
+
|
183
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
184
|
+
|
185
|
+
Maze.check.kind_of(Array, actual)
|
186
|
+
Maze.check.equal(expected, actual.length)
|
187
|
+
end
|
188
|
+
|
189
|
+
# Test a Lambda response field is an array with at least 1 element.
|
190
|
+
#
|
191
|
+
# @step_input key_path [String] The response element to test
|
192
|
+
Then('the lambda response {string} is a non-empty array') do |key_path|
|
193
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
194
|
+
|
195
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
196
|
+
|
197
|
+
Maze.check.kind_of(Array, actual)
|
198
|
+
Maze.check.false(actual.empty?)
|
199
|
+
end
|
200
|
+
|
201
|
+
# Test a Lambda response field matches the given regex.
|
202
|
+
#
|
203
|
+
# @step_input key_path [String] The response element to test
|
204
|
+
# @step_input expected [String] The regex to match against
|
205
|
+
Then('the lambda response {string} matches the regex {string}') do |key_path, regex|
|
206
|
+
expected = Regexp.new(regex)
|
207
|
+
Maze.check.not_nil(Maze::Aws::Sam.last_response, 'No lambda response!')
|
208
|
+
|
209
|
+
actual = Maze::Helper.read_key_path(Maze::Aws::Sam.last_response, key_path)
|
210
|
+
|
211
|
+
Maze.check.match(expected, actual)
|
212
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# @!group Breadcrumb steps
|
2
|
+
|
3
|
+
# Tests whether the first event entry contains a specific breadcrumb with a type and name.
|
4
|
+
#
|
5
|
+
# @step_input type [String] The expected breadcrumb's type
|
6
|
+
# @step_input name [String] The expected breadcrumb's name
|
7
|
+
Then('the event has a {string} breadcrumb named {string}') do |type, name|
|
8
|
+
value = Maze::Server.errors.current[:body]['events'].first['breadcrumbs']
|
9
|
+
found = false
|
10
|
+
value.each do |crumb|
|
11
|
+
found = true if crumb['type'] == type and crumb['name'] == name
|
12
|
+
end
|
13
|
+
raise("No breadcrumb matched: #{value}") unless found
|
14
|
+
end
|
15
|
+
|
16
|
+
# Tests whether the first event entry contains a specific breadcrumb with a type and message.
|
17
|
+
#
|
18
|
+
# @step_input type [String] The expected breadcrumb's type
|
19
|
+
# @step_input message [String] The expected breadcrumb's message
|
20
|
+
Then('the event has a {string} breadcrumb with message {string}') do |type, message|
|
21
|
+
value = Maze::Server.errors.current[:body]['events'].first['breadcrumbs']
|
22
|
+
found = false
|
23
|
+
value.each do |crumb|
|
24
|
+
found = true if crumb['type'] == type && crumb['metaData'] && crumb['metaData']['message'] == message
|
25
|
+
end
|
26
|
+
raise("No breadcrumb matched: #{value}") unless found
|
27
|
+
end
|
28
|
+
|
29
|
+
# Tests whether the first event entry does not contain a breadcrumb with a specific type.
|
30
|
+
# Used for confirming filtering of breadcrumbs
|
31
|
+
#
|
32
|
+
# @step_input type [String] The type of breadcrumb expected to not be present
|
33
|
+
Then('the event does not have a {string} breadcrumb') do |type|
|
34
|
+
value = Maze::Server.errors.current[:body]['events'].first['breadcrumbs']
|
35
|
+
found = false
|
36
|
+
value.each do |crumb|
|
37
|
+
found = true if crumb['type'] == type
|
38
|
+
end
|
39
|
+
raise("Breadcrumb with type: #{type} matched") if found
|
40
|
+
end
|
41
|
+
|
42
|
+
# Tests whether any breadcrumb matches a given JSON fixture. This follows all the usual rules for JSON fixture matching.
|
43
|
+
#
|
44
|
+
# @step_input json_fixture [String] A path to the JSON fixture to compare against
|
45
|
+
Then('the event contains a breadcrumb matching the JSON fixture in {string}') do |json_fixture|
|
46
|
+
breadcrumbs = Maze::Helper.read_key_path(Maze::Server.errors.current[:body], 'events.0.breadcrumbs')
|
47
|
+
expected = JSON.parse(open(json_fixture, &:read))
|
48
|
+
match = breadcrumbs.any? { |breadcrumb| Maze::Compare.value(expected, breadcrumb).equal? }
|
49
|
+
Maze.check.true(match, 'No breadcrumbs in the event matched the given breadcrumb')
|
50
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# @!group Browser steps
|
2
|
+
|
3
|
+
When('I navigate to the URL {string}') do |path|
|
4
|
+
begin
|
5
|
+
$logger.debug "Navigating to: #{path}"
|
6
|
+
Maze.driver.navigate.to path
|
7
|
+
rescue => exception
|
8
|
+
$logger.error("#{exception.class} occurred during navigation attempt with message: #{exception.message}")
|
9
|
+
$logger.error("Restarting driver and retrying navigation to: #{path}")
|
10
|
+
Maze.driver.restart_driver
|
11
|
+
Maze.driver.navigate.to path
|
12
|
+
# If a further error occurs it will get thrown as normal
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Then(/^the error is a valid browser payload for the error reporting API$/) do
|
17
|
+
if !/^ie_(8|9|10)$/.match(Maze.config.browser)
|
18
|
+
steps %(
|
19
|
+
Then the error "Bugsnag-API-Key" header is not null
|
20
|
+
And the error "Content-Type" header equals one of:
|
21
|
+
| application/json |
|
22
|
+
| application/json; charset=UTF-8 |
|
23
|
+
And the error "Bugsnag-Payload-Version" header equals "4"
|
24
|
+
And the error "Bugsnag-Sent-At" header is a timestamp
|
25
|
+
)
|
26
|
+
else
|
27
|
+
steps %(
|
28
|
+
Then the error "apiKey" query parameter is not null
|
29
|
+
And the error "payloadVersion" query parameter equals "4"
|
30
|
+
And the error "sentAt" query parameter is a timestamp
|
31
|
+
)
|
32
|
+
end
|
33
|
+
steps %(
|
34
|
+
And the error payload field "notifier.name" is not null
|
35
|
+
And the error payload field "notifier.url" is not null
|
36
|
+
And the error payload field "notifier.version" is not null
|
37
|
+
And the error payload field "events" is a non-empty array
|
38
|
+
|
39
|
+
And each element in error payload field "events" has "severity"
|
40
|
+
And each element in error payload field "events" has "severityReason.type"
|
41
|
+
And each element in error payload field "events" has "unhandled"
|
42
|
+
And each element in error payload field "events" has "exceptions"
|
43
|
+
|
44
|
+
And the exception "type" equals "browserjs"
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
Then('the session is a valid browser payload for the session tracking API') do
|
49
|
+
if !/^ie_(8|9|10)$/.match(Maze.config.browser)
|
50
|
+
steps %(
|
51
|
+
Then the session "Bugsnag-API-Key" header is not null
|
52
|
+
And the session "Content-Type" header equals one of:
|
53
|
+
| application/json |
|
54
|
+
| application/json; charset=UTF-8 |
|
55
|
+
And the session "Bugsnag-Payload-Version" header equals "1"
|
56
|
+
And the session "Bugsnag-Sent-At" header is a timestamp
|
57
|
+
)
|
58
|
+
else
|
59
|
+
steps %(
|
60
|
+
Then the session "apiKey" query parameter is not null
|
61
|
+
And the session "payloadVersion" query parameter equals "1"
|
62
|
+
And the session "sentAt" query parameter is a timestamp
|
63
|
+
)
|
64
|
+
end
|
65
|
+
steps %(
|
66
|
+
And the session payload field "app" is not null
|
67
|
+
And the session payload field "device" is not null
|
68
|
+
And the session payload field "notifier.name" is not null
|
69
|
+
And the session payload field "notifier.url" is not null
|
70
|
+
And the session payload field "notifier.version" is not null
|
71
|
+
And the session payload has a valid sessions array
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
Then('the event device ID is valid') do
|
76
|
+
if Maze.driver.local_storage?
|
77
|
+
step('the event "device.id" matches "^c[a-z0-9]{20,32}$"')
|
78
|
+
else
|
79
|
+
$logger.info('Local storage is not supported in this browser, assuming device ID is null')
|
80
|
+
step('the event "device.id" is null')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
Then('the event device ID is {string}') do |expected_id|
|
85
|
+
if Maze.driver.local_storage?
|
86
|
+
step("the event \"device.id\" equals \"#{expected_id}\"")
|
87
|
+
else
|
88
|
+
$logger.info('Local storage is not supported in this browser, assuming device ID is null')
|
89
|
+
step('the event "device.id" is null')
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# @!endgroup
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @!group Build API Steps
|
4
|
+
|
5
|
+
# Tests whether the top-most payload is valid for the Bugsnag build API
|
6
|
+
# APIKey fields and headers are tested against the '$api_key' global variable
|
7
|
+
Then('the build is valid for the Build API') do
|
8
|
+
steps %(
|
9
|
+
And the build payload field "apiKey" equals "#{$api_key}"
|
10
|
+
And the build payload field "appVersion" is not null
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Tests whether the top-most payload is valid for the Android mapping API
|
15
|
+
# APIKey fields and headers are tested against the '$api_key' global variable
|
16
|
+
Then('the build is valid for the Android Mapping API') do
|
17
|
+
steps %(
|
18
|
+
And the build payload field "apiKey" equals "#{$api_key}"
|
19
|
+
And the build payload field "proguard" is not null
|
20
|
+
And the build payload field "appId" is not null
|
21
|
+
And the build payload field "versionCode" is not null
|
22
|
+
And the build payload field "buildUUID" is not null
|
23
|
+
And the build payload field "versionName" is not null
|
24
|
+
)
|
25
|
+
end
|