textmagic 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +5 -0
- data/.gitignore +5 -0
- data/LICENSE +20 -0
- data/README.rdoc +40 -0
- data/Rakefile +57 -0
- data/VERSION.yml +4 -0
- data/lib/api.rb +179 -0
- data/lib/charset.rb +23 -0
- data/lib/error.rb +27 -0
- data/lib/executor.rb +34 -0
- data/lib/response.rb +141 -0
- data/lib/textmagic.rb +12 -0
- data/lib/validation.rb +34 -0
- data/test/test_api.rb +246 -0
- data/test/test_charset.rb +28 -0
- data/test/test_error.rb +24 -0
- data/test/test_executor.rb +70 -0
- data/test/test_helper.rb +38 -0
- data/test/test_response.rb +176 -0
- data/test/test_validation.rb +99 -0
- data/textmagic.gemspec +64 -0
- metadata +80 -0
@@ -0,0 +1,176 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ResponseTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
context 'Account response' do
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@balance = 0.1 * rand(1e4)
|
9
|
+
@response = { 'balance' => @balance.to_s }
|
10
|
+
@response.extend TextMagic::API::Response::Account
|
11
|
+
end
|
12
|
+
|
13
|
+
should 'allow access to balance' do
|
14
|
+
@response.balance.should be_close(@balance, 1e-10)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'Send response' do
|
19
|
+
|
20
|
+
setup do
|
21
|
+
@message_id = {
|
22
|
+
'141421' => '999314159265',
|
23
|
+
'173205' => '999271828182'
|
24
|
+
}
|
25
|
+
@text = random_string
|
26
|
+
@parts_count = rand(10)
|
27
|
+
@response = {
|
28
|
+
'message_id' => @message_id,
|
29
|
+
'sent_text' => @text,
|
30
|
+
'parts_count' => @parts_count
|
31
|
+
}
|
32
|
+
@response.extend TextMagic::API::Response::Send
|
33
|
+
end
|
34
|
+
|
35
|
+
should 'allow access to inverted message_id hash' do
|
36
|
+
@response.message_id_hash.should == @message_id.invert
|
37
|
+
end
|
38
|
+
|
39
|
+
should 'allow access to message_ids array' do
|
40
|
+
@response.message_ids.should == ['141421', '173205']
|
41
|
+
end
|
42
|
+
|
43
|
+
should 'allow access to message_id for a given phone number' do
|
44
|
+
@response.message_id('999314159265').should == '141421'
|
45
|
+
@response.message_id('999271828182').should == '173205'
|
46
|
+
end
|
47
|
+
|
48
|
+
should 'allow access to sent_text' do
|
49
|
+
@response.sent_text.should == @text
|
50
|
+
end
|
51
|
+
|
52
|
+
should 'allow access to parts_count' do
|
53
|
+
@response.parts_count.should == @parts_count
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'MessageStatus response' do
|
58
|
+
|
59
|
+
setup do
|
60
|
+
@text = random_string
|
61
|
+
@reply_number = random_phone
|
62
|
+
@created_time = (Time.now - 30).to_i
|
63
|
+
@completed_time = (Time.now - 20).to_i
|
64
|
+
@credits_cost = 0.01 * rand(300)
|
65
|
+
@response = {
|
66
|
+
'141421' => {
|
67
|
+
'text' => @text,
|
68
|
+
'status' => 'd',
|
69
|
+
'created_time' => @created_time,
|
70
|
+
'reply_number' => @reply_number,
|
71
|
+
'completed_time' => @completed_time,
|
72
|
+
'credits_cost' => @credits_cost
|
73
|
+
},
|
74
|
+
'173205' => {
|
75
|
+
'text' => 'test',
|
76
|
+
'status' => 'r',
|
77
|
+
'created_time' => '1242979839',
|
78
|
+
'reply_number' => '447624800500',
|
79
|
+
'completed_time' => nil,
|
80
|
+
'credits_cost' => 0.5
|
81
|
+
}
|
82
|
+
}
|
83
|
+
@response.extend TextMagic::API::Response::MessageStatus
|
84
|
+
end
|
85
|
+
|
86
|
+
should 'allow access to text for all statuses' do
|
87
|
+
@response['141421'].text.should == @text
|
88
|
+
@response['173205'].text.should == 'test'
|
89
|
+
end
|
90
|
+
|
91
|
+
should 'allow access to status for a given message_id' do
|
92
|
+
@response['141421'].status.should == 'd'
|
93
|
+
@response['173205'].status.should == 'r'
|
94
|
+
end
|
95
|
+
|
96
|
+
should 'allow access to reply_number for a given message_id' do
|
97
|
+
@response['141421'].reply_number.should == @reply_number
|
98
|
+
@response['173205'].reply_number.should == '447624800500'
|
99
|
+
end
|
100
|
+
|
101
|
+
should 'allow access to created_time for a given message_id' do
|
102
|
+
@response['141421'].created_time.should == Time.at(@created_time)
|
103
|
+
@response['173205'].created_time.should == Time.at(1242979839)
|
104
|
+
end
|
105
|
+
|
106
|
+
should 'allow access to completed_time for a given message_id' do
|
107
|
+
@response['141421'].completed_time.should == Time.at(@completed_time)
|
108
|
+
@response['173205'].completed_time.should == nil
|
109
|
+
end
|
110
|
+
|
111
|
+
should 'allow access to credits_cost for a given message_id' do
|
112
|
+
@response['141421'].credits_cost.should be_close(@credits_cost, 1e-10)
|
113
|
+
@response['173205'].credits_cost.should be_close(0.5, 1e-10)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'Receive response' do
|
118
|
+
|
119
|
+
setup do
|
120
|
+
@timestamp = (Time.now - 30).to_i
|
121
|
+
@message1 = {
|
122
|
+
'timestamp' => @timestamp,
|
123
|
+
'from' => '999314159265',
|
124
|
+
'text' => 'Hi Fred',
|
125
|
+
'message_id' => '141421'
|
126
|
+
}
|
127
|
+
@message2 = {
|
128
|
+
'timestamp' => 1243244148,
|
129
|
+
'from' => '999271828182',
|
130
|
+
'text' => 'Hello buddy',
|
131
|
+
'message_id' => '173205'
|
132
|
+
}
|
133
|
+
@messages = [@message1, @message2]
|
134
|
+
@unread = rand(1e4)
|
135
|
+
@response = { 'unread' => @unread, 'messages' => @messages }
|
136
|
+
@response.extend TextMagic::API::Response::Receive
|
137
|
+
end
|
138
|
+
|
139
|
+
should 'allow access to unread' do
|
140
|
+
@response.unread.should == @unread
|
141
|
+
end
|
142
|
+
|
143
|
+
should 'allow access to messages array' do
|
144
|
+
@response.messages.should == @messages
|
145
|
+
end
|
146
|
+
|
147
|
+
should 'allow access to message_id for all messages' do
|
148
|
+
@response.messages.first.message_id.should == '141421'
|
149
|
+
end
|
150
|
+
|
151
|
+
should 'allow access to timestamp for all messages' do
|
152
|
+
@response.messages.first.timestamp.should == Time.at(@timestamp)
|
153
|
+
end
|
154
|
+
|
155
|
+
should 'allow access to from for all messages' do
|
156
|
+
@response.messages.first.from.should == '999314159265'
|
157
|
+
end
|
158
|
+
|
159
|
+
should 'allow access to text for all messages' do
|
160
|
+
@response.messages.first.text.should == 'Hi Fred'
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context 'DeleteReply response' do
|
165
|
+
|
166
|
+
setup do
|
167
|
+
@ids = ['141421', '1780826']
|
168
|
+
@response = { 'deleted' => @ids }
|
169
|
+
@response.extend TextMagic::API::Response::DeleteReply
|
170
|
+
end
|
171
|
+
|
172
|
+
should 'allow access to deleted' do
|
173
|
+
@response.deleted.should == @ids
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
class ValidationTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context 'validate_text_length method for non-unicode texts' do
|
7
|
+
|
8
|
+
should 'return true if parts limit is set to 1 and text length is less than or equal to 160' do
|
9
|
+
TextMagic::API.validate_text_length(random_string(160), false, 1).should == true
|
10
|
+
end
|
11
|
+
|
12
|
+
should 'return false if parts limit is set to 1 and text length is greater than 160' do
|
13
|
+
TextMagic::API.validate_text_length(random_string(161), false, 1).should == false
|
14
|
+
end
|
15
|
+
|
16
|
+
should 'return true if parts limit is set to 2 and text length is less than or equal to 306' do
|
17
|
+
TextMagic::API.validate_text_length(random_string(306), false, 2).should == true
|
18
|
+
end
|
19
|
+
|
20
|
+
should 'return false if parts limit is set to 2 and text length is greater than 306' do
|
21
|
+
TextMagic::API.validate_text_length(random_string(307), false, 2).should == false
|
22
|
+
end
|
23
|
+
|
24
|
+
should 'return true if parts limit is set to 3 or is not specified and text length is less than or equal to 459' do
|
25
|
+
TextMagic::API.validate_text_length(random_string(459), false).should == true
|
26
|
+
TextMagic::API.validate_text_length(random_string(459), false, 3).should == true
|
27
|
+
end
|
28
|
+
|
29
|
+
should 'return false if parts limit is set to 3 or is not specified and text length is greater than 459' do
|
30
|
+
TextMagic::API.validate_text_length(random_string(460), false).should == false
|
31
|
+
TextMagic::API.validate_text_length(random_string(460), false, 3).should == false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'validate_text_length method for unicode texts' do
|
36
|
+
|
37
|
+
should 'return true if parts limit is set to 1 and text length is less than or equal to 70' do
|
38
|
+
TextMagic::API.validate_text_length(random_string(70), true, 1).should == true
|
39
|
+
end
|
40
|
+
|
41
|
+
should 'return false if parts limit is set to 1 and text length is greater than 70' do
|
42
|
+
TextMagic::API.validate_text_length(random_string(71), true, 1).should == false
|
43
|
+
end
|
44
|
+
|
45
|
+
should 'return true if parts limit is set to 2 and text length is less than or equal to 134' do
|
46
|
+
TextMagic::API.validate_text_length(random_string(134), true, 2).should == true
|
47
|
+
end
|
48
|
+
|
49
|
+
should 'return false if parts limit is set to 2 and text length is greater than 134' do
|
50
|
+
TextMagic::API.validate_text_length(random_string(135), true, 2).should == false
|
51
|
+
end
|
52
|
+
|
53
|
+
should 'return true if parts limit is set to 3 or is not specified and text length is less than or equal to 201' do
|
54
|
+
TextMagic::API.validate_text_length(random_string(201), true).should == true
|
55
|
+
TextMagic::API.validate_text_length(random_string(201), true, 3).should == true
|
56
|
+
end
|
57
|
+
|
58
|
+
should 'return false if parts limit is set to 3 or is not specified and text length is greater than 201' do
|
59
|
+
TextMagic::API.validate_text_length(random_string(202), true).should == false
|
60
|
+
TextMagic::API.validate_text_length(random_string(202), true, 3).should == false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'validate_phones method' do
|
65
|
+
|
66
|
+
should 'return true if phone number consists of up to 15 digits' do
|
67
|
+
TextMagic::API.validate_phones(rand(10 ** 15).to_s).should == true
|
68
|
+
end
|
69
|
+
|
70
|
+
should 'return false if phone number is longer than 15 digits' do
|
71
|
+
TextMagic::API.validate_phones((10 ** 16 + rand(10 ** 15)).to_s).should == false
|
72
|
+
end
|
73
|
+
|
74
|
+
should 'return false if phone number contains non-digits' do
|
75
|
+
TextMagic::API.validate_phones(random_string).should == false
|
76
|
+
end
|
77
|
+
|
78
|
+
should 'return false if phone number is empty' do
|
79
|
+
TextMagic::API.validate_phones('').should == false
|
80
|
+
end
|
81
|
+
|
82
|
+
should 'return true if all phone numbers in a list are valid' do
|
83
|
+
phone1, phone2 = rand(10 ** 15).to_s, rand(10 ** 15).to_s
|
84
|
+
TextMagic::API.validate_phones(phone1, phone2).should == true
|
85
|
+
TextMagic::API.validate_phones([phone1, phone2]).should == true
|
86
|
+
end
|
87
|
+
|
88
|
+
should 'return false if phone numbers list is empty' do
|
89
|
+
TextMagic::API.validate_phones().should == false
|
90
|
+
end
|
91
|
+
|
92
|
+
should 'return false if format of any of phone numbers in a list is invalid' do
|
93
|
+
phone1 = rand(10 ** 15).to_s, rand(10 ** 15).to_s
|
94
|
+
phone2 = random_string
|
95
|
+
TextMagic::API.validate_phones(phone1, phone2).should == false
|
96
|
+
TextMagic::API.validate_phones([phone1, phone2]).should == false
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/textmagic.gemspec
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{textmagic}
|
5
|
+
s.version = "0.2.0"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Vladimir Bobes Tuzinsky"]
|
9
|
+
s.date = %q{2009-05-25}
|
10
|
+
s.email = %q{vladimir.tuzinsky@gmail.com}
|
11
|
+
s.extra_rdoc_files = [
|
12
|
+
"LICENSE",
|
13
|
+
"README.rdoc"
|
14
|
+
]
|
15
|
+
s.files = [
|
16
|
+
".document",
|
17
|
+
".gitignore",
|
18
|
+
"LICENSE",
|
19
|
+
"README.rdoc",
|
20
|
+
"Rakefile",
|
21
|
+
"VERSION.yml",
|
22
|
+
"lib/api.rb",
|
23
|
+
"lib/charset.rb",
|
24
|
+
"lib/error.rb",
|
25
|
+
"lib/executor.rb",
|
26
|
+
"lib/response.rb",
|
27
|
+
"lib/textmagic.rb",
|
28
|
+
"lib/validation.rb",
|
29
|
+
"test/test_api.rb",
|
30
|
+
"test/test_charset.rb",
|
31
|
+
"test/test_error.rb",
|
32
|
+
"test/test_executor.rb",
|
33
|
+
"test/test_helper.rb",
|
34
|
+
"test/test_response.rb",
|
35
|
+
"test/test_validation.rb",
|
36
|
+
"textmagic.gemspec"
|
37
|
+
]
|
38
|
+
s.has_rdoc = true
|
39
|
+
s.homepage = %q{http://github.com/bobes/textmagic}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubyforge_project = %q{textmagic}
|
43
|
+
s.rubygems_version = %q{1.3.1}
|
44
|
+
s.summary = %q{Ruby interface to the TextMagic's SMS gateway}
|
45
|
+
s.test_files = [
|
46
|
+
"test/test_api.rb",
|
47
|
+
"test/test_charset.rb",
|
48
|
+
"test/test_error.rb",
|
49
|
+
"test/test_executor.rb",
|
50
|
+
"test/test_helper.rb",
|
51
|
+
"test/test_response.rb",
|
52
|
+
"test/test_validation.rb"
|
53
|
+
]
|
54
|
+
|
55
|
+
if s.respond_to? :specification_version then
|
56
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
57
|
+
s.specification_version = 2
|
58
|
+
|
59
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
60
|
+
else
|
61
|
+
end
|
62
|
+
else
|
63
|
+
end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: textmagic
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Vladimir Bobes Tuzinsky
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-05-25 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: vladimir.tuzinsky@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files:
|
23
|
+
- LICENSE
|
24
|
+
- README.rdoc
|
25
|
+
files:
|
26
|
+
- .document
|
27
|
+
- .gitignore
|
28
|
+
- LICENSE
|
29
|
+
- README.rdoc
|
30
|
+
- Rakefile
|
31
|
+
- VERSION.yml
|
32
|
+
- lib/api.rb
|
33
|
+
- lib/charset.rb
|
34
|
+
- lib/error.rb
|
35
|
+
- lib/executor.rb
|
36
|
+
- lib/response.rb
|
37
|
+
- lib/textmagic.rb
|
38
|
+
- lib/validation.rb
|
39
|
+
- test/test_api.rb
|
40
|
+
- test/test_charset.rb
|
41
|
+
- test/test_error.rb
|
42
|
+
- test/test_executor.rb
|
43
|
+
- test/test_helper.rb
|
44
|
+
- test/test_response.rb
|
45
|
+
- test/test_validation.rb
|
46
|
+
- textmagic.gemspec
|
47
|
+
has_rdoc: true
|
48
|
+
homepage: http://github.com/bobes/textmagic
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options:
|
51
|
+
- --charset=UTF-8
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
requirements: []
|
67
|
+
|
68
|
+
rubyforge_project: textmagic
|
69
|
+
rubygems_version: 1.3.1
|
70
|
+
signing_key:
|
71
|
+
specification_version: 2
|
72
|
+
summary: Ruby interface to the TextMagic's SMS gateway
|
73
|
+
test_files:
|
74
|
+
- test/test_api.rb
|
75
|
+
- test/test_charset.rb
|
76
|
+
- test/test_error.rb
|
77
|
+
- test/test_executor.rb
|
78
|
+
- test/test_helper.rb
|
79
|
+
- test/test_response.rb
|
80
|
+
- test/test_validation.rb
|