sms_aero 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +7 -0
  3. data/.gitignore +9 -0
  4. data/.rspec +2 -0
  5. data/.rubocop.yml +12 -0
  6. data/.travis.yml +17 -0
  7. data/Gemfile +12 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +126 -0
  10. data/Rakefile +6 -0
  11. data/lib/sms_aero.rb +55 -0
  12. data/lib/sms_aero/models/answer.rb +8 -0
  13. data/lib/sms_aero/models/sms.rb +15 -0
  14. data/lib/sms_aero/models/tariff.rb +8 -0
  15. data/lib/sms_aero/operations/add_blacklist.rb +11 -0
  16. data/lib/sms_aero/operations/add_group.rb +11 -0
  17. data/lib/sms_aero/operations/add_phone.rb +17 -0
  18. data/lib/sms_aero/operations/check_balance.rb +11 -0
  19. data/lib/sms_aero/operations/check_groups.rb +12 -0
  20. data/lib/sms_aero/operations/check_senders.rb +15 -0
  21. data/lib/sms_aero/operations/check_sending.rb +11 -0
  22. data/lib/sms_aero/operations/check_sign.rb +15 -0
  23. data/lib/sms_aero/operations/check_status.rb +11 -0
  24. data/lib/sms_aero/operations/check_tariff.rb +12 -0
  25. data/lib/sms_aero/operations/delete_group.rb +11 -0
  26. data/lib/sms_aero/operations/delete_phone.rb +12 -0
  27. data/lib/sms_aero/operations/send_sms.rb +17 -0
  28. data/lib/sms_aero/operations/send_to_group.rb +15 -0
  29. data/lib/sms_aero/types/birthday.rb +20 -0
  30. data/lib/sms_aero/types/channel.rb +4 -0
  31. data/lib/sms_aero/types/digital.rb +8 -0
  32. data/lib/sms_aero/types/filled_string.rb +3 -0
  33. data/lib/sms_aero/types/future.rb +16 -0
  34. data/lib/sms_aero/types/phone.rb +12 -0
  35. data/lib/sms_aero/types/sign_status.rb +9 -0
  36. data/sms_aero.gemspec +23 -0
  37. data/spec/sms_aero/operations/add_blacklist_spec.rb +88 -0
  38. data/spec/sms_aero/operations/add_group_spec.rb +88 -0
  39. data/spec/sms_aero/operations/add_phone_spec.rb +221 -0
  40. data/spec/sms_aero/operations/check_balance_spec.rb +85 -0
  41. data/spec/sms_aero/operations/check_groups_spec.rb +72 -0
  42. data/spec/sms_aero/operations/check_senders_spec.rb +98 -0
  43. data/spec/sms_aero/operations/check_sending_spec.rb +88 -0
  44. data/spec/sms_aero/operations/check_sign_spec.rb +87 -0
  45. data/spec/sms_aero/operations/check_status_spec.rb +88 -0
  46. data/spec/sms_aero/operations/check_tariff_spec.rb +72 -0
  47. data/spec/sms_aero/operations/delete_group_spec.rb +88 -0
  48. data/spec/sms_aero/operations/delete_phone_spec.rb +118 -0
  49. data/spec/sms_aero/operations/send_sms_spec.rb +179 -0
  50. data/spec/sms_aero/operations/send_to_group_spec.rb +171 -0
  51. data/spec/sms_aero/types/birthday_spec.rb +33 -0
  52. data/spec/sms_aero/types/channel_spec.rb +19 -0
  53. data/spec/sms_aero/types/digital_spec.rb +15 -0
  54. data/spec/sms_aero/types/future_spec.rb +38 -0
  55. data/spec/sms_aero/types/phone_spec.rb +21 -0
  56. data/spec/sms_aero/types/sign_status_spec.rb +19 -0
  57. data/spec/spec_helper.rb +20 -0
  58. metadata +205 -0
@@ -0,0 +1,171 @@
1
+ RSpec.describe SmsAero, "#send_to_group" do
2
+ let(:settings) { { user: "BAZ", password: "QUX" } }
3
+ let(:client) { described_class.new(settings) }
4
+ let(:params) { { text: "Hi" } }
5
+ let(:answer) { { id: 3898, result: "accepted" } }
6
+
7
+ before { stub_request(:any, //).to_return(body: answer.to_json) }
8
+ subject { client.send_to_group(params) }
9
+
10
+ context "using ssl via POST:" do
11
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
12
+ let(:query) do
13
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=BAZ"
14
+ end
15
+
16
+ it "sends a request" do
17
+ subject
18
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
19
+ end
20
+
21
+ it "returns success" do
22
+ expect(subject).to be_kind_of SmsAero::Answer
23
+ expect(subject.result).to eq "accepted"
24
+ end
25
+ end
26
+
27
+ context "via GET:" do
28
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
29
+ let(:query) do
30
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=BAZ"
31
+ end
32
+
33
+ before { settings[:use_post] = false }
34
+
35
+ it "sends a request" do
36
+ subject
37
+ expect(a_request(:get, "#{host}?#{query}")).to have_been_made
38
+ end
39
+ end
40
+
41
+ context "not using ssl:" do
42
+ let(:host) { "http://gate.smsaero.ru/sendtogroup" }
43
+ let(:query) do
44
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=BAZ"
45
+ end
46
+
47
+ before { settings[:use_ssl] = false }
48
+
49
+ it "sends a request" do
50
+ subject
51
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
52
+ end
53
+ end
54
+
55
+ context "with custom user:" do
56
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
57
+ let(:query) do
58
+ "answer=json&group=all&password=QUX&text=Hi&type=2&user=USER"
59
+ end
60
+
61
+ before { params[:user] = "USER" }
62
+
63
+ it "sends a request" do
64
+ subject
65
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
66
+ end
67
+ end
68
+
69
+ context "with custom password:" do
70
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
71
+ let(:query) do
72
+ "answer=json&group=all&password=PSWD&text=Hi&type=2&user=BAZ"
73
+ end
74
+
75
+ before { params[:password] = "PSWD" }
76
+
77
+ it "sends a request" do
78
+ subject
79
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
80
+ end
81
+ end
82
+
83
+ context "with custom group:" do
84
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
85
+ let(:query) do
86
+ "answer=json&group=foo&password=QUX&text=Hi&type=2&user=BAZ"
87
+ end
88
+
89
+ before { params[:group] = "foo" }
90
+
91
+ it "sends a request" do
92
+ subject
93
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
94
+ end
95
+ end
96
+
97
+ context "with invalid group:" do
98
+ before { params[:group] = "" }
99
+
100
+ it "raises an exception" do
101
+ expect { subject }.to raise_error(TypeError)
102
+ end
103
+ end
104
+
105
+ context "with valid date:" do
106
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
107
+ let(:query) do
108
+ "answer=json&group=all&date=4122144000" \
109
+ "&password=QUX&text=Hi&type=2&user=BAZ"
110
+ end
111
+
112
+ before { params[:date] = DateTime.parse("2100-08-17 00:00:00 UTC") }
113
+
114
+ it "sends a request" do
115
+ subject
116
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
117
+ end
118
+ end
119
+
120
+ context "with old date:" do
121
+ before { params[:date] = (Date.today - 1) }
122
+
123
+ it "raises an exception" do
124
+ expect { subject }.to raise_error(TypeError)
125
+ end
126
+ end
127
+
128
+ context "with invalid date:" do
129
+ before { params[:date] = "foo" }
130
+
131
+ it "raises an exception" do
132
+ expect { subject }.to raise_error(TypeError, /foo/)
133
+ end
134
+ end
135
+
136
+ context "with digital channel:" do
137
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
138
+ let(:query) do
139
+ "answer=json&group=all&digital=1&password=QUX&text=Hi&user=BAZ"
140
+ end
141
+
142
+ before { params[:digital] = true }
143
+
144
+ it "sends a request" do
145
+ subject
146
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
147
+ end
148
+ end
149
+
150
+ context "with valid type:" do
151
+ let(:host) { "https://gate.smsaero.ru/sendtogroup" }
152
+ let(:query) do
153
+ "answer=json&group=all&password=QUX&text=Hi&type=3&user=BAZ"
154
+ end
155
+
156
+ before { params[:type] = 3 }
157
+
158
+ it "sends a request" do
159
+ subject
160
+ expect(a_request(:post, "#{host}?#{query}")).to have_been_made
161
+ end
162
+ end
163
+
164
+ context "with invalid type:" do
165
+ before { params[:type] = 11 }
166
+
167
+ it "raises an exception" do
168
+ expect { subject }.to raise_error(TypeError, /11/)
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Birthday do
4
+ subject { described_class[source] }
5
+
6
+ context "date:" do
7
+ let(:source) { Date.parse "1901-08-17" }
8
+ it { is_expected.to eq "1901-08-17" }
9
+ end
10
+
11
+ context "datetime:" do
12
+ let(:source) { DateTime.parse "1901-08-17 10:00:00" }
13
+ it { is_expected.to eq "1901-08-17" }
14
+ end
15
+
16
+ context "time:" do
17
+ let(:source) { Time.parse "1901-08-17 10:00:00" }
18
+ it { is_expected.to eq "1901-08-17" }
19
+ end
20
+
21
+ context "parceable string:" do
22
+ let(:source) { "1901/08/17" }
23
+ it { is_expected.to eq "1901-08-17" }
24
+ end
25
+
26
+ context "imparceable string:" do
27
+ let(:source) { "Foobar" }
28
+
29
+ it "fails" do
30
+ expect { subject }.to raise_error(TypeError, /Foobar/)
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Channel do
4
+ context "valid code:" do
5
+ let(:codes) { [1, 2, 3, 4, 6] }
6
+
7
+ it "returns a code" do
8
+ codes.each { |code| expect(described_class[code]).to eq code }
9
+ end
10
+ end
11
+
12
+ context "invalid code:" do
13
+ let(:code) { 5 }
14
+
15
+ it "fails" do
16
+ expect { described_class[code] }.to raise_error(StandardError, /5/)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Digital do
4
+ subject { described_class[source] }
5
+
6
+ context "false:" do
7
+ let(:source) { false }
8
+ it { is_expected.to eq 0 }
9
+ end
10
+
11
+ context "true:" do
12
+ let(:source) { true }
13
+ it { is_expected.to eq 1 }
14
+ end
15
+ end
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Future do
4
+ subject { described_class[source] }
5
+
6
+ context "time in future:" do
7
+ let(:source) { Time.now + 3600 }
8
+
9
+ it "returns UNIX time in seconds" do
10
+ expect(subject).to eq source.to_i
11
+ end
12
+ end
13
+
14
+ context "parseable string for time in future:" do
15
+ let(:time) { Time.now + 3600 }
16
+ let(:source) { time.strftime "%Y-%m-%d %H:%M:%S" }
17
+
18
+ it "returns UNIX time in seconds" do
19
+ expect(subject).to eq time.to_i
20
+ end
21
+ end
22
+
23
+ context "time in the past:" do
24
+ let(:source) { Time.now - 3600 }
25
+
26
+ it "fails" do
27
+ expect { subject }.to raise_error(TypeError)
28
+ end
29
+ end
30
+
31
+ context "not a time:" do
32
+ let(:source) { "foobar" }
33
+
34
+ it "fails" do
35
+ expect { subject }.to raise_error(TypeError, /foobar/)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::Phone do
4
+ subject { described_class[source] }
5
+
6
+ context "valid phone:" do
7
+ let(:source) { "+007 (203) 899-899-0" }
8
+
9
+ it "returns formatted phone" do
10
+ expect(subject).to eq "72038998990"
11
+ end
12
+ end
13
+
14
+ context "invalid phone:" do
15
+ let(:source) { "+0 (111)" }
16
+
17
+ it "fails" do
18
+ expect { subject }.to raise_error(StandardError, /111/)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe SmsAero::Types::SignStatus do
4
+ context "valid status:" do
5
+ let(:values) { %w(accepted approved rejected pending) }
6
+
7
+ it "returns a status" do
8
+ values.each { |value| expect(described_class[value]).to eq value }
9
+ end
10
+ end
11
+
12
+ context "invalid status:" do
13
+ let(:value) { "wrong" }
14
+
15
+ it "fails" do
16
+ expect { described_class[value] }.to raise_error(StandardError, /wrong/)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ begin
2
+ require "pry"
3
+ rescue LoadError
4
+ nil
5
+ end
6
+
7
+ require "sms_aero"
8
+ require "dry-types"
9
+ require "webmock/rspec"
10
+
11
+ RSpec.configure do |config|
12
+ config.order = :random
13
+ config.filter_run focus: true
14
+ config.run_all_when_everything_filtered = true
15
+
16
+ config.around(:each) do |example|
17
+ stub_request(:any, //)
18
+ example.run
19
+ end
20
+ end
metadata ADDED
@@ -0,0 +1,205 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sms_aero
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Kozin (nepalez)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-11-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dry-types
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.9.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: evil-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.3.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.42'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.42'
83
+ - !ruby/object:Gem::Dependency
84
+ name: webmock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.1'
97
+ description:
98
+ email: andrew.kozin@gmail.com
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files:
102
+ - README.md
103
+ files:
104
+ - ".codeclimate.yml"
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".rubocop.yml"
108
+ - ".travis.yml"
109
+ - Gemfile
110
+ - LICENSE.txt
111
+ - README.md
112
+ - Rakefile
113
+ - lib/sms_aero.rb
114
+ - lib/sms_aero/models/answer.rb
115
+ - lib/sms_aero/models/sms.rb
116
+ - lib/sms_aero/models/tariff.rb
117
+ - lib/sms_aero/operations/add_blacklist.rb
118
+ - lib/sms_aero/operations/add_group.rb
119
+ - lib/sms_aero/operations/add_phone.rb
120
+ - lib/sms_aero/operations/check_balance.rb
121
+ - lib/sms_aero/operations/check_groups.rb
122
+ - lib/sms_aero/operations/check_senders.rb
123
+ - lib/sms_aero/operations/check_sending.rb
124
+ - lib/sms_aero/operations/check_sign.rb
125
+ - lib/sms_aero/operations/check_status.rb
126
+ - lib/sms_aero/operations/check_tariff.rb
127
+ - lib/sms_aero/operations/delete_group.rb
128
+ - lib/sms_aero/operations/delete_phone.rb
129
+ - lib/sms_aero/operations/send_sms.rb
130
+ - lib/sms_aero/operations/send_to_group.rb
131
+ - lib/sms_aero/types/birthday.rb
132
+ - lib/sms_aero/types/channel.rb
133
+ - lib/sms_aero/types/digital.rb
134
+ - lib/sms_aero/types/filled_string.rb
135
+ - lib/sms_aero/types/future.rb
136
+ - lib/sms_aero/types/phone.rb
137
+ - lib/sms_aero/types/sign_status.rb
138
+ - sms_aero.gemspec
139
+ - spec/sms_aero/operations/add_blacklist_spec.rb
140
+ - spec/sms_aero/operations/add_group_spec.rb
141
+ - spec/sms_aero/operations/add_phone_spec.rb
142
+ - spec/sms_aero/operations/check_balance_spec.rb
143
+ - spec/sms_aero/operations/check_groups_spec.rb
144
+ - spec/sms_aero/operations/check_senders_spec.rb
145
+ - spec/sms_aero/operations/check_sending_spec.rb
146
+ - spec/sms_aero/operations/check_sign_spec.rb
147
+ - spec/sms_aero/operations/check_status_spec.rb
148
+ - spec/sms_aero/operations/check_tariff_spec.rb
149
+ - spec/sms_aero/operations/delete_group_spec.rb
150
+ - spec/sms_aero/operations/delete_phone_spec.rb
151
+ - spec/sms_aero/operations/send_sms_spec.rb
152
+ - spec/sms_aero/operations/send_to_group_spec.rb
153
+ - spec/sms_aero/types/birthday_spec.rb
154
+ - spec/sms_aero/types/channel_spec.rb
155
+ - spec/sms_aero/types/digital_spec.rb
156
+ - spec/sms_aero/types/future_spec.rb
157
+ - spec/sms_aero/types/phone_spec.rb
158
+ - spec/sms_aero/types/sign_status_spec.rb
159
+ - spec/spec_helper.rb
160
+ homepage: https://github.com/nepalez/sms_aero
161
+ licenses:
162
+ - MIT
163
+ metadata: {}
164
+ post_install_message:
165
+ rdoc_options: []
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: '2.2'
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ requirements: []
179
+ rubyforge_project:
180
+ rubygems_version: 2.6.4
181
+ signing_key:
182
+ specification_version: 4
183
+ summary: HTTP(s) client to SMS Aero API
184
+ test_files:
185
+ - spec/sms_aero/operations/add_blacklist_spec.rb
186
+ - spec/sms_aero/operations/add_group_spec.rb
187
+ - spec/sms_aero/operations/add_phone_spec.rb
188
+ - spec/sms_aero/operations/check_balance_spec.rb
189
+ - spec/sms_aero/operations/check_groups_spec.rb
190
+ - spec/sms_aero/operations/check_senders_spec.rb
191
+ - spec/sms_aero/operations/check_sending_spec.rb
192
+ - spec/sms_aero/operations/check_sign_spec.rb
193
+ - spec/sms_aero/operations/check_status_spec.rb
194
+ - spec/sms_aero/operations/check_tariff_spec.rb
195
+ - spec/sms_aero/operations/delete_group_spec.rb
196
+ - spec/sms_aero/operations/delete_phone_spec.rb
197
+ - spec/sms_aero/operations/send_sms_spec.rb
198
+ - spec/sms_aero/operations/send_to_group_spec.rb
199
+ - spec/sms_aero/types/birthday_spec.rb
200
+ - spec/sms_aero/types/channel_spec.rb
201
+ - spec/sms_aero/types/digital_spec.rb
202
+ - spec/sms_aero/types/future_spec.rb
203
+ - spec/sms_aero/types/phone_spec.rb
204
+ - spec/sms_aero/types/sign_status_spec.rb
205
+ - spec/spec_helper.rb