bobes-textmagic 0.2.3 → 0.3.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/README.rdoc +61 -48
- data/Rakefile +32 -0
- data/VERSION.yml +2 -2
- data/lib/api.rb +114 -100
- data/lib/error.rb +2 -2
- data/lib/response.rb +47 -124
- data/test/test_api.rb +54 -98
- data/test/test_response.rb +141 -93
- data/textmagic.gemspec +4 -5
- metadata +4 -4
data/lib/error.rb
CHANGED
@@ -6,8 +6,8 @@ module TextMagic
|
|
6
6
|
|
7
7
|
attr_reader :code, :message
|
8
8
|
|
9
|
-
# Creates an instance of TextMagic::API::Error. Error code and message
|
10
|
-
# can be supplied as arguments or
|
9
|
+
# Creates an instance of TextMagic::API::Error. Error code and error message
|
10
|
+
# can be supplied as arguments or in a hash.
|
11
11
|
#
|
12
12
|
# TextMagic::API::Error.new(code, message)
|
13
13
|
# TextMagic::API::Error.new('error_code' => code, 'error_message' => message)
|
data/lib/response.rb
CHANGED
@@ -1,141 +1,64 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
1
3
|
module TextMagic
|
2
4
|
|
3
5
|
class API
|
4
6
|
|
5
|
-
|
6
|
-
#
|
7
|
-
# === Account response hash
|
8
|
-
#
|
9
|
-
# When extended, it
|
10
|
-
# * converts the +balance+ value to +float+ and
|
11
|
-
# * adds a reader method +balance+.
|
12
|
-
#
|
13
|
-
# === Send response hash
|
14
|
-
#
|
15
|
-
# When extended, it
|
16
|
-
# * inverts the +message_id+ hash and puts it in +message_id_hash+,
|
17
|
-
# * adds an array of ids to +message_ids+,
|
18
|
-
# * adds reader methods +message_id_hash+, +message_ids+, +sent_text+ and
|
19
|
-
# +parts_count+ to the hash.
|
20
|
-
# * adds a reader method +message_id+, which returns a +message_id+ for
|
21
|
-
# a given phone number, or the first message_id if no phone number
|
22
|
-
# is specified.
|
23
|
-
#
|
24
|
-
# === Message status response hash
|
25
|
-
#
|
26
|
-
# When extended, it
|
27
|
-
# * converts the +credits_cost+ value to +float+,
|
28
|
-
# * converts the +created_time+ and +completed_time+ values to +Time+,
|
29
|
-
# * adds reader methods +text+, +status+, +reply_number+, +credits_cost+,
|
30
|
-
# +created_time+ and +completed_time+ to all values of the hash.
|
31
|
-
#
|
32
|
-
# === Receive status response hash
|
33
|
-
#
|
34
|
-
# When extended, it
|
35
|
-
# * converts the +timestamp+ value to +Time+,
|
36
|
-
# * adds reader methods +messages+ and +unread+ to the hash
|
37
|
-
# * adds reader methods +message_id+, +timestamp+, +text+ and +from+
|
38
|
-
# to all members of the +messages+ array.
|
39
|
-
#
|
40
|
-
# === Delete reply response hash
|
41
|
-
#
|
42
|
-
# When extended, it
|
43
|
-
# * adds a reader method +deleted+.
|
44
|
-
module Response
|
45
|
-
|
46
|
-
module Account #:nodoc: all
|
47
|
-
|
48
|
-
def self.extended(base)
|
49
|
-
return unless base.is_a?(Hash)
|
50
|
-
base['balance'] = base['balance'].to_f if base['balance']
|
51
|
-
end
|
52
|
-
|
53
|
-
def balance
|
54
|
-
self['balance']
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
module Send #:nodoc: all
|
59
|
-
|
60
|
-
def self.extended(base)
|
61
|
-
return unless base.is_a?(Hash) && base['message_id']
|
62
|
-
base['message_ids'] = base['message_id'].keys.sort
|
63
|
-
base.merge! base.delete('message_id').invert
|
64
|
-
end
|
65
|
-
|
66
|
-
%w(message_ids sent_text parts_count).each do |method|
|
67
|
-
module_eval <<-EOS
|
68
|
-
def #{method}
|
69
|
-
self['#{method}']
|
70
|
-
end
|
71
|
-
EOS
|
72
|
-
end
|
7
|
+
class Response
|
73
8
|
|
74
|
-
|
75
|
-
|
76
|
-
|
9
|
+
def self.account(hash)
|
10
|
+
response = OpenStruct.new(hash)
|
11
|
+
response.balance = response.balance.to_f
|
12
|
+
response
|
77
13
|
end
|
78
14
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
status['created_time'] = Time.at(status['created_time'].to_i) if status['created_time']
|
86
|
-
status['completed_time'] = Time.at(status['completed_time'].to_i) if status['completed_time']
|
87
|
-
status.extend Status
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
module Status
|
92
|
-
|
93
|
-
%w(text status reply_number credits_cost created_time completed_time).each do |method|
|
94
|
-
module_eval <<-EOS
|
95
|
-
def #{method}
|
96
|
-
self['#{method}']
|
97
|
-
end
|
98
|
-
EOS
|
99
|
-
end
|
15
|
+
def self.send(hash, single)
|
16
|
+
response = nil
|
17
|
+
if single
|
18
|
+
response = hash['message_id'].keys.first.dup
|
19
|
+
else
|
20
|
+
response = hash['message_id'].invert
|
100
21
|
end
|
22
|
+
metaclass = class << response; self; end
|
23
|
+
metaclass.send :attr_accessor, :sent_text, :parts_count, :message_id
|
24
|
+
response.sent_text = hash['sent_text']
|
25
|
+
response.parts_count = hash['parts_count']
|
26
|
+
response.message_id = hash['message_id']
|
27
|
+
response
|
101
28
|
end
|
102
29
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
def #{method}
|
117
|
-
self['#{method}']
|
118
|
-
end
|
119
|
-
EOS
|
120
|
-
end
|
121
|
-
|
122
|
-
module Message
|
123
|
-
|
124
|
-
%w(message_id timestamp text from).each do |method|
|
125
|
-
module_eval <<-EOS
|
126
|
-
def #{method}
|
127
|
-
self['#{method}']
|
128
|
-
end
|
129
|
-
EOS
|
130
|
-
end
|
30
|
+
def self.message_status(hash, single)
|
31
|
+
response = {}
|
32
|
+
hash.each do |message_id, message_hash|
|
33
|
+
status = message_hash['status'].dup
|
34
|
+
metaclass = class << status; self; end
|
35
|
+
metaclass.send :attr_accessor, :text, :credits_cost, :reply_number, :message_status, :created_time, :completed_time
|
36
|
+
status.text = message_hash['text']
|
37
|
+
status.credits_cost = message_hash['credits_cost']
|
38
|
+
status.reply_number = message_hash['reply_number']
|
39
|
+
status.message_status = message_hash['message_status']
|
40
|
+
status.created_time = Time.at(message_hash['created_time'].to_i) if message_hash['created_time']
|
41
|
+
status.completed_time = Time.at(message_hash['completed_time'].to_i) if message_hash['completed_time']
|
42
|
+
response[message_id] = status
|
131
43
|
end
|
44
|
+
single ? response.values.first : response
|
132
45
|
end
|
133
46
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
self
|
47
|
+
def self.receive(hash)
|
48
|
+
response = hash['messages'].collect do |message_hash|
|
49
|
+
message = "#{message_hash['from']}: #{message_hash['text']}"
|
50
|
+
metaclass = class << message; self; end
|
51
|
+
metaclass.send :attr_accessor, :timestamp, :message_id, :text, :from
|
52
|
+
message.text = message_hash['text']
|
53
|
+
message.from = message_hash['from']
|
54
|
+
message.message_id = message_hash['message_id']
|
55
|
+
message.timestamp = Time.at(message_hash['timestamp'].to_i)
|
56
|
+
message
|
138
57
|
end
|
58
|
+
metaclass = class << response; self; end
|
59
|
+
metaclass.send :attr_accessor, :unread
|
60
|
+
response.unread = hash['unread']
|
61
|
+
response
|
139
62
|
end
|
140
63
|
end
|
141
64
|
end
|
data/test/test_api.rb
CHANGED
@@ -13,27 +13,23 @@ class APITest < Test::Unit::TestCase
|
|
13
13
|
context 'Account command' do
|
14
14
|
|
15
15
|
setup do
|
16
|
-
@balance = 0.01 * rand(1e4)
|
17
16
|
@username, @password = random_string, random_string
|
18
17
|
@api = TextMagic::API.new(@username, @password)
|
18
|
+
@response = random_string
|
19
|
+
@processed_response = random_string
|
20
|
+
TextMagic::API::Executor.stubs(:execute).returns(@response)
|
21
|
+
TextMagic::API::Response.stubs(:account).returns(@processed_response)
|
19
22
|
end
|
20
23
|
|
21
24
|
should 'call Executor execute with correct arguments' do
|
22
|
-
TextMagic::API::Executor.expects(:execute).with('account', @username, @password).returns(
|
25
|
+
TextMagic::API::Executor.expects(:execute).with('account', @username, @password).returns(@response)
|
23
26
|
@api.account
|
24
27
|
end
|
25
28
|
|
26
|
-
should '
|
27
|
-
|
28
|
-
response
|
29
|
-
|
30
|
-
response.is_a?(TextMagic::API::Response::Account).should == true
|
31
|
-
end
|
32
|
-
|
33
|
-
should 'return a hash with balance value' do
|
34
|
-
TextMagic::API::Executor.expects(:execute).returns({ 'balance' => @balance.to_s })
|
35
|
-
response = @api.account
|
36
|
-
response['balance'].should be_close(@balance, 1e-10)
|
29
|
+
should 'call Response.account method to process the response hash' do
|
30
|
+
processed_response = rand
|
31
|
+
TextMagic::API::Response.expects(:account).with(@response).returns(processed_response)
|
32
|
+
@api.account.should == processed_response
|
37
33
|
end
|
38
34
|
end
|
39
35
|
|
@@ -43,33 +39,36 @@ class APITest < Test::Unit::TestCase
|
|
43
39
|
@username, @password = random_string, random_string
|
44
40
|
@text, @phone = random_string, random_phone
|
45
41
|
@api = TextMagic::API.new(@username, @password)
|
46
|
-
|
42
|
+
@response = random_string
|
43
|
+
@processed_response = random_string
|
44
|
+
TextMagic::API::Executor.stubs(:execute).returns(@response)
|
45
|
+
TextMagic::API::Response.stubs(:send).returns(@processed_response)
|
47
46
|
end
|
48
47
|
|
49
48
|
should 'call Executor execute with correct arguments' do
|
50
|
-
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => @phone, :unicode => 0)
|
49
|
+
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => @phone, :unicode => 0).returns(@response)
|
51
50
|
@api.send(@text, @phone)
|
52
51
|
end
|
53
52
|
|
54
53
|
should 'join multiple phone numbers supplied as an array' do
|
55
54
|
phones = Array.new(3) { random_phone }
|
56
|
-
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => phones.join(','), :unicode => 0)
|
55
|
+
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => phones.join(','), :unicode => 0).returns(@response)
|
57
56
|
@api.send(@text, phones)
|
58
57
|
end
|
59
58
|
|
60
59
|
should 'join multiple phone numbers supplied as arguments' do
|
61
60
|
phones = Array.new(3) { random_phone }
|
62
|
-
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => phones.join(','), :unicode => 0)
|
61
|
+
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => phones.join(','), :unicode => 0).returns(@response)
|
63
62
|
@api.send(@text, *phones)
|
64
63
|
end
|
65
64
|
|
66
65
|
should 'replace true with 1 for unicode' do
|
67
|
-
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => @phone, :unicode => 1)
|
66
|
+
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => @phone, :unicode => 1).returns(@response)
|
68
67
|
@api.send(@text, @phone, :unicode => true)
|
69
68
|
end
|
70
69
|
|
71
70
|
should 'set unicode value to 0 if it is not set to by user and text contains only characters from GSM 03.38 charset' do
|
72
|
-
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => @phone, :unicode => 0).times(2)
|
71
|
+
TextMagic::API::Executor.expects(:execute).with('send', @username, @password, :text => @text, :phone => @phone, :unicode => 0).returns(@response).times(2)
|
73
72
|
@api.send(@text, @phone)
|
74
73
|
@api.send(@text, @phone, :unicode => false)
|
75
74
|
end
|
@@ -103,21 +102,17 @@ class APITest < Test::Unit::TestCase
|
|
103
102
|
lambda { @api.send(@text, @phone) }.should raise_error(TextMagic::API::Error)
|
104
103
|
end
|
105
104
|
|
106
|
-
should '
|
107
|
-
|
108
|
-
TextMagic::API::
|
109
|
-
|
110
|
-
response.class.should == Hash
|
111
|
-
response.is_a?(TextMagic::API::Response::Send).should == true
|
105
|
+
should 'call Response.send method to process the response hash (single phone)' do
|
106
|
+
processed_response = rand
|
107
|
+
TextMagic::API::Response.expects(:send).with(@response, true).returns(processed_response)
|
108
|
+
@api.send(@text, random_phone).should == processed_response
|
112
109
|
end
|
113
110
|
|
114
|
-
should '
|
115
|
-
|
116
|
-
TextMagic::API::
|
117
|
-
|
118
|
-
|
119
|
-
response['sent_text'].should == @text
|
120
|
-
response['parts_count'].should == 1
|
111
|
+
should 'call Response.send method to process the response hash (multiple phones)' do
|
112
|
+
processed_response = rand
|
113
|
+
TextMagic::API::Response.expects(:send).with(@response, false).returns(processed_response).twice
|
114
|
+
@api.send(@text, [random_phone]).should == processed_response
|
115
|
+
@api.send(@text, random_phone, random_phone).should == processed_response
|
121
116
|
end
|
122
117
|
end
|
123
118
|
|
@@ -126,15 +121,16 @@ class APITest < Test::Unit::TestCase
|
|
126
121
|
setup do
|
127
122
|
@username, @password = random_string, random_string
|
128
123
|
@api = TextMagic::API.new(@username, @password)
|
129
|
-
@
|
130
|
-
@
|
131
|
-
@response
|
132
|
-
TextMagic::API::
|
124
|
+
@response = random_string
|
125
|
+
@processed_response = random_string
|
126
|
+
TextMagic::API::Executor.stubs(:execute).returns(@response)
|
127
|
+
TextMagic::API::Response.stubs(:message_status).returns(@processed_response)
|
133
128
|
end
|
134
129
|
|
135
130
|
should 'call Executor execute with correct arguments' do
|
136
|
-
|
137
|
-
|
131
|
+
id = random_string
|
132
|
+
TextMagic::API::Executor.expects(:execute).with('message_status', @username, @password, :ids => id).returns(@response)
|
133
|
+
@api.message_status(id)
|
138
134
|
end
|
139
135
|
|
140
136
|
should 'join ids supplied as array' do
|
@@ -154,43 +150,15 @@ class APITest < Test::Unit::TestCase
|
|
154
150
|
lambda { @api.message_status }.should raise_error(TextMagic::API::Error)
|
155
151
|
end
|
156
152
|
|
157
|
-
should '
|
158
|
-
TextMagic::API::
|
159
|
-
|
160
|
-
response.class.should == Hash
|
161
|
-
response.is_a?(TextMagic::API::Response::MessageStatus).should == true
|
162
|
-
end
|
163
|
-
|
164
|
-
should 'return a hash with message ids as keys for an array of ids' do
|
165
|
-
TextMagic::API::Executor.expects(:execute).returns(@response)
|
166
|
-
response = @api.message_status([@id])
|
167
|
-
response[@id].should == @status
|
168
|
-
end
|
169
|
-
|
170
|
-
should 'return a hash extended with TextMagic::API::Response::MessageStatus for a list of ids' do
|
171
|
-
TextMagic::API::Executor.expects(:execute).returns(@response)
|
172
|
-
response = @api.message_status(@id, random_string)
|
173
|
-
response.class.should == Hash
|
174
|
-
response.is_a?(TextMagic::API::Response::MessageStatus).should == true
|
175
|
-
end
|
176
|
-
|
177
|
-
should 'return a hash with message ids as keys for a list of ids' do
|
178
|
-
TextMagic::API::Executor.expects(:execute).returns(@response)
|
179
|
-
response = @api.message_status(@id, random_string)
|
180
|
-
response[@id].should == @status
|
153
|
+
should 'call Response.message_status method to process the response hash (single id)' do
|
154
|
+
TextMagic::API::Response.expects(:message_status).with(@response, true).returns(@processed_response)
|
155
|
+
@api.message_status(random_string).should == @processed_response
|
181
156
|
end
|
182
157
|
|
183
|
-
should '
|
184
|
-
TextMagic::API::
|
185
|
-
|
186
|
-
|
187
|
-
response.is_a?(TextMagic::API::Response::MessageStatus::Status).should == true
|
188
|
-
end
|
189
|
-
|
190
|
-
should 'return a hash with message ids as keys for a single id' do
|
191
|
-
TextMagic::API::Executor.expects(:execute).returns(@response)
|
192
|
-
response = @api.message_status(@id)
|
193
|
-
response.should == @status
|
158
|
+
should 'call Response.message_status method to process the response hash (multiple ids)' do
|
159
|
+
TextMagic::API::Response.expects(:message_status).with(@response, false).returns(@processed_response).twice
|
160
|
+
@api.message_status([random_string]).should == @processed_response
|
161
|
+
@api.message_status(random_string, random_string).should == @processed_response
|
194
162
|
end
|
195
163
|
end
|
196
164
|
|
@@ -199,6 +167,10 @@ class APITest < Test::Unit::TestCase
|
|
199
167
|
setup do
|
200
168
|
@username, @password = random_string, random_string
|
201
169
|
@api = TextMagic::API.new(@username, @password)
|
170
|
+
@response = random_string
|
171
|
+
@processed_response = random_string
|
172
|
+
TextMagic::API::Executor.stubs(:execute).returns(@response)
|
173
|
+
TextMagic::API::Response.stubs(:receive).returns(@processed_response)
|
202
174
|
end
|
203
175
|
|
204
176
|
should 'call Executor execute with correct arguments' do
|
@@ -212,18 +184,9 @@ class APITest < Test::Unit::TestCase
|
|
212
184
|
@api.receive(last_retrieved_id)
|
213
185
|
end
|
214
186
|
|
215
|
-
should '
|
216
|
-
TextMagic::API::
|
217
|
-
|
218
|
-
response.class.should == Hash
|
219
|
-
response.is_a?(TextMagic::API::Response::Receive).should == true
|
220
|
-
end
|
221
|
-
|
222
|
-
should 'return a hash with unread and messages values' do
|
223
|
-
TextMagic::API::Executor.expects(:execute).returns({ 'messages' => [], 'unread' => 0 })
|
224
|
-
response = @api.receive
|
225
|
-
response['unread'].should == 0
|
226
|
-
response['messages'].should == []
|
187
|
+
should 'call Response.receive method to process the response hash' do
|
188
|
+
TextMagic::API::Response.expects(:receive).with(@response).returns(@processed_response)
|
189
|
+
@api.receive(random_string).should == @processed_response
|
227
190
|
end
|
228
191
|
end
|
229
192
|
|
@@ -232,6 +195,10 @@ class APITest < Test::Unit::TestCase
|
|
232
195
|
setup do
|
233
196
|
@username, @password = random_string, random_string
|
234
197
|
@api = TextMagic::API.new(@username, @password)
|
198
|
+
@response = random_string
|
199
|
+
@processed_response = random_string
|
200
|
+
TextMagic::API::Executor.stubs(:execute).returns(@response)
|
201
|
+
TextMagic::API::Response.stubs(:delete_reply).returns(@processed_response)
|
235
202
|
end
|
236
203
|
|
237
204
|
should 'call Executor execute with correct arguments' do
|
@@ -257,19 +224,8 @@ class APITest < Test::Unit::TestCase
|
|
257
224
|
lambda { @api.delete_reply }.should raise_error(TextMagic::API::Error)
|
258
225
|
end
|
259
226
|
|
260
|
-
should 'return
|
261
|
-
|
262
|
-
TextMagic::API::Executor.expects(:execute).returns({ 'deleted' => ids })
|
263
|
-
response = @api.delete_reply(ids)
|
264
|
-
response.class.should == Hash
|
265
|
-
response.is_a?(TextMagic::API::Response::DeleteReply).should == true
|
266
|
-
end
|
267
|
-
|
268
|
-
should 'return a hash with deleted value' do
|
269
|
-
ids = Array.new(3) { random_string }
|
270
|
-
TextMagic::API::Executor.expects(:execute).returns({ 'deleted' => ids })
|
271
|
-
response = @api.delete_reply(ids)
|
272
|
-
response.deleted.should == ids
|
227
|
+
should 'return true' do
|
228
|
+
@api.delete_reply(random_string).should == true
|
273
229
|
end
|
274
230
|
end
|
275
231
|
end
|
data/test/test_response.rb
CHANGED
@@ -2,175 +2,223 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
class ResponseTest < Test::Unit::TestCase
|
4
4
|
|
5
|
-
context '
|
5
|
+
context 'Response to account command' do
|
6
6
|
|
7
7
|
setup do
|
8
8
|
@balance = 0.1 * rand(1e4)
|
9
|
-
@
|
10
|
-
@response
|
9
|
+
@hash = { 'balance' => @balance.to_s }
|
10
|
+
@response = TextMagic::API::Response.account(@hash)
|
11
11
|
end
|
12
12
|
|
13
|
-
should '
|
13
|
+
should 'be an OpenStruct instance' do
|
14
|
+
@response.class.should == OpenStruct
|
15
|
+
end
|
16
|
+
|
17
|
+
should 'have balance' do
|
14
18
|
@response.balance.should be_close(@balance, 1e-10)
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
18
|
-
context '
|
22
|
+
context 'Response to send command with single phone number' do
|
19
23
|
|
20
24
|
setup do
|
21
|
-
@message_id =
|
22
|
-
'141421' => '999314159265',
|
23
|
-
'173205' => '999271828182'
|
24
|
-
}
|
25
|
+
@message_id, @phone = random_string, random_phone
|
25
26
|
@text = random_string
|
26
|
-
@parts_count = rand(
|
27
|
-
@
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
@response.
|
27
|
+
@parts_count = 1 + rand(3)
|
28
|
+
@hash = { 'message_id' => { @message_id => @phone }, 'sent_text' => @text, 'parts_count' => @parts_count }
|
29
|
+
@response = TextMagic::API::Response.send(@hash, true)
|
30
|
+
end
|
31
|
+
|
32
|
+
should 'equal to the message_id' do
|
33
|
+
@response.should == @message_id
|
34
|
+
end
|
35
|
+
|
36
|
+
should 'have sent_text' do
|
37
|
+
@response.sent_text.should == @text
|
38
|
+
end
|
39
|
+
|
40
|
+
should 'have parts_count' do
|
41
|
+
@response.parts_count.should == @parts_count
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'Response to send command with multiple phone numbers' do
|
46
|
+
|
47
|
+
setup do
|
48
|
+
@message_id1, @phone1 = random_string, random_phone
|
49
|
+
@message_id2, @phone2 = random_string, random_phone
|
50
|
+
@text = random_string
|
51
|
+
@parts_count = 1 + rand(3)
|
52
|
+
@hash = { 'message_id' => { @message_id1 => @phone1, @message_id2 => @phone2 }, 'sent_text' => @text, 'parts_count' => @parts_count }
|
53
|
+
@response = TextMagic::API::Response.send(@hash, false)
|
54
|
+
end
|
55
|
+
|
56
|
+
should 'be a hash' do
|
57
|
+
@response.class.should == Hash
|
33
58
|
end
|
34
59
|
|
35
|
-
should '
|
36
|
-
@response.
|
60
|
+
should 'have phone numbers as keys' do
|
61
|
+
@response.keys.sort.should == [@phone1, @phone2].sort
|
37
62
|
end
|
38
63
|
|
39
|
-
should '
|
40
|
-
@response[
|
41
|
-
@response[
|
64
|
+
should 'have message ids as values' do
|
65
|
+
@response[@phone1].should == @message_id1
|
66
|
+
@response[@phone2].should == @message_id2
|
42
67
|
end
|
43
68
|
|
44
|
-
should '
|
69
|
+
should 'have sent_text' do
|
45
70
|
@response.sent_text.should == @text
|
46
71
|
end
|
47
72
|
|
48
|
-
should '
|
73
|
+
should 'have parts_count' do
|
49
74
|
@response.parts_count.should == @parts_count
|
50
75
|
end
|
51
76
|
end
|
52
77
|
|
53
|
-
context '
|
78
|
+
context 'Response to message_status command with single id' do
|
54
79
|
|
55
80
|
setup do
|
56
81
|
@text = random_string
|
82
|
+
@status = random_string
|
57
83
|
@reply_number = random_phone
|
58
84
|
@created_time = (Time.now - 30).to_i
|
59
85
|
@completed_time = (Time.now - 20).to_i
|
60
86
|
@credits_cost = 0.01 * rand(300)
|
61
|
-
@
|
87
|
+
@hash = {
|
62
88
|
'141421' => {
|
63
89
|
'text' => @text,
|
64
|
-
'status' =>
|
65
|
-
'created_time' => @created_time,
|
90
|
+
'status' => @status,
|
91
|
+
'created_time' => @created_time.to_s,
|
66
92
|
'reply_number' => @reply_number,
|
67
|
-
'completed_time' => @completed_time,
|
93
|
+
'completed_time' => @completed_time.to_s,
|
68
94
|
'credits_cost' => @credits_cost
|
69
|
-
},
|
70
|
-
'173205' => {
|
71
|
-
'text' => 'test',
|
72
|
-
'status' => 'r',
|
73
|
-
'created_time' => '1242979839',
|
74
|
-
'reply_number' => '447624800500',
|
75
|
-
'completed_time' => nil,
|
76
|
-
'credits_cost' => 0.5
|
77
95
|
}
|
78
96
|
}
|
79
|
-
@response
|
97
|
+
@response = TextMagic::API::Response.message_status(@hash, true)
|
80
98
|
end
|
81
99
|
|
82
|
-
should '
|
83
|
-
@response
|
84
|
-
@response['173205'].text.should == 'test'
|
100
|
+
should 'equal to the message status' do
|
101
|
+
@response.should == @status
|
85
102
|
end
|
86
103
|
|
87
|
-
should '
|
88
|
-
@response
|
89
|
-
@response['173205'].status.should == 'r'
|
104
|
+
should 'have text' do
|
105
|
+
@response.text.should == @text
|
90
106
|
end
|
91
107
|
|
92
|
-
should '
|
93
|
-
@response
|
94
|
-
@response['173205'].reply_number.should == '447624800500'
|
108
|
+
should 'have created_time' do
|
109
|
+
@response.created_time.should == Time.at(@created_time)
|
95
110
|
end
|
96
111
|
|
97
|
-
should '
|
98
|
-
@response
|
99
|
-
@response['173205'].created_time.should == Time.at(1242979839)
|
112
|
+
should 'have completed_time' do
|
113
|
+
@response.completed_time.should == Time.at(@completed_time)
|
100
114
|
end
|
101
115
|
|
102
|
-
should '
|
103
|
-
@response
|
104
|
-
@response['173205'].completed_time.should == nil
|
116
|
+
should 'have reply_number' do
|
117
|
+
@response.reply_number.should == @reply_number
|
105
118
|
end
|
106
119
|
|
107
|
-
should '
|
108
|
-
@response
|
109
|
-
@response['173205'].credits_cost.should be_close(0.5, 1e-10)
|
120
|
+
should 'have credits_cost' do
|
121
|
+
@response.credits_cost.should be_close(@credits_cost, 1e-10)
|
110
122
|
end
|
111
123
|
end
|
112
|
-
|
113
|
-
context '
|
124
|
+
|
125
|
+
context 'Response to message_status command with multiple ids' do
|
114
126
|
|
115
127
|
setup do
|
116
|
-
@
|
117
|
-
@
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
+
@text = random_string
|
129
|
+
@status = random_string
|
130
|
+
@reply_number = random_phone
|
131
|
+
@created_time = (Time.now - 30).to_i
|
132
|
+
@completed_time = (Time.now - 20).to_i
|
133
|
+
@credits_cost = 0.01 * rand(300)
|
134
|
+
@hash = {
|
135
|
+
'141421' => {
|
136
|
+
'text' => @text,
|
137
|
+
'status' => @status,
|
138
|
+
'created_time' => @created_time,
|
139
|
+
'reply_number' => @reply_number,
|
140
|
+
'completed_time' => @completed_time,
|
141
|
+
'credits_cost' => @credits_cost
|
142
|
+
}
|
128
143
|
}
|
129
|
-
@
|
130
|
-
@unread = rand(1e4)
|
131
|
-
@response = { 'unread' => @unread, 'messages' => @messages }
|
132
|
-
@response.extend TextMagic::API::Response::Receive
|
144
|
+
@response = TextMagic::API::Response.message_status(@hash, false)
|
133
145
|
end
|
134
146
|
|
135
|
-
should '
|
136
|
-
@response.
|
147
|
+
should 'be a hash' do
|
148
|
+
@response.class.should == Hash
|
149
|
+
end
|
150
|
+
|
151
|
+
should 'have message_ids as keys' do
|
152
|
+
@response.keys.should == ['141421']
|
137
153
|
end
|
138
154
|
|
139
|
-
should '
|
140
|
-
@response.
|
155
|
+
should 'contain statuses' do
|
156
|
+
@response.values.first.should == @status
|
141
157
|
end
|
142
158
|
|
143
|
-
should '
|
144
|
-
@response.
|
159
|
+
should 'have text for all statuses' do
|
160
|
+
@response.values.first.text.should == @text
|
145
161
|
end
|
146
162
|
|
147
|
-
should '
|
148
|
-
@response.
|
163
|
+
should 'have created_time for all statuses' do
|
164
|
+
@response.values.first.created_time.should == Time.at(@created_time)
|
149
165
|
end
|
150
166
|
|
151
|
-
should '
|
152
|
-
@response.
|
167
|
+
should 'have completed_time for all statuses' do
|
168
|
+
@response.values.first.completed_time.should == Time.at(@completed_time)
|
153
169
|
end
|
154
170
|
|
155
|
-
should '
|
156
|
-
@response.
|
171
|
+
should 'have reply_number for all statuses' do
|
172
|
+
@response.values.first.reply_number.should == @reply_number
|
157
173
|
end
|
158
174
|
|
159
|
-
should '
|
160
|
-
@response.
|
175
|
+
should 'have credits_cost for all statuses' do
|
176
|
+
@response.values.first.credits_cost.should be_close(@credits_cost, 1e-10)
|
161
177
|
end
|
162
178
|
end
|
163
179
|
|
164
|
-
context '
|
180
|
+
context 'Response to receive command' do
|
165
181
|
|
166
182
|
setup do
|
167
|
-
@
|
168
|
-
@
|
169
|
-
@
|
183
|
+
@timestamp = (Time.now - 30).to_i
|
184
|
+
@text, @phone, @message_id = random_string, random_phone, random_string
|
185
|
+
@message = {
|
186
|
+
'timestamp' => @timestamp,
|
187
|
+
'from' => @phone,
|
188
|
+
'text' => @text,
|
189
|
+
'message_id' => @message_id
|
190
|
+
}
|
191
|
+
@unread = rand(1e4)
|
192
|
+
@hash = { 'unread' => @unread, 'messages' => [@message] }
|
193
|
+
@response = TextMagic::API::Response.receive(@hash)
|
194
|
+
end
|
195
|
+
|
196
|
+
should 'have unread' do
|
197
|
+
@response.unread.should == @unread
|
198
|
+
end
|
199
|
+
|
200
|
+
should 'be an array' do
|
201
|
+
@response.class.should == Array
|
202
|
+
end
|
203
|
+
|
204
|
+
should 'contain strings with phones numbers and texts' do
|
205
|
+
@response.first.should == "#{@phone}: #{@text}"
|
206
|
+
end
|
207
|
+
|
208
|
+
should 'have timestamp for all messages' do
|
209
|
+
@response.first.timestamp.should == Time.at(@timestamp)
|
210
|
+
end
|
211
|
+
|
212
|
+
should 'have from for allmessages' do
|
213
|
+
@response.first.from.should == @phone
|
214
|
+
end
|
215
|
+
|
216
|
+
should 'have text for all messages' do
|
217
|
+
@response.first.text.should == @text
|
170
218
|
end
|
171
219
|
|
172
|
-
should '
|
173
|
-
@response.
|
220
|
+
should 'have message_id for all messages' do
|
221
|
+
@response.first.message_id.should == @message_id
|
174
222
|
end
|
175
223
|
end
|
176
224
|
end
|