notifications-ruby-client 4.0.0

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.
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Government Digital Service
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,87 @@
1
+ .DEFAULT_GOAL := help
2
+ SHELL := /bin/bash
3
+
4
+ DOCKER_BUILDER_IMAGE_NAME = govuk/notify-ruby-client-builder
5
+
6
+ BUILD_TAG ?= notifications-ruby-client-manual
7
+
8
+ DOCKER_CONTAINER_PREFIX = ${USER}-${BUILD_TAG}
9
+
10
+ .PHONY: help
11
+ help:
12
+ @cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
13
+
14
+ .PHONY: dependencies
15
+ dependencies: ## Install build dependencies
16
+ bundle install --path=vendor/bundle --binstubs=vendor/bin
17
+
18
+ .PHONY: build
19
+ build: dependencies ## Build project
20
+
21
+ .PHONY: test
22
+ test: ## Run tests
23
+ bundle exec rake spec
24
+
25
+ .PHONY: integration-test
26
+ integration-test: ## Run integration tests
27
+ bundle exec bin/test_client.rb
28
+
29
+ .PHONY: generate-env-file
30
+ generate-env-file: ## Generate the environment file for running the tests inside a Docker container
31
+ bin/generate_docker_env.sh
32
+
33
+ .PHONY: prepare-docker-runner-image
34
+ prepare-docker-runner-image: ## Prepare the Docker builder image
35
+ make -C docker build
36
+
37
+ .PHONY: build-with-docker
38
+ build-with-docker: prepare-docker-runner-image ## Build inside a Docker container
39
+ docker run -i --rm \
40
+ --name "${DOCKER_CONTAINER_PREFIX}-build" \
41
+ -v "`pwd`:/var/project" \
42
+ -e http_proxy="${HTTP_PROXY}" \
43
+ -e HTTP_PROXY="${HTTP_PROXY}" \
44
+ -e https_proxy="${HTTPS_PROXY}" \
45
+ -e HTTPS_PROXY="${HTTPS_PROXY}" \
46
+ -e NO_PROXY="${NO_PROXY}" \
47
+ ${DOCKER_BUILDER_IMAGE_NAME} \
48
+ make build
49
+
50
+ .PHONY: test-with-docker
51
+ test-with-docker: prepare-docker-runner-image generate-env-file ## Run tests inside a Docker container
52
+ docker run -i --rm \
53
+ --name "${DOCKER_CONTAINER_PREFIX}-test" \
54
+ -v "`pwd`:/var/project" \
55
+ -e http_proxy="${HTTP_PROXY}" \
56
+ -e HTTP_PROXY="${HTTP_PROXY}" \
57
+ -e https_proxy="${HTTPS_PROXY}" \
58
+ -e HTTPS_PROXY="${HTTPS_PROXY}" \
59
+ -e NO_PROXY="${NO_PROXY}" \
60
+ --env-file docker.env \
61
+ ${DOCKER_BUILDER_IMAGE_NAME} \
62
+ make test
63
+
64
+ .PHONY: integration-test-with-docker
65
+ integration-test-with-docker: prepare-docker-runner-image generate-env-file ## Run integration tests inside a Docker container
66
+ docker run -i --rm \
67
+ --name "${DOCKER_CONTAINER_PREFIX}-integration-test" \
68
+ -v "`pwd`:/var/project" \
69
+ -e http_proxy="${HTTP_PROXY}" \
70
+ -e HTTP_PROXY="${HTTP_PROXY}" \
71
+ -e https_proxy="${HTTPS_PROXY}" \
72
+ -e HTTPS_PROXY="${HTTPS_PROXY}" \
73
+ -e NO_PROXY="${NO_PROXY}" \
74
+ --env-file docker.env \
75
+ ${DOCKER_BUILDER_IMAGE_NAME} \
76
+ make integration-test
77
+
78
+ .PHONY: clean-docker-containers
79
+ clean-docker-containers: ## Clean up any remaining docker containers
80
+ docker rm -f $(shell docker ps -q -f "name=${DOCKER_CONTAINER_PREFIX}") 2> /dev/null || true
81
+
82
+ .PHONY: run-govuk-lint
83
+ run-govuk-lint: ## Runs GOVUK-lint for Ruby
84
+ bundle exec govuk-lint-ruby lib spec bin/test_client
85
+
86
+ clean:
87
+ rm -rf vendor
@@ -0,0 +1,10 @@
1
+ # GOV.UK Notify Ruby client
2
+
3
+ Use this client to send emails, text messages and letters using the [GOV.UK Notify](https://www.notifications.service.gov.uk) API.
4
+
5
+ Useful links:
6
+
7
+ - [Documentation](https://docs.notifications.service.gov.uk/ruby.html)
8
+ - [Ruby gem](https://rubygems.org/gems/notifications-ruby-client)
9
+ - [Changelog](https://github.com/alphagov/notifications-ruby-client/blob/master/CHANGELOG.md)
10
+ - [Contributing to this client](https://github.com/alphagov/notifications-ruby-client/blob/master/CONTRIBUTING.md)
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "notifications/client"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -eo pipefail
4
+
5
+ function exit_with_msg {
6
+ echo $1
7
+ exit $2
8
+ }
9
+
10
+ echo -n "" > docker.env
11
+
12
+ env_vars=(
13
+ NOTIFY_API_URL
14
+ SERVICE_ID
15
+ API_KEY
16
+ FUNCTIONAL_TEST_EMAIL
17
+ FUNCTIONAL_TEST_NUMBER
18
+ EMAIL_TEMPLATE_ID
19
+ SMS_TEMPLATE_ID
20
+ LETTER_TEMPLATE_ID
21
+ EMAIL_REPLY_TO_ID
22
+ SMS_SENDER_ID
23
+ API_SENDING_KEY
24
+ INBOUND_SMS_QUERY_KEY
25
+ )
26
+
27
+ for env_var in "${env_vars[@]}"; do
28
+ echo "${env_var}=${!env_var}" >> docker.env
29
+ done
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,454 @@
1
+ #!/usr/bin/env ruby
2
+ require './lib/notifications/client'
3
+
4
+ def main
5
+ client = Notifications::Client.new(ENV['API_KEY'], ENV['NOTIFY_API_URL'])
6
+ test_get_template_by_id(client, ENV['EMAIL_TEMPLATE_ID'])
7
+ test_get_template_version(client, ENV['SMS_TEMPLATE_ID'], 1)
8
+ test_get_all_templates(client)
9
+ test_get_all_templates_filter_by_type(client)
10
+ test_generate_template_preview(client, ENV['EMAIL_TEMPLATE_ID'])
11
+ email_notification = test_send_email_endpoint(client)
12
+ email_notification_with_document = test_send_email_endpoint_with_document(client)
13
+ sms_notification = test_send_sms_endpoint(client)
14
+ letter_notification = test_send_letter_endpoint(client)
15
+ precompiled_letter_notification = test_send_precompiled_letter_endpoint(client)
16
+ test_get_notification_by_id_endpoint(client, email_notification.id, 'email')
17
+ test_get_notification_by_id_endpoint(client, email_notification_with_document.id, 'email')
18
+ test_get_notification_by_id_endpoint(client, sms_notification.id, 'sms')
19
+ test_get_notification_by_id_endpoint(client, letter_notification.id, 'letter')
20
+ test_get_notification_by_id_endpoint(client, precompiled_letter_notification.id, 'precompiled_letter')
21
+ test_get_all_notifications(client)
22
+ test_get_received_texts
23
+ p 'ruby client integration tests pass'
24
+ exit 0
25
+ end
26
+
27
+ def test_get_template_by_id(client, id)
28
+ response = client.get_template_by_id(id)
29
+ test_template_response(response, 'test_get_template_by_id')
30
+ end
31
+
32
+ def test_get_template_version(client, id, version)
33
+ response = client.get_template_version(id, version)
34
+ test_template_response(response, 'test_get_template_version')
35
+ end
36
+
37
+ def test_get_all_templates(client)
38
+ response = client.get_all_templates
39
+ unless response.is_a?(Notifications::Client::TemplateCollection)
40
+ p 'failed test_get_all_templates response is not a Notifications::Client::TemplateCollection'
41
+ exit 1
42
+ end
43
+ unless response.collection.length >= 3
44
+ p 'failed test_get_all_templates, expected at least 3 templates returned.'
45
+ exit 1
46
+ end
47
+ test_template_response(response.collection[0], 'test_get_all_templates')
48
+ test_template_response(response.collection[1], 'test_get_all_templates')
49
+ test_template_response(response.collection[2], 'test_get_all_templates')
50
+ end
51
+
52
+ def test_get_all_templates_filter_by_type(client)
53
+ response = client.get_all_templates('type' => 'sms')
54
+ unless response.is_a?(Notifications::Client::TemplateCollection)
55
+ p 'failed test_get_all_templates response is not a Notifications::Client::TemplateCollection'
56
+ exit 1
57
+ end
58
+ unless response.collection.length >= 1
59
+ p 'failed test_get_all_templates, expected at least 2 templates returned.'
60
+ exit 1
61
+ end
62
+ test_template_response(response.collection[0], 'test_get_all_templates')
63
+ end
64
+
65
+ def test_generate_template_preview(client, id)
66
+ response = client.generate_template_preview(id, personalisation: { "name" => "some name" })
67
+ test_template_preview(response)
68
+ end
69
+
70
+ def test_template_response(response, test_method)
71
+ unless response.is_a?(Notifications::Client::Template)
72
+ p 'failed test_get_template_by_id response is not a Notifications::Client::Template'
73
+ exit 1
74
+ end
75
+ unless response.id.is_a?(String)
76
+ p 'failed template id is not a String'
77
+ exit 1
78
+ end
79
+ field_should_not_be_nil(expected_fields_in_template_response, response, test_method)
80
+ end
81
+
82
+ def test_template_preview(response)
83
+ unless response.is_a?(Notifications::Client::TemplatePreview)
84
+ p 'failed test_generate_template_preview response is not a Notifications::Client::TemplatePreview'
85
+ exit 1
86
+ end
87
+ unless response.id.is_a?(String)
88
+ p 'failed template id is not a String'
89
+ exit 1
90
+ end
91
+ field_should_not_be_nil(expected_fields_in_template_preview, response, 'generate_template_preview')
92
+ end
93
+
94
+ def test_send_email_endpoint(client)
95
+ email_resp = client.send_email(email_address: ENV['FUNCTIONAL_TEST_EMAIL'],
96
+ template_id: ENV['EMAIL_TEMPLATE_ID'],
97
+ personalisation: { "name" => "some name" },
98
+ reference: "some reference",
99
+ email_reply_to_id: ENV['EMAIL_REPLY_TO_ID'])
100
+ test_notification_response_data_type(email_resp, 'email')
101
+ email_resp
102
+ end
103
+
104
+ def test_send_email_endpoint_with_document(client)
105
+ email_resp = File.open('spec/test_files/test_pdf.pdf', 'rb') do |f|
106
+ client.send_email(email_address: ENV['FUNCTIONAL_TEST_EMAIL'],
107
+ template_id: ENV['EMAIL_TEMPLATE_ID'],
108
+ personalisation: { name: Notifications.prepare_upload(f) },
109
+ reference: "some reference",
110
+ email_reply_to_id: ENV['EMAIL_REPLY_TO_ID'])
111
+ end
112
+
113
+ test_notification_response_data_type(email_resp, 'email')
114
+ email_resp
115
+ end
116
+
117
+ def test_send_sms_endpoint(client)
118
+ sms_resp = client.send_sms(phone_number: ENV['FUNCTIONAL_TEST_NUMBER'], template_id: ENV['SMS_TEMPLATE_ID'],
119
+ personalisation: { "name" => "some name" },
120
+ reference: "some reference",
121
+ sms_sender_id: ENV['SMS_SENDER_ID'])
122
+ test_notification_response_data_type(sms_resp, 'sms')
123
+ sms_resp
124
+ end
125
+
126
+ def test_send_letter_endpoint(client)
127
+ letter_resp = client.send_letter(
128
+ template_id: ENV['LETTER_TEMPLATE_ID'],
129
+ personalisation: {
130
+ address_line_1: "Her Majesty The Queen",
131
+ address_line_2: "Buckingham Palace",
132
+ postcode: "SW1 1AA"
133
+ },
134
+ reference: "some reference"
135
+ )
136
+ test_notification_response_data_type(letter_resp, 'letter')
137
+ letter_resp
138
+ end
139
+
140
+ def test_send_precompiled_letter_endpoint(client)
141
+ precompiled_letter_resp = File.open('spec/test_files/test_pdf.pdf', 'rb') do |file|
142
+ client.send_precompiled_letter("some reference", file, "first")
143
+ end
144
+
145
+ test_notification_response_data_type(precompiled_letter_resp, 'precompiled_letter')
146
+
147
+ precompiled_letter_resp
148
+ end
149
+
150
+ def test_notification_response_data_type(notification, message_type)
151
+ unless notification.is_a?(Notifications::Client::ResponseNotification) || (notification.is_a?(Notifications::Client::ResponsePrecompiledLetter) && message_type == "precompiled_letter")
152
+ p 'failed ' + message_type + ' response is not a Notifications::Client::ResponseNotification'
153
+ exit 1
154
+ end
155
+ unless notification.id.is_a?(String)
156
+ p 'failed ' + message_type + 'id is not a String'
157
+ exit 1
158
+ end
159
+
160
+ if message_type == 'precompiled_letter'
161
+ field_should_not_be_nil(expected_fields_in_precompiled_letter_response, notification, 'send_precompiled_letter')
162
+ if notification.postage != "first"
163
+ p "Postage should be set to 'first' for precompiled letter sending test. Right now it is set to #{notification.postage}"
164
+ exit 1
165
+ end
166
+ return
167
+ end
168
+
169
+ field_should_not_be_nil(expected_fields_in_notification_response, notification, 'send_' + message_type)
170
+ hash_key_should_not_be_nil(expected_fields_in_template, notification.send('template'), 'send_' + message_type + '.template')
171
+
172
+ if message_type == 'email'
173
+ hash_key_should_not_be_nil(expected_fields_in_email_content, notification.send('content'), 'send_' + message_type + '.content')
174
+ elsif message_type == 'sms'
175
+ hash_key_should_not_be_nil(expected_fields_in_sms_content, notification.send('content'), 'send_' + message_type + '.content')
176
+ elsif message_type == 'letter'
177
+ hash_key_should_not_be_nil(expected_fields_in_letter_content, notification.send('content'), 'send_' + message_type + '.content')
178
+ end
179
+ end
180
+
181
+ def test_get_notification_by_id_endpoint(client, id, message_type)
182
+ get_notification_response = client.get_notification(id)
183
+
184
+ unless get_notification_response.is_a?(Notifications::Client::Notification)
185
+ p 'get notification is not a Notifications::Client::Notification for id ' + id
186
+ exit 1
187
+ end
188
+
189
+ if message_type == 'email'
190
+ field_should_not_be_nil(expected_fields_in_email_notification, get_notification_response, 'Notifications::Client::Notification for type email')
191
+ field_should_be_nil(expected_fields_in_email_notification_that_are_nil, get_notification_response, 'Notifications::Client::Notification for type email')
192
+ hash_key_should_not_be_nil(expected_fields_in_template, get_notification_response.send('template'), 'Notifications::Client::Notification.template for type email')
193
+ elsif message_type == 'sms'
194
+ field_should_not_be_nil(expected_fields_in_sms_notification, get_notification_response, 'Notifications::Client::Notification for type sms')
195
+ field_should_be_nil(expected_fields_in_sms_notification_that_are_nil, get_notification_response, 'Notifications::Client::Notification for type sms')
196
+ hash_key_should_not_be_nil(expected_fields_in_template, get_notification_response.send('template'), 'Notifications::Client::Notification.template for type sms')
197
+ elsif message_type == 'letter'
198
+ field_should_not_be_nil(expected_fields_in_letter_notification, get_notification_response, 'Notifications::Client::Notification for type letter')
199
+ field_should_be_nil(expected_fields_in_letter_notification_that_are_nil, get_notification_response, 'Notifications::Client::Notification for type letter')
200
+ hash_key_should_not_be_nil(expected_fields_in_template, get_notification_response.send('template'), 'Notifications::Client::Notification.template for type letter')
201
+ elsif message_type == 'precompiled_letter'
202
+ field_should_not_be_nil(expected_fields_in_precompiled_letter_notification, get_notification_response, 'Notifications::Client::Notification for type precompiled letter')
203
+ field_should_be_nil(expected_fields_in_precompiled_letter_notification_that_are_nil, get_notification_response, 'Notifications::Client::Notification for type precompiled letter')
204
+ hash_key_should_not_be_nil(expected_fields_in_template, get_notification_response.send('template'), 'Notifications::Client::Notification.template for type precompiled letter')
205
+ end
206
+ end
207
+
208
+ def hash_key_should_not_be_nil(fields, obj, method_name)
209
+ fields.each do |field|
210
+ if obj.has_value?(:"#{field}")
211
+ p 'contract test failed because ' + field + ' should not be nil for ' + method_name + ' response'
212
+ exit 1
213
+ end
214
+ end
215
+ end
216
+
217
+ def field_should_not_be_nil(fields, obj, method_name)
218
+ fields.each do |field|
219
+ if obj.send(:"#{field}") == nil
220
+ p 'contract test failed because ' + field + ' should not be nil for ' + method_name + ' response'
221
+ exit 1
222
+ end
223
+ end
224
+ end
225
+
226
+ def field_should_be_nil(fields, obj, method_name)
227
+ fields.each do |field|
228
+ if obj.send(:"#{field}") != nil
229
+ p 'contract test failed because ' + field + ' should be nil for ' + method_name + ' response'
230
+ exit 1
231
+ end
232
+ end
233
+ end
234
+
235
+ def expected_fields_in_template_response
236
+ %w(id
237
+ name
238
+ type
239
+ created_at
240
+ created_by
241
+ body
242
+ version)
243
+ end
244
+
245
+ def expected_fields_in_template_preview
246
+ %w(id
247
+ body
248
+ version
249
+ type
250
+ html)
251
+ end
252
+
253
+ def expected_fields_in_notification_response
254
+ %w(id
255
+ reference
256
+ content
257
+ template
258
+ uri)
259
+ end
260
+
261
+ def expected_fields_in_precompiled_letter_response
262
+ %w(id
263
+ reference
264
+ postage)
265
+ end
266
+
267
+ def expected_fields_in_email_content
268
+ %w(from_email
269
+ body
270
+ subject)
271
+ end
272
+
273
+ def expected_fields_in_sms_content
274
+ %w(body
275
+ from_number)
276
+ end
277
+
278
+ def expected_fields_in_letter_content
279
+ %w(
280
+ body
281
+ subject
282
+ )
283
+ end
284
+
285
+ def expected_fields_in_email_notification
286
+ %w(id
287
+ email_address
288
+ type
289
+ status
290
+ template
291
+ body
292
+ subject
293
+ created_at)
294
+ end
295
+
296
+ def expected_fields_in_email_notification_that_are_nil
297
+ %w(phone_number
298
+ line_1
299
+ line_2
300
+ line_3
301
+ line_4
302
+ line_5
303
+ line_5
304
+ line_6
305
+ postcode
306
+ created_by_name
307
+ postage)
308
+ end
309
+
310
+ def expected_fields_in_sms_notification
311
+ %w(id
312
+ phone_number
313
+ type
314
+ status
315
+ template
316
+ body
317
+ created_at)
318
+ end
319
+
320
+ def expected_fields_in_sms_notification_that_are_nil
321
+ %w(email_address
322
+ line_1
323
+ line_2
324
+ line_3
325
+ line_4
326
+ line_5
327
+ line_5
328
+ line_6
329
+ postcode
330
+ subject
331
+ created_by_name
332
+ postage)
333
+ end
334
+
335
+ def expected_fields_in_letter_notification
336
+ %w(
337
+ id
338
+ type
339
+ status
340
+ template
341
+ body
342
+ subject
343
+ line_1
344
+ line_2
345
+ postcode
346
+ created_at
347
+ postage
348
+ )
349
+ end
350
+
351
+ def expected_fields_in_letter_notification_that_are_nil
352
+ %w(
353
+ phone_number
354
+ email_address
355
+ line_3
356
+ line_4
357
+ line_5
358
+ line_5
359
+ line_6
360
+ created_by_name
361
+ )
362
+ end
363
+
364
+ def expected_fields_in_precompiled_letter_notification
365
+ %w(
366
+ body
367
+ created_at
368
+ id
369
+ line_1
370
+ reference
371
+ status
372
+ subject
373
+ template
374
+ type
375
+ postage
376
+ )
377
+ end
378
+
379
+ def expected_fields_in_precompiled_letter_notification_that_are_nil
380
+ %w(
381
+ completed_at
382
+ created_by_name
383
+ email_address
384
+ line_2
385
+ line_3
386
+ line_4
387
+ line_5
388
+ line_6
389
+ phone_number
390
+ postcode
391
+ sent_at
392
+ )
393
+ end
394
+
395
+ def expected_fields_in_template
396
+ %w(id
397
+ version
398
+ uri)
399
+ end
400
+
401
+ def expected_fields_in_received_text_response
402
+ %w(id
403
+ created_at
404
+ content
405
+ notify_number
406
+ service_id
407
+ user_number)
408
+ end
409
+
410
+ def test_get_all_notifications(client)
411
+ notifications = client.get_notifications
412
+ unless notifications.is_a?(Notifications::Client::NotificationsCollection)
413
+ p 'get all notifications is not Notifications::Client::NotificationsCollection'
414
+ exit 1
415
+ end
416
+ field_should_not_be_nil(expected_fields_for_get_all_notifications, notifications, 'get_notifications')
417
+ end
418
+
419
+ def test_get_received_texts
420
+ client = Notifications::Client.new(ENV['INBOUND_SMS_QUERY_KEY'], ENV['NOTIFY_API_URL'])
421
+ response = client.get_received_texts
422
+ unless response.is_a?(Notifications::Client::ReceivedTextCollection)
423
+ p 'failed test_get_received_texts response is not a Notifications::Client::ReceivedTextCollection'
424
+ exit 1
425
+ end
426
+ unless response.collection.length >= 0
427
+ p 'failed test_get_received_texts, expected at least 1 received text returned.'
428
+ exit 1
429
+ end
430
+ test_received_text_response(response.collection[0], 'test_received_text_response')
431
+ test_received_text_response(response.collection[1], 'test_received_text_response')
432
+ test_received_text_response(response.collection[2], 'test_received_text_response')
433
+ end
434
+
435
+ def test_received_text_response(response, test_method)
436
+ unless response.is_a?(Notifications::Client::ReceivedText)
437
+ p 'failed test_get_received_texts response is not a Notifications::Client::ReceivedText'
438
+ exit 1
439
+ end
440
+ unless response.id.is_a?(String)
441
+ p 'failed received text id is not a String'
442
+ exit 1
443
+ end
444
+ field_should_not_be_nil(expected_fields_in_received_text_response, response, test_method)
445
+ end
446
+
447
+ def expected_fields_for_get_all_notifications
448
+ %W(links
449
+ collection)
450
+ end
451
+
452
+ if __FILE__ == $PROGRAM_NAME
453
+ main
454
+ end