sms_aero 0.0.11 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -6
  3. data/CHANGELOG.md +15 -10
  4. data/README.md +25 -30
  5. data/lib/sms_aero.rb +119 -34
  6. data/lib/sms_aero/birthday.rb +12 -0
  7. data/lib/sms_aero/callable.rb +6 -0
  8. data/lib/sms_aero/channel.rb +15 -0
  9. data/lib/sms_aero/digital.rb +7 -0
  10. data/lib/sms_aero/filled_string.rb +11 -0
  11. data/lib/sms_aero/future.rb +16 -0
  12. data/lib/sms_aero/group.rb +11 -0
  13. data/lib/sms_aero/optional.rb +15 -0
  14. data/lib/sms_aero/phone.rb +11 -0
  15. data/lib/sms_aero/response.rb +30 -0
  16. data/lib/sms_aero/response/with_balance.rb +5 -0
  17. data/lib/sms_aero/response/with_groups.rb +5 -0
  18. data/lib/sms_aero/response/with_id.rb +9 -0
  19. data/lib/sms_aero/response/with_senders.rb +5 -0
  20. data/lib/sms_aero/response/with_statuses.rb +5 -0
  21. data/lib/sms_aero/response/with_tariff.rb +5 -0
  22. data/lib/sms_aero/tariff.rb +8 -0
  23. data/sms_aero.gemspec +2 -4
  24. data/spec/{sms_aero/types → models}/birthday_spec.rb +2 -2
  25. data/spec/{sms_aero/types → models}/channel_spec.rb +2 -2
  26. data/spec/{sms_aero/types → models}/digital_spec.rb +1 -1
  27. data/spec/{sms_aero/types → models}/future_spec.rb +5 -5
  28. data/spec/{sms_aero/types → models}/phone_spec.rb +1 -1
  29. data/spec/{sms_aero/operations → operations}/add_blacklist_spec.rb +19 -3
  30. data/spec/{sms_aero/operations → operations}/add_group_spec.rb +4 -4
  31. data/spec/{sms_aero/operations → operations}/add_phone_spec.rb +39 -76
  32. data/spec/{sms_aero/operations → operations}/check_balance_spec.rb +2 -4
  33. data/spec/{sms_aero/operations → operations}/check_groups_spec.rb +0 -0
  34. data/spec/{sms_aero/operations → operations}/check_senders_spec.rb +5 -5
  35. data/spec/{sms_aero/operations → operations}/check_sending_spec.rb +3 -3
  36. data/spec/{sms_aero/operations → operations}/check_sign_spec.rb +2 -2
  37. data/spec/{sms_aero/operations → operations}/check_status_spec.rb +3 -3
  38. data/spec/{sms_aero/operations → operations}/check_tariff_spec.rb +1 -1
  39. data/spec/{sms_aero/operations → operations}/delete_group_spec.rb +3 -3
  40. data/spec/{sms_aero/operations → operations}/delete_phone_spec.rb +4 -4
  41. data/spec/{sms_aero/operations → operations}/send_sms_spec.rb +49 -11
  42. data/spec/spec_helper.rb +4 -1
  43. data/spec/support/en.yml +8 -0
  44. metadata +61 -101
  45. data/lib/sms_aero/models/answer.rb +0 -8
  46. data/lib/sms_aero/models/sms.rb +0 -16
  47. data/lib/sms_aero/models/tariff.rb +0 -8
  48. data/lib/sms_aero/operations/add_blacklist.rb +0 -11
  49. data/lib/sms_aero/operations/add_group.rb +0 -11
  50. data/lib/sms_aero/operations/add_phone.rb +0 -17
  51. data/lib/sms_aero/operations/check_balance.rb +0 -11
  52. data/lib/sms_aero/operations/check_groups.rb +0 -12
  53. data/lib/sms_aero/operations/check_senders.rb +0 -15
  54. data/lib/sms_aero/operations/check_sending.rb +0 -11
  55. data/lib/sms_aero/operations/check_sign.rb +0 -15
  56. data/lib/sms_aero/operations/check_status.rb +0 -11
  57. data/lib/sms_aero/operations/check_tariff.rb +0 -12
  58. data/lib/sms_aero/operations/delete_group.rb +0 -11
  59. data/lib/sms_aero/operations/delete_phone.rb +0 -12
  60. data/lib/sms_aero/operations/hlr.rb +0 -36
  61. data/lib/sms_aero/operations/send_sms.rb +0 -22
  62. data/lib/sms_aero/operations/send_to_group.rb +0 -15
  63. data/lib/sms_aero/types/birthday.rb +0 -20
  64. data/lib/sms_aero/types/channel.rb +0 -4
  65. data/lib/sms_aero/types/digital.rb +0 -8
  66. data/lib/sms_aero/types/filled_string.rb +0 -3
  67. data/lib/sms_aero/types/future.rb +0 -16
  68. data/lib/sms_aero/types/password.rb +0 -6
  69. data/lib/sms_aero/types/phone.rb +0 -12
  70. data/lib/sms_aero/types/sign_status.rb +0 -9
  71. data/spec/sms_aero/operations/hlr_spec.rb +0 -96
  72. data/spec/sms_aero/operations/send_to_group_spec.rb +0 -185
  73. data/spec/sms_aero/types/sign_status_spec.rb +0 -19
@@ -0,0 +1,11 @@
1
+ class SmsAero::Phone < String
2
+ extend SmsAero::Callable
3
+
4
+ private
5
+
6
+ def initialize(value)
7
+ phone = value.to_s.scan(/\d/).join[/[^0].*/].to_s
8
+ raise "'#{value}' is not a valid phone" unless phone[/^\d{11,13}$/]
9
+ super phone
10
+ end
11
+ end
@@ -0,0 +1,30 @@
1
+ class SmsAero::Response
2
+ extend Dry::Initializer
3
+ extend SmsAero::Optional
4
+ option :reason, proc(&:to_s), default: proc { nil }
5
+ option :result, proc(&:strip), default: -> { "accepted" }
6
+
7
+ def success?
8
+ result == "accepted"
9
+ end
10
+
11
+ class << self
12
+ def build(*res)
13
+ body = res.last
14
+ new JSON.parse(body.first)
15
+ end
16
+
17
+ def new(opts)
18
+ super \
19
+ opts.each_with_object({}) { |(key, val), obj| obj[key.to_sym] = val }
20
+ end
21
+ end
22
+
23
+ # Operation-specific responses
24
+ require_relative "response/with_balance"
25
+ require_relative "response/with_groups"
26
+ require_relative "response/with_id"
27
+ require_relative "response/with_senders"
28
+ require_relative "response/with_statuses"
29
+ require_relative "response/with_tariff"
30
+ end
@@ -0,0 +1,5 @@
1
+ class SmsAero
2
+ class Response::WithBalance < Response
3
+ option :balance, proc(&:to_f), optional: true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class SmsAero
2
+ class Response::WithGroups < Response
3
+ option :reason, method(:Array), as: :channels, optional: true
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class SmsAero
2
+ class Response::WithId < Response
3
+ option :id, proc(&:to_s), optional: true
4
+
5
+ def success?
6
+ id.to_s != ""
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class SmsAero
2
+ class Response::WithSenders < Response
3
+ option :data, method(:Array), optional: true, as: :senders
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class SmsAero
2
+ class Response::WithStatuses < Response
3
+ option :data, method(:Array), optional: true, as: :statuses
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class SmsAero
2
+ class Response::WithTariff < Response
3
+ option :reason, SmsAero::Tariff, optional: true, as: :tariff
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ class SmsAero::Tariff
2
+ extend Dry::Initializer
3
+ extend SmsAero::Callable
4
+ include SmsAero::Optional
5
+
6
+ option :"Direct channel", proc(&:to_f), optional: true, as: :direct
7
+ option :"Digital channel", proc(&:to_f), optional: true, as: :digital
8
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "sms_aero"
3
- gem.version = "0.0.11"
3
+ gem.version = "0.1.0"
4
4
  gem.author = "Andrew Kozin (nepalez)"
5
5
  gem.email = "andrew.kozin@gmail.com"
6
6
  gem.homepage = "https://github.com/nepalez/sms_aero"
@@ -13,9 +13,7 @@ Gem::Specification.new do |gem|
13
13
 
14
14
  gem.required_ruby_version = ">= 2.2"
15
15
 
16
- gem.add_runtime_dependency "dry-types", ">= 0.9"
17
- gem.add_runtime_dependency "evil-struct", ">= 0.0.4"
18
- gem.add_runtime_dependency "evil-client", "~> 0.3.2"
16
+ gem.add_runtime_dependency "evil-client", "~> 1.1"
19
17
 
20
18
  gem.add_development_dependency "rake", ">= 10"
21
19
  gem.add_development_dependency "rspec", "~> 3.0"
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe SmsAero::Types::Birthday do
3
+ RSpec.describe SmsAero::Birthday do
4
4
  subject { described_class[source] }
5
5
 
6
6
  context "date:" do
@@ -27,7 +27,7 @@ RSpec.describe SmsAero::Types::Birthday do
27
27
  let(:source) { "Foobar" }
28
28
 
29
29
  it "fails" do
30
- expect { subject }.to raise_error(TypeError, /Foobar/)
30
+ expect { subject }.to raise_error(StandardError, /Foobar/)
31
31
  end
32
32
  end
33
33
  end
@@ -1,11 +1,11 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe SmsAero::Types::Channel do
3
+ RSpec.describe SmsAero::Channel do
4
4
  context "valid code:" do
5
5
  let(:codes) { [1, 2, 3, 4, 6] }
6
6
 
7
7
  it "returns a code" do
8
- codes.each { |code| expect(described_class[code]).to eq code }
8
+ codes.each { |code| expect(described_class[code]).to eq code.to_s }
9
9
  end
10
10
  end
11
11
 
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe SmsAero::Types::Digital do
3
+ RSpec.describe SmsAero::Digital do
4
4
  subject { described_class[source] }
5
5
 
6
6
  context "false:" do
@@ -1,13 +1,13 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe SmsAero::Types::Future do
3
+ RSpec.describe SmsAero::Future do
4
4
  subject { described_class[source] }
5
5
 
6
6
  context "time in future:" do
7
7
  let(:source) { Time.now + 3600 }
8
8
 
9
9
  it "returns UNIX time in seconds" do
10
- expect(subject).to eq source.to_i
10
+ expect(subject).to eq source.to_i.to_s
11
11
  end
12
12
  end
13
13
 
@@ -16,7 +16,7 @@ RSpec.describe SmsAero::Types::Future do
16
16
  let(:source) { time.strftime "%Y-%m-%d %H:%M:%S" }
17
17
 
18
18
  it "returns UNIX time in seconds" do
19
- expect(subject).to eq time.to_i
19
+ expect(subject).to eq time.to_i.to_s
20
20
  end
21
21
  end
22
22
 
@@ -24,7 +24,7 @@ RSpec.describe SmsAero::Types::Future do
24
24
  let(:source) { Time.now - 3600 }
25
25
 
26
26
  it "fails" do
27
- expect { subject }.to raise_error(TypeError)
27
+ expect { subject }.to raise_error(StandardError)
28
28
  end
29
29
  end
30
30
 
@@ -32,7 +32,7 @@ RSpec.describe SmsAero::Types::Future do
32
32
  let(:source) { "foobar" }
33
33
 
34
34
  it "fails" do
35
- expect { subject }.to raise_error(TypeError, /foobar/)
35
+ expect { subject }.to raise_error(StandardError, /foobar/)
36
36
  end
37
37
  end
38
38
  end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- RSpec.describe SmsAero::Types::Phone do
3
+ RSpec.describe SmsAero::Phone do
4
4
  subject { described_class[source] }
5
5
 
6
6
  context "valid phone:" do
@@ -22,11 +22,27 @@ RSpec.describe SmsAero, "#add_blacklist" do
22
22
  end
23
23
 
24
24
  it "returns success" do
25
- expect(subject).to be_kind_of SmsAero::Answer
25
+ expect(subject).to be_kind_of SmsAero::Response
26
26
  expect(subject.result).to eq "accepted"
27
27
  end
28
28
  end
29
29
 
30
+ context "by token:" do
31
+ let(:settings) { { user: "LOGIN", token: "PASSWORD" } }
32
+ let(:url) do
33
+ "https://gate.smsaero.ru/addblacklist?" \
34
+ "answer=json&" \
35
+ "password=PASSWORD&" \
36
+ "phone=70181324388&" \
37
+ "user=LOGIN"
38
+ end
39
+
40
+ it "sends a request" do
41
+ subject
42
+ expect(a_request(:post, url)).to have_been_made
43
+ end
44
+ end
45
+
30
46
  context "via GET:" do
31
47
  let(:url) do
32
48
  "https://gate.smsaero.ru/addblacklist?" \
@@ -65,7 +81,7 @@ RSpec.describe SmsAero, "#add_blacklist" do
65
81
  before { params[:phone] = "foobar23" }
66
82
 
67
83
  it "raises an exception" do
68
- expect { subject }.to raise_error(TypeError, /23/)
84
+ expect { subject }.to raise_error(Evil::Client::ValidationError, /23/)
69
85
  end
70
86
  end
71
87
 
@@ -73,7 +89,7 @@ RSpec.describe SmsAero, "#add_blacklist" do
73
89
  before { params.delete :phone }
74
90
 
75
91
  it "raises an exception" do
76
- expect { subject }.to raise_error(ArgumentError)
92
+ expect { subject }.to raise_error(Evil::Client::ValidationError, /phone/)
77
93
  end
78
94
  end
79
95
  end
@@ -22,7 +22,7 @@ RSpec.describe SmsAero, "#add_group" do
22
22
  end
23
23
 
24
24
  it "returns success" do
25
- expect(subject).to be_kind_of SmsAero::Answer
25
+ expect(subject).to be_kind_of SmsAero::Response
26
26
  expect(subject.result).to eq "accepted"
27
27
  end
28
28
  end
@@ -56,7 +56,7 @@ RSpec.describe SmsAero, "#add_group" do
56
56
  before { settings[:use_ssl] = false }
57
57
 
58
58
  it "returns success" do
59
- expect(subject).to be_kind_of SmsAero::Answer
59
+ expect(subject).to be_kind_of SmsAero::Response
60
60
  expect(subject.result).to eq "accepted"
61
61
  end
62
62
  end
@@ -65,7 +65,7 @@ RSpec.describe SmsAero, "#add_group" do
65
65
  before { params[:group] = "" }
66
66
 
67
67
  it "raises an exception" do
68
- expect { subject }.to raise_error(TypeError)
68
+ expect { subject }.to raise_error(Evil::Client::ValidationError)
69
69
  end
70
70
  end
71
71
 
@@ -73,7 +73,7 @@ RSpec.describe SmsAero, "#add_group" do
73
73
  before { params.delete :group }
74
74
 
75
75
  it "raises an exception" do
76
- expect { subject }.to raise_error(ArgumentError)
76
+ expect { subject }.to raise_error(Evil::Client::ValidationError, /group/)
77
77
  end
78
78
  end
79
79
  end
@@ -1,5 +1,5 @@
1
1
  RSpec.describe SmsAero, "#add_phone" do
2
- let(:settings) { { user: "LOGIN", password: "PASSWORD" } }
2
+ let(:settings) { { user: "LOGIN", token: "TOKEN" } }
3
3
  let(:client) { described_class.new(settings) }
4
4
  let(:params) { { phone: "+7 (909) 382-84-45" } }
5
5
  let(:answer) { { result: "accepted" } }
@@ -10,10 +10,7 @@ RSpec.describe SmsAero, "#add_phone" do
10
10
  context "using ssl via POST:" do
11
11
  let(:url) do
12
12
  "https://gate.smsaero.ru/addphone?" \
13
- "answer=json&" \
14
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
15
- "phone=79093828445&" \
16
- "user=LOGIN"
13
+ "answer=json&password=TOKEN&phone=79093828445&user=LOGIN"
17
14
  end
18
15
 
19
16
  it "sends a request" do
@@ -22,7 +19,7 @@ RSpec.describe SmsAero, "#add_phone" do
22
19
  end
23
20
 
24
21
  it "returns success" do
25
- expect(subject).to be_kind_of SmsAero::Answer
22
+ expect(subject).to be_kind_of SmsAero::Response
26
23
  expect(subject.result).to eq "accepted"
27
24
  end
28
25
  end
@@ -30,10 +27,7 @@ RSpec.describe SmsAero, "#add_phone" do
30
27
  context "via GET:" do
31
28
  let(:url) do
32
29
  "https://gate.smsaero.ru/addphone?" \
33
- "answer=json&" \
34
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
35
- "phone=79093828445&" \
36
- "user=LOGIN"
30
+ "answer=json&password=TOKEN&phone=79093828445&user=LOGIN"
37
31
  end
38
32
 
39
33
  before { settings[:use_post] = false }
@@ -47,10 +41,7 @@ RSpec.describe SmsAero, "#add_phone" do
47
41
  context "not using ssl:" do
48
42
  let(:url) do
49
43
  "http://gate.smsaero.ru/addphone?" \
50
- "answer=json&" \
51
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
52
- "phone=79093828445&" \
53
- "user=LOGIN"
44
+ "answer=json&password=TOKEN&phone=79093828445&user=LOGIN"
54
45
  end
55
46
 
56
47
  before { settings[:use_ssl] = false }
@@ -65,7 +56,7 @@ RSpec.describe SmsAero, "#add_phone" do
65
56
  before { params[:phone] = "1324" }
66
57
 
67
58
  it "raises an exception" do
68
- expect { subject }.to raise_error(TypeError, /1324/)
59
+ expect { subject }.to raise_error(Evil::Client::ValidationError, /1324/)
69
60
  end
70
61
  end
71
62
 
@@ -73,18 +64,14 @@ RSpec.describe SmsAero, "#add_phone" do
73
64
  before { params.delete :phone }
74
65
 
75
66
  it "raises an exception" do
76
- expect { subject }.to raise_error(ArgumentError)
67
+ expect { subject }.to raise_error(Evil::Client::ValidationError)
77
68
  end
78
69
  end
79
70
 
80
71
  context "with valid fname:" do
81
72
  let(:url) do
82
73
  "https://gate.smsaero.ru/addphone?" \
83
- "answer=json&" \
84
- "fname=joe&" \
85
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
86
- "phone=79093828445&" \
87
- "user=LOGIN"
74
+ "answer=json&fname=joe&password=TOKEN&phone=79093828445&user=LOGIN"
88
75
  end
89
76
 
90
77
  before { params[:fname] = "joe" }
@@ -95,22 +82,10 @@ RSpec.describe SmsAero, "#add_phone" do
95
82
  end
96
83
  end
97
84
 
98
- context "with invalid fname:" do
99
- before { params[:fname] = "" }
100
-
101
- it "raises an exception" do
102
- expect { subject }.to raise_error(TypeError)
103
- end
104
- end
105
-
106
85
  context "with valid sname:" do
107
86
  let(:url) do
108
87
  "https://gate.smsaero.ru/addphone?" \
109
- "answer=json&" \
110
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
111
- "phone=79093828445&" \
112
- "sname=joe&" \
113
- "user=LOGIN"
88
+ "answer=json&password=TOKEN&phone=79093828445&sname=joe&user=LOGIN"
114
89
  end
115
90
 
116
91
  before { params[:sname] = "joe" }
@@ -121,22 +96,10 @@ RSpec.describe SmsAero, "#add_phone" do
121
96
  end
122
97
  end
123
98
 
124
- context "with invalid sname:" do
125
- before { params[:sname] = "" }
126
-
127
- it "raises an exception" do
128
- expect { subject }.to raise_error(TypeError)
129
- end
130
- end
131
-
132
99
  context "with valid lname:" do
133
100
  let(:url) do
134
101
  "https://gate.smsaero.ru/addphone?" \
135
- "answer=json&" \
136
- "lname=smith&" \
137
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
138
- "phone=79093828445&" \
139
- "user=LOGIN"
102
+ "answer=json&lname=smith&password=TOKEN&phone=79093828445&user=LOGIN"
140
103
  end
141
104
 
142
105
  before { params[:lname] = "smith" }
@@ -147,22 +110,10 @@ RSpec.describe SmsAero, "#add_phone" do
147
110
  end
148
111
  end
149
112
 
150
- context "with invalid lname:" do
151
- before { params[:lname] = "" }
152
-
153
- it "raises an exception" do
154
- expect { subject }.to raise_error(TypeError)
155
- end
156
- end
157
-
158
113
  context "with valid group:" do
159
114
  let(:url) do
160
115
  "https://gate.smsaero.ru/addphone?" \
161
- "answer=json&" \
162
- "group=qux&" \
163
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
164
- "phone=79093828445&" \
165
- "user=LOGIN"
116
+ "answer=json&group=qux&password=TOKEN&phone=79093828445&user=LOGIN"
166
117
  end
167
118
 
168
119
  before { params[:group] = "qux" }
@@ -177,18 +128,14 @@ RSpec.describe SmsAero, "#add_phone" do
177
128
  before { params[:group] = "" }
178
129
 
179
130
  it "raises an exception" do
180
- expect { subject }.to raise_error(TypeError)
131
+ expect { subject }.to raise_error(Evil::Client::ValidationError)
181
132
  end
182
133
  end
183
134
 
184
135
  context "with valid param:" do
185
136
  let(:url) do
186
137
  "https://gate.smsaero.ru/addphone?" \
187
- "answer=json&" \
188
- "param=qux&" \
189
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
190
- "phone=79093828445&" \
191
- "user=LOGIN"
138
+ "answer=json&param=qux&password=TOKEN&phone=79093828445&user=LOGIN"
192
139
  end
193
140
 
194
141
  before { params[:param] = "qux" }
@@ -199,22 +146,38 @@ RSpec.describe SmsAero, "#add_phone" do
199
146
  end
200
147
  end
201
148
 
202
- context "with invalid param:" do
203
- before { params[:param] = "" }
149
+ context "with valid param2:" do
150
+ let(:url) do
151
+ "https://gate.smsaero.ru/addphone?" \
152
+ "answer=json&param2=qux&password=TOKEN&phone=79093828445&user=LOGIN"
153
+ end
154
+
155
+ before { params[:param2] = "qux" }
156
+
157
+ it "sends a request" do
158
+ subject
159
+ expect(a_request(:post, url)).to have_been_made
160
+ end
161
+ end
162
+
163
+ context "with valid param3:" do
164
+ let(:url) do
165
+ "https://gate.smsaero.ru/addphone?" \
166
+ "answer=json&param3=qux&password=TOKEN&phone=79093828445&user=LOGIN"
167
+ end
204
168
 
205
- it "raises an exception" do
206
- expect { subject }.to raise_error(TypeError)
169
+ before { params[:param3] = "qux" }
170
+
171
+ it "sends a request" do
172
+ subject
173
+ expect(a_request(:post, url)).to have_been_made
207
174
  end
208
175
  end
209
176
 
210
177
  context "with valid bday:" do
211
178
  let(:url) do
212
179
  "https://gate.smsaero.ru/addphone?" \
213
- "answer=json&" \
214
- "bday=1901-08-17&" \
215
- "password=319f4d26e3c536b5dd871bb2c52e3178&" \
216
- "phone=79093828445&" \
217
- "user=LOGIN"
180
+ "answer=json&bday=1901-08-17&password=TOKEN&phone=79093828445&user=LOGIN"
218
181
  end
219
182
 
220
183
  before { params[:bday] = Date.parse("1901-08-17") }
@@ -229,7 +192,7 @@ RSpec.describe SmsAero, "#add_phone" do
229
192
  before { params[:bday] = "foo" }
230
193
 
231
194
  it "raises an exception" do
232
- expect { subject }.to raise_error(TypeError, /foo/)
195
+ expect { subject }.to raise_error(Evil::Client::ValidationError, /foo/)
233
196
  end
234
197
  end
235
198
  end