messagemedia_messages_sdk 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +106 -606
- data/lib/message_media_messages.rb +2 -2
- data/lib/message_media_messages/api_helper.rb +1 -2
- data/lib/message_media_messages/configuration.rb +9 -1
- data/lib/message_media_messages/controllers/base_controller.rb +18 -1
- data/lib/message_media_messages/controllers/delivery_reports_controller.rb +50 -32
- data/lib/message_media_messages/controllers/messages_controller.rb +93 -66
- data/lib/message_media_messages/controllers/replies_controller.rb +49 -32
- data/lib/message_media_messages/exceptions/api_exception.rb +2 -2
- data/lib/message_media_messages/http/auth/basic_auth.rb +1 -1
- data/lib/message_media_messages/http/auth/hmac_auth.rb +54 -0
- data/lib/message_media_messages/http/http_call_back.rb +2 -2
- data/lib/message_media_messages/http/http_client.rb +17 -16
- data/lib/message_media_messages/http/http_context.rb +2 -2
- data/lib/message_media_messages/http/http_request.rb +10 -10
- data/lib/message_media_messages/http/http_response.rb +3 -3
- data/lib/message_media_messages/message_media_messages_client.rb +8 -5
- data/test/controllers/controller_test_base.rb +4 -1
- data/test/controllers/test_delivery_reports_controller.rb +162 -129
- data/test/controllers/test_messages_controller.rb +165 -104
- data/test/controllers/test_replies_controller.rb +162 -130
- data/test/test_helper.rb +9 -21
- metadata +4 -3
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
module MessageMediaMessages
|
5
5
|
# RepliesController
|
6
|
+
# noinspection RubyResolve,RubyInstanceMethodNamingConvention,RubyStringKeysInHashInspection
|
6
7
|
class RepliesController < BaseController
|
7
8
|
@instance = RepliesController.new
|
8
9
|
|
@@ -36,49 +37,58 @@ module MessageMediaMessages
|
|
36
37
|
# Up to 100 replies can be confirmed in a single confirm replies request.
|
37
38
|
# @param [ConfirmRepliesAsReceivedRequest] body Required parameter:
|
38
39
|
# Example:
|
40
|
+
# @param [Object] account_header_value The account id to pass to the API
|
39
41
|
# @return Mixed response from the API call
|
40
|
-
def create_confirm_replies_as_received(body)
|
42
|
+
def create_confirm_replies_as_received(body, account_header_value=nil)
|
41
43
|
begin
|
42
44
|
@logger.info("create_confirm_replies_as_received called.")
|
45
|
+
|
46
|
+
request_url = '/v1/replies/confirmed'
|
47
|
+
|
43
48
|
# Prepare query url.
|
44
49
|
@logger.info("Preparing query URL for create_confirm_replies_as_received.")
|
45
|
-
|
46
|
-
|
47
|
-
|
50
|
+
query_builder = Configuration.base_uri.dup
|
51
|
+
query_builder << request_url
|
52
|
+
query_url = APIHelper.clean_url query_builder
|
48
53
|
|
49
54
|
# Prepare headers.
|
50
55
|
@logger.info("Preparing headers for create_confirm_replies_as_received.")
|
51
|
-
|
56
|
+
headers = {
|
52
57
|
'accept' => 'application/json',
|
53
58
|
'content-type' => 'application/json; charset=utf-8'
|
54
59
|
}
|
55
|
-
|
60
|
+
|
61
|
+
add_account_header(headers, account_header_value)
|
62
|
+
|
63
|
+
json_body = body.to_json
|
64
|
+
|
56
65
|
# Prepare and execute HttpRequest.
|
57
66
|
@logger.info('Preparing and executing HttpRequest for create_confirm_replies_as_received.')
|
58
|
-
|
59
|
-
|
60
|
-
headers:
|
61
|
-
parameters:
|
67
|
+
request = @http_client.post(
|
68
|
+
query_url,
|
69
|
+
headers: headers,
|
70
|
+
parameters: json_body
|
62
71
|
)
|
63
|
-
|
64
|
-
|
72
|
+
|
73
|
+
apply_authentication(request, request_url, json_body)
|
74
|
+
|
75
|
+
context = execute_request(request, name: 'create_confirm_replies_as_received')
|
65
76
|
|
66
77
|
# Validate response against endpoint and global error codes.
|
67
78
|
@logger.info("Validating response for create_confirm_replies_as_received.")
|
68
|
-
if
|
79
|
+
if context.response.status_code == 400
|
69
80
|
raise APIException.new(
|
70
81
|
'',
|
71
|
-
|
82
|
+
context
|
72
83
|
)
|
73
84
|
end
|
74
|
-
validate_response(
|
85
|
+
validate_response(context)
|
75
86
|
|
76
87
|
# Return appropriate response type.
|
77
88
|
@logger.info("Returning response for create_confirm_replies_as_received.")
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
decoded
|
89
|
+
return APIHelper.json_deserialize(context.response.raw_body) unless
|
90
|
+
context.response.raw_body.nil? ||
|
91
|
+
context.response.raw_body.to_s.strip.empty?
|
82
92
|
|
83
93
|
rescue Exception => e
|
84
94
|
@logger.error(e)
|
@@ -168,35 +178,42 @@ module MessageMediaMessages
|
|
168
178
|
# *Note: It is recommended to use the Webhooks feature to receive reply
|
169
179
|
# messages rather than polling
|
170
180
|
# the check replies endpoint.*
|
181
|
+
# @param [Object] account_header_value The account id to pass to the API
|
171
182
|
# @return CheckRepliesResponse response from the API call
|
172
|
-
def get_check_replies
|
183
|
+
def get_check_replies(account_header_value=nil)
|
173
184
|
begin
|
174
185
|
@logger.info("get_check_replies called.")
|
186
|
+
|
187
|
+
request_url = '/v1/replies'
|
175
188
|
# Prepare query url.
|
176
189
|
@logger.info("Preparing query URL for get_check_replies.")
|
177
|
-
|
178
|
-
|
179
|
-
|
190
|
+
query_builder = Configuration.base_uri.dup
|
191
|
+
query_builder << request_url
|
192
|
+
query_url = APIHelper.clean_url query_builder
|
180
193
|
|
181
194
|
# Prepare headers.
|
182
195
|
@logger.info("Preparing headers for get_check_replies.")
|
183
|
-
|
196
|
+
headers = {
|
184
197
|
'accept' => 'application/json'
|
185
198
|
}
|
186
|
-
|
199
|
+
|
200
|
+
add_account_header(headers, account_header_value)
|
201
|
+
|
187
202
|
# Prepare and execute HttpRequest.
|
188
203
|
@logger.info('Preparing and executing HttpRequest for get_check_replies.')
|
189
|
-
|
190
|
-
|
191
|
-
headers:
|
204
|
+
request = @http_client.get(
|
205
|
+
query_url,
|
206
|
+
headers: headers
|
192
207
|
)
|
193
|
-
|
194
|
-
|
195
|
-
|
208
|
+
|
209
|
+
apply_authentication(request, request_url)
|
210
|
+
|
211
|
+
context = execute_request(request, name: 'get_check_replies')
|
212
|
+
validate_response(context)
|
196
213
|
|
197
214
|
# Return appropriate response type.
|
198
215
|
@logger.info("Returning response for get_check_replies.")
|
199
|
-
decoded = APIHelper.json_deserialize(
|
216
|
+
decoded = APIHelper.json_deserialize(context.response.raw_body)
|
200
217
|
CheckRepliesResponse.from_hash(decoded)
|
201
218
|
|
202
219
|
rescue Exception => e
|
@@ -7,8 +7,8 @@ module MessageMediaMessages
|
|
7
7
|
attr_reader :context, :response_code
|
8
8
|
|
9
9
|
# The constructor.
|
10
|
-
# @param [String] The reason for raising an exception.
|
11
|
-
# @param [HttpContext] The HttpContext of the API call.
|
10
|
+
# @param [String] reason The reason for raising an exception.
|
11
|
+
# @param [HttpContext] context The HttpContext of the API call.
|
12
12
|
def initialize(reason, context)
|
13
13
|
super(reason)
|
14
14
|
@context = context
|
@@ -9,7 +9,7 @@ module MessageMediaMessages
|
|
9
9
|
# Add basic authentication to the request.
|
10
10
|
# @param [HttpRequest] The HttpRequest object to which authentication will
|
11
11
|
# be added.
|
12
|
-
def self.apply(http_request)
|
12
|
+
def self.apply(http_request, url=nil, body=nil)
|
13
13
|
username = Configuration.basic_auth_user_name
|
14
14
|
password = Configuration.basic_auth_password
|
15
15
|
value = Base64.strict_encode64("#{username}:#{password}")
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# This file was automatically generated for MessageMedia by APIMATIC v2.0
|
2
|
+
# ( https://apimatic.io ).
|
3
|
+
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
module MessageMediaMessages
|
7
|
+
# Utility class for basic authorization.
|
8
|
+
class HmacAuth
|
9
|
+
def self.create_signature(date, content_signature, url, body=nil)
|
10
|
+
request_type = "GET"
|
11
|
+
|
12
|
+
if body != nil
|
13
|
+
request_type = "POST"
|
14
|
+
end
|
15
|
+
|
16
|
+
signing_string = "date: #{date}\n#{content_signature}#{request_type} #{url} HTTP/1.1"
|
17
|
+
hmac = OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new('sha1'), Configuration.hmac_auth_password.encode("ASCII"), signing_string.encode("ASCII"))
|
18
|
+
|
19
|
+
return Base64.encode64(hmac).chomp
|
20
|
+
end
|
21
|
+
|
22
|
+
# Add basic authentication to the request.
|
23
|
+
# @param [HttpRequest] The HttpRequest object to which authentication will
|
24
|
+
# be added.
|
25
|
+
def self.apply(http_request, url=nil, body=nil)
|
26
|
+
username = Configuration.hmac_auth_user_name
|
27
|
+
|
28
|
+
content_signature = ""
|
29
|
+
content_header = ""
|
30
|
+
|
31
|
+
now = DateTime.now.new_offset(0).to_time.strftime("%a, %d %b %Y %H:%M:%S GMT")
|
32
|
+
|
33
|
+
date_header = now
|
34
|
+
|
35
|
+
if body != nil
|
36
|
+
md5 = Digest::MD5.new
|
37
|
+
md5.update(body)
|
38
|
+
|
39
|
+
content_hash = md5.hexdigest
|
40
|
+
content_signature = "x-Content-MD5: #{content_hash}\n"
|
41
|
+
content_header = "x-Content-MD5 "
|
42
|
+
http_request.headers["x-Content-MD5"] = content_hash
|
43
|
+
end
|
44
|
+
|
45
|
+
http_request.headers["date"] = date_header
|
46
|
+
|
47
|
+
hmac_signature = HmacAuth.create_signature(date_header, content_signature, url, body)
|
48
|
+
|
49
|
+
joined = "username=\"#{username}\", algorithm=\"hmac-sha1\", headers=\"date #{content_header}request-line\", signature=\"#{hmac_signature}\""
|
50
|
+
header_value = "hmac #{joined}"
|
51
|
+
http_request.headers["Authorization"] = header_value
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -5,7 +5,7 @@ module MessageMediaMessages
|
|
5
5
|
# HttpCallBack allows defining callables for pre and post API calls.
|
6
6
|
class HttpCallBack
|
7
7
|
# A controller will call this method before making an HTTP Request.
|
8
|
-
# @param [HttpRequest] The HttpRequest object which the HttpClient
|
8
|
+
# @param [HttpRequest] _http_request The HttpRequest object which the HttpClient
|
9
9
|
# will execute.
|
10
10
|
def on_before_request(_http_request)
|
11
11
|
raise NotImplementedError, 'This method needs
|
@@ -13,7 +13,7 @@ module MessageMediaMessages
|
|
13
13
|
end
|
14
14
|
|
15
15
|
# A controller will call this method after making an HTTP Request.
|
16
|
-
# @param [HttpContext] The HttpContext of the API call.
|
16
|
+
# @param [HttpContext] _http_context The HttpContext of the API call.
|
17
17
|
def on_after_response(_http_context)
|
18
18
|
raise NotImplementedError, 'This method needs
|
19
19
|
to be implemented in a child class.'
|
@@ -8,29 +8,29 @@ module MessageMediaMessages
|
|
8
8
|
# for HTTP Client classes.
|
9
9
|
class HttpClient
|
10
10
|
# Execute an HttpRequest when the response is expected to be a string.
|
11
|
-
# @param [HttpRequest] The HttpRequest to be executed.
|
11
|
+
# @param [HttpRequest] _http_request The HttpRequest to be executed.
|
12
12
|
def execute_as_string(_http_request)
|
13
13
|
raise NotImplementedError, 'This method needs
|
14
14
|
to be implemented in a child class.'
|
15
15
|
end
|
16
16
|
|
17
17
|
# Execute an HttpRequest when the response is expected to be binary.
|
18
|
-
# @param [HttpRequest] The HttpRequest to be executed.
|
18
|
+
# @param [HttpRequest] _http_request The HttpRequest to be executed.
|
19
19
|
def execute_as_binary(_http_request)
|
20
20
|
raise NotImplementedError, 'This method needs
|
21
21
|
to be implemented in a child class.'
|
22
22
|
end
|
23
23
|
|
24
24
|
# Converts the HTTP Response from the client to an HttpResponse object.
|
25
|
-
# @param [Dynamic] The response object received from the client.
|
25
|
+
# @param [Dynamic] _response The response object received from the client.
|
26
26
|
def convert_response(_response)
|
27
27
|
raise NotImplementedError, 'This method needs
|
28
28
|
to be implemented in a child class.'
|
29
29
|
end
|
30
30
|
|
31
31
|
# Get a GET HttpRequest object.
|
32
|
-
# @param [String] The URL to send the request to.
|
33
|
-
# @param [Hash, Optional] The headers for the HTTP Request.
|
32
|
+
# @param [String] query_url The URL to send the request to.
|
33
|
+
# @param [Hash, Optional] headers The headers for the HTTP Request.
|
34
34
|
def get(query_url,
|
35
35
|
headers: {})
|
36
36
|
HttpRequest.new(HttpMethodEnum::GET,
|
@@ -39,9 +39,9 @@ module MessageMediaMessages
|
|
39
39
|
end
|
40
40
|
|
41
41
|
# Get a POST HttpRequest object.
|
42
|
-
# @param [String] The URL to send the request to.
|
43
|
-
# @param [Hash, Optional] The headers for the HTTP Request.
|
44
|
-
# @param [Hash, Optional] The parameters for the HTTP Request.
|
42
|
+
# @param [String] query_url The URL to send the request to.
|
43
|
+
# @param [Hash, Optional] headers The headers for the HTTP Request.
|
44
|
+
# @param [Hash, Optional] parameters The parameters for the HTTP Request.
|
45
45
|
def post(query_url,
|
46
46
|
headers: {},
|
47
47
|
parameters: {})
|
@@ -52,9 +52,9 @@ module MessageMediaMessages
|
|
52
52
|
end
|
53
53
|
|
54
54
|
# Get a PUT HttpRequest object.
|
55
|
-
# @param [String] The URL to send the request to.
|
56
|
-
# @param [Hash, Optional] The headers for the HTTP Request.
|
57
|
-
# @param [Hash, Optional] The parameters for the HTTP Request.
|
55
|
+
# @param [String] query_url The URL to send the request to.
|
56
|
+
# @param [Hash, Optional] headers The headers for the HTTP Request.
|
57
|
+
# @param [Hash, Optional] parameters The parameters for the HTTP Request.
|
58
58
|
def put(query_url,
|
59
59
|
headers: {},
|
60
60
|
parameters: {})
|
@@ -65,9 +65,9 @@ module MessageMediaMessages
|
|
65
65
|
end
|
66
66
|
|
67
67
|
# Get a PATCH HttpRequest object.
|
68
|
-
# @param [String] The URL to send the request to.
|
69
|
-
# @param [Hash, Optional] The headers for the HTTP Request.
|
70
|
-
# @param [Hash, Optional] The parameters for the HTTP Request.
|
68
|
+
# @param [String] query_url The URL to send the request to.
|
69
|
+
# @param [Hash, Optional] headers The headers for the HTTP Request.
|
70
|
+
# @param [Hash, Optional] parameters The parameters for the HTTP Request.
|
71
71
|
def patch(query_url,
|
72
72
|
headers: {},
|
73
73
|
parameters: {})
|
@@ -78,8 +78,9 @@ module MessageMediaMessages
|
|
78
78
|
end
|
79
79
|
|
80
80
|
# Get a DELETE HttpRequest object.
|
81
|
-
# @param [String] The URL to send the request to.
|
82
|
-
# @param [Hash, Optional] The headers for the HTTP Request.
|
81
|
+
# @param [String] query_url The URL to send the request to.
|
82
|
+
# @param [Hash, Optional] headers The headers for the HTTP Request.
|
83
|
+
# @param [Hash, Optional] parameters The parameters for the HTTP Request.
|
83
84
|
def delete(query_url,
|
84
85
|
headers: {},
|
85
86
|
parameters: {})
|
@@ -7,8 +7,8 @@ module MessageMediaMessages
|
|
7
7
|
attr_accessor :request, :response
|
8
8
|
|
9
9
|
# The constructor.
|
10
|
-
# @param [HttpRequest] An HttpRequest object representing the HTTP request.
|
11
|
-
# @param [HttpResponse] An HttpResponse object representing the HTTP
|
10
|
+
# @param [HttpRequest] request An HttpRequest object representing the HTTP request.
|
11
|
+
# @param [HttpResponse] response An HttpResponse object representing the HTTP
|
12
12
|
# response.
|
13
13
|
def initialize(request, response)
|
14
14
|
@request = request
|
@@ -8,10 +8,10 @@ module MessageMediaMessages
|
|
8
8
|
:parameters, :username, :password
|
9
9
|
|
10
10
|
# The constructor.
|
11
|
-
# @param [HttpMethodEnum] The HTTP method.
|
12
|
-
# @param [String] The URL to send the request to.
|
13
|
-
# @param [Hash, Optional] The headers for the HTTP Request.
|
14
|
-
# @param [Hash, Optional] The parameters for the HTTP Request.
|
11
|
+
# @param [HttpMethodEnum] http_method The HTTP method.
|
12
|
+
# @param [String] query_url The URL to send the request to.
|
13
|
+
# @param [Hash, Optional] headers The headers for the HTTP Request.
|
14
|
+
# @param [Hash, Optional] parameters The parameters for the HTTP Request.
|
15
15
|
def initialize(http_method,
|
16
16
|
query_url,
|
17
17
|
headers: {},
|
@@ -23,22 +23,22 @@ module MessageMediaMessages
|
|
23
23
|
end
|
24
24
|
|
25
25
|
# Add a header to the HttpRequest.
|
26
|
-
# @param [String] The name of the header.
|
27
|
-
# @param [String] The value of the header.
|
26
|
+
# @param [String] name The name of the header.
|
27
|
+
# @param [String] value The value of the header.
|
28
28
|
def add_header(name, value)
|
29
29
|
@headers[name] = value
|
30
30
|
end
|
31
31
|
|
32
32
|
# Add a parameter to the HttpRequest.
|
33
|
-
# @param [String] The name of the parameter.
|
34
|
-
# @param [String] The value of the parameter.
|
33
|
+
# @param [String] name The name of the parameter.
|
34
|
+
# @param [String] value The value of the parameter.
|
35
35
|
def add_parameter(name, value)
|
36
36
|
@parameters[name] = value
|
37
37
|
end
|
38
38
|
|
39
39
|
# Add a query parameter to the HttpRequest.
|
40
|
-
# @param [String] The name of the query parameter.
|
41
|
-
# @param [String] The value of the query parameter.
|
40
|
+
# @param [String] name The name of the query parameter.
|
41
|
+
# @param [String] value The value of the query parameter.
|
42
42
|
def add_query_parameter(name, value)
|
43
43
|
@query_url = APIHelper.append_url_with_query_parameters(@query_url,
|
44
44
|
name => value)
|
@@ -7,9 +7,9 @@ module MessageMediaMessages
|
|
7
7
|
attr_accessor :status_code, :headers, :raw_body
|
8
8
|
|
9
9
|
# The constructor
|
10
|
-
# @param [Integer] The status code returned by the server.
|
11
|
-
# @param [Hash] The headers sent by the server in the response.
|
12
|
-
# @param [String] The raw body of the response.
|
10
|
+
# @param [Integer] status_code The status code returned by the server.
|
11
|
+
# @param [Hash] headers The headers sent by the server in the response.
|
12
|
+
# @param [String] raw_body The raw body of the response.
|
13
13
|
def initialize(status_code,
|
14
14
|
headers,
|
15
15
|
raw_body)
|
@@ -29,11 +29,14 @@ module MessageMediaMessages
|
|
29
29
|
end
|
30
30
|
|
31
31
|
# Initializer with authentication and configuration parameters.
|
32
|
-
def initialize(
|
33
|
-
|
34
|
-
basic_auth_user_name
|
35
|
-
|
36
|
-
|
32
|
+
def initialize(auth_user_name: nil, auth_password: nil, use_hmac: false)
|
33
|
+
if (use_hmac == false)
|
34
|
+
Configuration.basic_auth_user_name = auth_user_name
|
35
|
+
Configuration.basic_auth_password = auth_password
|
36
|
+
else
|
37
|
+
Configuration.hmac_auth_user_name = auth_user_name
|
38
|
+
Configuration.hmac_auth_password = auth_password
|
39
|
+
end
|
37
40
|
end
|
38
41
|
end
|
39
42
|
end
|
@@ -3,9 +3,11 @@
|
|
3
3
|
require 'json'
|
4
4
|
require 'test/unit'
|
5
5
|
require 'message_media_messages.rb'
|
6
|
+
require 'message_media_messages/configuration.rb'
|
6
7
|
require_relative '../test_helper.rb'
|
7
8
|
require_relative '../http_response_catcher.rb'
|
8
9
|
|
10
|
+
# noinspection RubyClassVariableUsageInspection
|
9
11
|
class ControllerTestBase < Test::Unit::TestCase
|
10
12
|
include MessageMediaMessages
|
11
13
|
|
@@ -19,7 +21,8 @@ class ControllerTestBase < Test::Unit::TestCase
|
|
19
21
|
@@request_timeout = 30
|
20
22
|
@@assert_precision = 0.01
|
21
23
|
|
22
|
-
|
24
|
+
Configuration.basic_auth_user_name = ENV['MessageMediaApiTestsKey']
|
25
|
+
Configuration.basic_auth_password = ENV['MessageMediaApiTestsSecret']
|
23
26
|
end
|
24
27
|
|
25
28
|
# Called once before every test case.
|
@@ -1,131 +1,164 @@
|
|
1
|
-
# This file was automatically generated for MessageMedia by APIMATIC v2.0 ( https://apimatic.io ).
|
2
|
-
|
3
|
-
require_relative 'controller_test_base'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
1
|
+
# This file was automatically generated for MessageMedia by APIMATIC v2.0 ( https://apimatic.io ).
|
2
|
+
|
3
|
+
require_relative 'controller_test_base'
|
4
|
+
|
5
|
+
# noinspection RubyClassVariableUsageInspection,RubyInstanceMethodNamingConvention
|
6
|
+
class DeliveryReportsControllerTests < ControllerTestBase
|
7
|
+
# Called only once for the class before any test has executed
|
8
|
+
def self.startup
|
9
|
+
self.controller = @@api_client.delivery_reports
|
10
|
+
end
|
11
|
+
|
11
12
|
# Check for any delivery reports that have been received.
|
12
|
-
#Delivery reports are a notification of the change in status of a message as it is being processed.
|
13
|
-
#Each request to the check delivery reports endpoint will return any delivery reports received that
|
14
|
-
#have not yet been confirmed using the confirm delivery reports endpoint. A response from the check
|
15
|
-
#delivery reports endpoint will have the following structure:
|
16
|
-
|
17
|
-
#{
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
58
|
-
#}
|
59
|
-
|
60
|
-
#Each delivery report will contain details about the message, including any metadata specified
|
61
|
-
#and the new status of the message (as each delivery report indicates a change in status of a
|
62
|
-
#message) and the timestamp at which the status changed. Every delivery report will have a
|
63
|
-
#unique delivery report ID for use with the confirm delivery reports endpoint.
|
64
|
-
|
65
|
-
#those specified in the message that the delivery report relates to. The source number of the
|
66
|
-
#delivery report is the destination number of the original message.*
|
67
|
-
#Subsequent requests to the check delivery reports endpoint will return the same delivery reports
|
68
|
-
#and a maximum of 100 delivery reports will be returned in each request. Applications should use the
|
69
|
-
#confirm delivery reports endpoint in the following pattern so that delivery reports that have been
|
70
|
-
#processed are no longer returned in subsequent check delivery reports requests.
|
71
|
-
#1. Call check delivery reports endpoint
|
72
|
-
#2. Process each delivery report
|
73
|
-
#3. Confirm all processed delivery reports using the confirm delivery reports endpoint
|
74
|
-
|
75
|
-
#polling the check delivery reports endpoint.*
|
76
|
-
def test_check_delivery_reports_1
|
77
|
-
|
78
|
-
# Perform the API call through the SDK function
|
79
|
-
result = self.class.controller.get_check_delivery_reports
|
80
|
-
|
81
|
-
# Test response code
|
82
|
-
assert_equal(@response_catcher.response.status_code, 200)
|
83
|
-
|
84
|
-
# Test headers
|
85
|
-
expected_headers = {}
|
86
|
-
expected_headers['content-type'] = nil
|
87
|
-
|
88
|
-
assert(TestHelper.match_headers(expected_headers, @response_catcher.response.headers))
|
89
|
-
|
90
|
-
# Test whether the captured response is as we expected
|
91
|
-
assert_not_nil(result)
|
92
|
-
|
93
|
-
end
|
94
|
-
|
13
|
+
# Delivery reports are a notification of the change in status of a message as it is being processed.
|
14
|
+
# Each request to the check delivery reports endpoint will return any delivery reports received that
|
15
|
+
# have not yet been confirmed using the confirm delivery reports endpoint. A response from the check
|
16
|
+
# delivery reports endpoint will have the following structure:
|
17
|
+
# ```json
|
18
|
+
# {
|
19
|
+
# "delivery_reports": [
|
20
|
+
# {
|
21
|
+
# "callback_url": "https://my.callback.url.com",
|
22
|
+
# "delivery_report_id": "01e1fa0a-6e27-4945-9cdb-18644b4de043",
|
23
|
+
# "source_number": "+61491570157",
|
24
|
+
# "date_received": "2017-05-20T06:30:37.642Z",
|
25
|
+
# "status": "enroute",
|
26
|
+
# "delay": 0,
|
27
|
+
# "submitted_date": "2017-05-20T06:30:37.639Z",
|
28
|
+
# "original_text": "My first message!",
|
29
|
+
# "message_id": "d781dcab-d9d8-4fb2-9e03-872f07ae94ba",
|
30
|
+
# "vendor_account_id": {
|
31
|
+
# "vendor_id": "MessageMedia",
|
32
|
+
# "account_id": "MyAccount"
|
33
|
+
# },
|
34
|
+
# "metadata": {
|
35
|
+
# "key1": "value1",
|
36
|
+
# "key2": "value2"
|
37
|
+
# }
|
38
|
+
# },
|
39
|
+
# {
|
40
|
+
# "callback_url": "https://my.callback.url.com",
|
41
|
+
# "delivery_report_id": "0edf9022-7ccc-43e6-acab-480e93e98c1b",
|
42
|
+
# "source_number": "+61491570158",
|
43
|
+
# "date_received": "2017-05-21T01:46:42.579Z",
|
44
|
+
# "status": "enroute",
|
45
|
+
# "delay": 0,
|
46
|
+
# "submitted_date": "2017-05-21T01:46:42.574Z",
|
47
|
+
# "original_text": "My second message!",
|
48
|
+
# "message_id": "fbb3b3f5-b702-4d8b-ab44-65b2ee39a281",
|
49
|
+
# "vendor_account_id": {
|
50
|
+
# "vendor_id": "MessageMedia",
|
51
|
+
# "account_id": "MyAccount"
|
52
|
+
# },
|
53
|
+
# "metadata": {
|
54
|
+
# "key1": "value1",
|
55
|
+
# "key2": "value2"
|
56
|
+
# }
|
57
|
+
# }
|
58
|
+
# ]
|
59
|
+
# }
|
60
|
+
# ```
|
61
|
+
# Each delivery report will contain details about the message, including any metadata specified
|
62
|
+
# and the new status of the message (as each delivery report indicates a change in status of a
|
63
|
+
# message) and the timestamp at which the status changed. Every delivery report will have a
|
64
|
+
# unique delivery report ID for use with the confirm delivery reports endpoint.
|
65
|
+
# *Note: The source number and destination number properties in a delivery report are the inverse of
|
66
|
+
# those specified in the message that the delivery report relates to. The source number of the
|
67
|
+
# delivery report is the destination number of the original message.*
|
68
|
+
# Subsequent requests to the check delivery reports endpoint will return the same delivery reports
|
69
|
+
# and a maximum of 100 delivery reports will be returned in each request. Applications should use the
|
70
|
+
# confirm delivery reports endpoint in the following pattern so that delivery reports that have been
|
71
|
+
# processed are no longer returned in subsequent check delivery reports requests.
|
72
|
+
# 1. Call check delivery reports endpoint
|
73
|
+
# 2. Process each delivery report
|
74
|
+
# 3. Confirm all processed delivery reports using the confirm delivery reports endpoint
|
75
|
+
# *Note: It is recommended to use the Webhooks feature to receive reply messages rather than
|
76
|
+
# polling the check delivery reports endpoint.*
|
77
|
+
def test_check_delivery_reports_1
|
78
|
+
|
79
|
+
# Perform the API call through the SDK function
|
80
|
+
result = self.class.controller.get_check_delivery_reports
|
81
|
+
|
82
|
+
# Test response code
|
83
|
+
assert_equal(@response_catcher.response.status_code, 200)
|
84
|
+
|
85
|
+
# Test headers
|
86
|
+
expected_headers = {}
|
87
|
+
expected_headers['content-type'] = nil
|
88
|
+
|
89
|
+
assert(TestHelper.match_headers(expected_headers, @response_catcher.response.headers))
|
90
|
+
|
91
|
+
# Test whether the captured response is as we expected
|
92
|
+
assert_not_nil(result)
|
93
|
+
assert_true(@response_catcher.response.raw_body.index('{"delivery_reports":[') >= 0, "Must get our delivery reports")
|
94
|
+
end
|
95
|
+
|
96
|
+
# Make sure our SDK fails when passed an invalid account id
|
97
|
+
def test_check_delivery_reports_with_invalid_account
|
98
|
+
begin
|
99
|
+
# Perform the API call through the SDK function
|
100
|
+
self.class.controller.get_check_delivery_reports('INVALID ACCOUNT')
|
101
|
+
rescue APIException => api_exception
|
102
|
+
assert_equal('HTTP Response Not OK. {"message":"Invalid account \'INVALID ACCOUNT\' in header Account"}' + "\n",
|
103
|
+
api_exception.message,'Make sure we''ve got our error message')
|
104
|
+
# Test response code
|
105
|
+
assert_equal(@response_catcher.response.status_code, 403)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
95
109
|
# Mark a delivery report as confirmed so it is no longer return in check delivery reports requests.
|
96
|
-
#The confirm delivery reports endpoint is intended to be used in conjunction with the check delivery
|
97
|
-
#reports endpoint to allow for robust processing of delivery reports. Once one or more delivery
|
98
|
-
#reports have been processed, they can then be confirmed using the confirm delivery reports endpoint so they
|
99
|
-
#are no longer returned in subsequent check delivery reports requests.
|
100
|
-
#The confirm delivery reports endpoint takes a list of delivery report IDs as follows:
|
101
|
-
|
102
|
-
#{
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#}
|
109
|
-
|
110
|
-
#Up to 100 delivery reports can be confirmed in a single confirm delivery reports request.
|
111
|
-
def test_confirm_delivery_reports_as_received_1
|
112
|
-
# Parameters for the API call
|
113
|
-
body = ConfirmDeliveryReportsAsReceivedRequest.from_hash(JSON.parse(
|
114
|
-
'{"delivery_report_ids":["011dcead-6988-4ad6-a1c7-6b6c68ea628d","3487b3fa-65'\
|
115
|
-
'86-4979-a233-2d1b095c7718","ba28e94b-c83d-4759-98e7-ff9c7edb87a1"]}'
|
116
|
-
))
|
117
|
-
|
118
|
-
# Perform the API call through the SDK function
|
119
|
-
|
120
|
-
|
121
|
-
# Test response code
|
122
|
-
assert_equal(@response_catcher.response.status_code, 202)
|
123
|
-
|
124
|
-
# Test headers
|
125
|
-
expected_headers = {}
|
126
|
-
expected_headers['content-type'] = nil
|
127
|
-
|
128
|
-
assert(TestHelper.match_headers(expected_headers, @response_catcher.response.headers))
|
129
|
-
end
|
130
|
-
|
131
|
-
|
110
|
+
# The confirm delivery reports endpoint is intended to be used in conjunction with the check delivery
|
111
|
+
# reports endpoint to allow for robust processing of delivery reports. Once one or more delivery
|
112
|
+
# reports have been processed, they can then be confirmed using the confirm delivery reports endpoint so they
|
113
|
+
# are no longer returned in subsequent check delivery reports requests.
|
114
|
+
# The confirm delivery reports endpoint takes a list of delivery report IDs as follows:
|
115
|
+
# ```json
|
116
|
+
# {
|
117
|
+
# "delivery_report_ids": [
|
118
|
+
# "011dcead-6988-4ad6-a1c7-6b6c68ea628d",
|
119
|
+
# "3487b3fa-6586-4979-a233-2d1b095c7718",
|
120
|
+
# "ba28e94b-c83d-4759-98e7-ff9c7edb87a1"
|
121
|
+
# ]
|
122
|
+
# }
|
123
|
+
# ```
|
124
|
+
# Up to 100 delivery reports can be confirmed in a single confirm delivery reports request.
|
125
|
+
def test_confirm_delivery_reports_as_received_1
|
126
|
+
# Parameters for the API call
|
127
|
+
body = ConfirmDeliveryReportsAsReceivedRequest.from_hash(JSON.parse(
|
128
|
+
'{"delivery_report_ids":["011dcead-6988-4ad6-a1c7-6b6c68ea628d","3487b3fa-65'\
|
129
|
+
'86-4979-a233-2d1b095c7718","ba28e94b-c83d-4759-98e7-ff9c7edb87a1"]}'
|
130
|
+
))
|
131
|
+
|
132
|
+
# Perform the API call through the SDK function
|
133
|
+
self.class.controller.create_confirm_delivery_reports_as_received(body)
|
134
|
+
|
135
|
+
# Test response code
|
136
|
+
assert_equal(@response_catcher.response.status_code, 202)
|
137
|
+
|
138
|
+
# Test headers
|
139
|
+
expected_headers = {}
|
140
|
+
expected_headers['content-type'] = nil
|
141
|
+
|
142
|
+
assert(TestHelper.match_headers(expected_headers, @response_catcher.response.headers))
|
143
|
+
end
|
144
|
+
|
145
|
+
# Make sure our SDK fails when passed an invalid account id
|
146
|
+
def test_confirm_delivery_reports_as_received_with_invalid_account
|
147
|
+
begin
|
148
|
+
# Perform the API call through the SDK function
|
149
|
+
body = ConfirmDeliveryReportsAsReceivedRequest.from_hash(JSON.parse(
|
150
|
+
'{"delivery_report_ids":["011dcead-6988-4ad6-a1c7-6b6c68ea628d","3487b3fa-65'\
|
151
|
+
'86-4979-a233-2d1b095c7718","ba28e94b-c83d-4759-98e7-ff9c7edb87a1"]}'
|
152
|
+
))
|
153
|
+
|
154
|
+
# Perform the API call through the SDK function
|
155
|
+
self.class.controller.create_confirm_delivery_reports_as_received(body, 'INVALID ACCOUNT')
|
156
|
+
rescue APIException => api_exception
|
157
|
+
assert_equal('HTTP Response Not OK. {"message":"Invalid account \'INVALID ACCOUNT\' in header Account"}' + "\n",
|
158
|
+
api_exception.message,'Make sure we''ve got our error message')
|
159
|
+
# Test response code
|
160
|
+
assert_equal(@response_catcher.response.status_code, 403)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|