sms77 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -4
  3. data/.idea/.gitignore +8 -0
  4. data/.idea/inspectionProfiles/Project_Default.xml +6 -0
  5. data/.idea/modules.xml +8 -0
  6. data/.idea/ruby-client.iml +18 -0
  7. data/.idea/vcs.xml +6 -0
  8. data/Gemfile +2 -2
  9. data/LICENSE +20 -20
  10. data/README.md +41 -35
  11. data/Rakefile +5 -5
  12. data/doc/Sms77/Client.html +230 -0
  13. data/doc/Sms77/Contacts/Action.html +131 -0
  14. data/doc/Sms77/Contacts.html +126 -0
  15. data/doc/Sms77/Endpoint.html +187 -0
  16. data/doc/Sms77/Hooks/Action.html +131 -0
  17. data/doc/Sms77/Hooks/EventType.html +146 -0
  18. data/doc/Sms77/Hooks/RequestMethod.html +131 -0
  19. data/doc/Sms77/Hooks/Validator.html +598 -0
  20. data/doc/Sms77/Hooks.html +126 -0
  21. data/doc/Sms77/Journal/Type.html +136 -0
  22. data/doc/Sms77/Journal/Validator.html +394 -0
  23. data/doc/Sms77/Journal.html +126 -0
  24. data/doc/Sms77/Lookup/Type.html +136 -0
  25. data/doc/Sms77/Lookup.html +126 -0
  26. data/doc/Sms77/Resource.html +870 -0
  27. data/doc/Sms77/Resources/Analytics.html +263 -0
  28. data/doc/Sms77/Resources/Balance.html +246 -0
  29. data/doc/Sms77/Resources/Contacts.html +449 -0
  30. data/doc/Sms77/Resources/Hooks.html +457 -0
  31. data/doc/Sms77/Resources/Journal.html +261 -0
  32. data/doc/Sms77/Resources/Lookup.html +540 -0
  33. data/doc/Sms77/Resources/Pricing.html +263 -0
  34. data/doc/Sms77/Resources/Sms.html +261 -0
  35. data/doc/Sms77/Resources/Status.html +261 -0
  36. data/doc/Sms77/Resources/Subaccounts.html +651 -0
  37. data/doc/Sms77/Resources/ValidateForVoice.html +261 -0
  38. data/doc/Sms77/Resources/Voice.html +261 -0
  39. data/doc/Sms77/Resources.html +128 -0
  40. data/doc/Sms77/Sms/Type.html +126 -0
  41. data/doc/Sms77/Sms.html +126 -0
  42. data/doc/Sms77/Subaccounts/Action.html +141 -0
  43. data/doc/Sms77/Subaccounts/Validator.html +490 -0
  44. data/doc/Sms77/Subaccounts.html +126 -0
  45. data/doc/Sms77/Util.html +1033 -0
  46. data/doc/Sms77.html +146 -0
  47. data/doc/_index.html +444 -0
  48. data/doc/class_list.html +51 -0
  49. data/doc/css/common.css +1 -0
  50. data/doc/css/full_list.css +58 -0
  51. data/doc/css/style.css +497 -0
  52. data/doc/file.README.html +112 -0
  53. data/doc/file_list.html +56 -0
  54. data/doc/frames.html +17 -0
  55. data/doc/index.html +112 -0
  56. data/doc/js/app.js +314 -0
  57. data/doc/js/full_list.js +216 -0
  58. data/doc/js/jquery.js +4 -0
  59. data/doc/method_list.html +563 -0
  60. data/doc/top-level-namespace.html +110 -0
  61. data/lib/sms77/client.rb +30 -29
  62. data/lib/sms77/contacts.rb +10 -9
  63. data/lib/sms77/endpoint.rb +17 -15
  64. data/lib/sms77/hooks.rb +67 -64
  65. data/lib/sms77/journal.rb +39 -38
  66. data/lib/sms77/lookup.rb +11 -10
  67. data/lib/sms77/resource.rb +94 -93
  68. data/lib/sms77/resources/analytics.rb +21 -16
  69. data/lib/sms77/resources/balance.rb +19 -15
  70. data/lib/sms77/resources/contacts.rb +38 -25
  71. data/lib/sms77/resources/hooks.rb +40 -29
  72. data/lib/sms77/resources/journal.rb +20 -15
  73. data/lib/sms77/resources/lookup.rb +47 -29
  74. data/lib/sms77/resources/pricing.rb +20 -15
  75. data/lib/sms77/resources/sms.rb +20 -15
  76. data/lib/sms77/resources/status.rb +20 -15
  77. data/lib/sms77/resources/subaccounts.rb +66 -0
  78. data/lib/sms77/resources/validate_for_voice.rb +20 -15
  79. data/lib/sms77/resources/voice.rb +20 -15
  80. data/lib/sms77/sms.rb +9 -8
  81. data/lib/sms77/subaccounts.rb +55 -0
  82. data/lib/sms77/util.rb +68 -67
  83. data/lib/sms77/version.rb +5 -5
  84. data/lib/sms77.rb +6 -6
  85. data/release.sh +4 -7
  86. data/sms77.gemspec +21 -21
  87. data/spec/EnvKeyStore.rb +14 -14
  88. data/spec/matchers.rb +22 -22
  89. data/spec/sms77/balance_spec.rb +12 -12
  90. data/spec/sms77/client_spec.rb +15 -15
  91. data/spec/sms77/contacts_spec.rb +129 -116
  92. data/spec/sms77/hooks_spec.rb +108 -105
  93. data/spec/sms77/instance_spec.rb +22 -20
  94. data/spec/sms77/journal_spec.rb +86 -86
  95. data/spec/sms77/lookup_spec.rb +179 -179
  96. data/spec/sms77/pricing_spec.rb +76 -76
  97. data/spec/sms77/sms_spec.rb +103 -103
  98. data/spec/sms77/subaccounts_spec.rb +121 -0
  99. data/spec/sms77/validate_for_voice_spec.rb +19 -19
  100. data/spec/sms77/voice_spec.rb +51 -51
  101. data/spec/sms77_spec.rb +9 -7
  102. data/spec/spec_helper.rb +53 -53
  103. metadata +75 -17
data/lib/sms77/util.rb CHANGED
@@ -1,68 +1,69 @@
1
- require 'date'
2
-
3
- module Sms77::Util
4
- def self.to_numbered_bool(val)
5
- if true == val
6
- return 1
7
- elsif false == val
8
- return 0
9
- end
10
-
11
- return val
12
- end
13
-
14
- def self.get_namespace_members_by_type(ns, type)
15
- ns.constants.map(&ns.method(:const_get)).grep(type)
16
- end
17
-
18
- def self.get_namespace_classes(ns)
19
- return self.get_namespace_members_by_type(ns, Class)
20
- end
21
-
22
- def self.get_module_constant_values(mod)
23
- mod.constants(false).map &mod.method(:const_get)
24
- end
25
-
26
- def self.is_valid_url?(str)
27
- str =~ URI::regexp
28
- end
29
-
30
- def self.is_valid_datetime?(str)
31
- begin
32
- DateTime.parse(str)
33
- true
34
- rescue ArgumentError
35
- false
36
- end
37
- end
38
-
39
- def self.is_positive_integer?(val)
40
- /\A\d+\z/.match?(val.to_s)
41
- end
42
-
43
- def self.in_module_constants?(needle, mod)
44
- get_module_constant_values(mod).include?(needle)
45
- end
46
-
47
- def self.valid_float?(str)
48
- !!Float(str) rescue false
49
- end
50
-
51
- def self.numeric?(val)
52
- return true if val.is_a?(Integer)
53
-
54
- val.scan(/\D/).empty?
55
- end
56
-
57
- def self.boolean?(val)
58
- [true, false].include? val
59
- end
60
-
61
- def self.nil_or_lengthy_string?(val)
62
- val.nil? || (val.is_a?(String) && val.length)
63
- end
64
-
65
- def self.lengthy_string?(val)
66
- return val.is_a?(String) && !val.empty?
67
- end
1
+ require 'date'
2
+
3
+ # This module exposes general utilities used throughout the library.
4
+ module Sms77::Util
5
+ def self.to_numbered_bool(val)
6
+ if true == val
7
+ return 1
8
+ elsif false == val
9
+ return 0
10
+ end
11
+
12
+ return val
13
+ end
14
+
15
+ def self.get_namespace_members_by_type(ns, type)
16
+ ns.constants.map(&ns.method(:const_get)).grep(type)
17
+ end
18
+
19
+ def self.get_namespace_classes(ns)
20
+ return self.get_namespace_members_by_type(ns, Class)
21
+ end
22
+
23
+ def self.get_module_constant_values(mod)
24
+ mod.constants(false).map &mod.method(:const_get)
25
+ end
26
+
27
+ def self.is_valid_url?(str)
28
+ str =~ URI::regexp
29
+ end
30
+
31
+ def self.is_valid_datetime?(str)
32
+ begin
33
+ DateTime.parse(str)
34
+ true
35
+ rescue ArgumentError
36
+ false
37
+ end
38
+ end
39
+
40
+ def self.is_positive_integer?(val)
41
+ /\A\d+\z/.match?(val.to_s)
42
+ end
43
+
44
+ def self.in_module_constants?(needle, mod)
45
+ get_module_constant_values(mod).include?(needle)
46
+ end
47
+
48
+ def self.valid_float?(str)
49
+ !!Float(str) rescue false
50
+ end
51
+
52
+ def self.numeric?(val)
53
+ return true if val.is_a?(Integer)
54
+
55
+ val.scan(/\D/).empty?
56
+ end
57
+
58
+ def self.boolean?(val)
59
+ [true, false].include? val
60
+ end
61
+
62
+ def self.nil_or_lengthy_string?(val)
63
+ val.nil? || (val.is_a?(String) && val.length)
64
+ end
65
+
66
+ def self.lengthy_string?(val)
67
+ return val.is_a?(String) && !val.empty?
68
+ end
68
69
  end
data/lib/sms77/version.rb CHANGED
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module Sms77
4
- VERSION = '0.4.0'
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Sms77
4
+ VERSION = '0.5.0'
5
+ end
data/lib/sms77.rb CHANGED
@@ -1,6 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- require 'sms77/version'
4
-
5
- module Sms77
6
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'sms77/version'
4
+
5
+ module Sms77
6
+ end
data/release.sh CHANGED
@@ -1,8 +1,5 @@
1
- #!/bin/sh
2
-
3
- gem build --strict
4
-
5
- # MY_VARIABLE=$(find . -name "*.gem" -print0 | xargs -r -0 ls -1 -t | head -1)
6
- # echo "$MY_VARIABLE"
7
-
1
+ #!/bin/sh
2
+
3
+ gem build --strict
4
+
8
5
  gem push "$(find . -name "*.gem" -print0 | xargs -r -0 ls -1 -t | head -1)"
data/sms77.gemspec CHANGED
@@ -1,22 +1,22 @@
1
- lib = File.expand_path('../lib', __FILE__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
-
4
- require 'sms77/version'
5
-
6
- Gem::Specification.new do |spec|
7
- spec.add_development_dependency 'bundler', '~> 2.1'
8
- spec.add_development_dependency 'rake', '~> 13.0'
9
- spec.add_development_dependency 'rspec', '~> 3.9'
10
- spec.add_runtime_dependency 'faraday', '~> 1.1'
11
- spec.author = 'sms77 e.K.'
12
- spec.description = 'Send SMS & Text2Voice messages via the Sms77.io SMS Gateway.'
13
- spec.email = 'support@sms77.io'
14
- spec.files = `git ls-files`.split("\n")
15
- spec.homepage = 'https://github.com/sms77io/ruby-client'
16
- spec.license = 'MIT'
17
- spec.name = 'sms77'
18
- spec.required_ruby_version = '>= 2.6.0'
19
- spec.summary = 'Official API Client for the Sms77.io SMS Gateway'
20
- spec.test_files = Dir['spec/**/*']
21
- spec.version = Sms77::VERSION
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ require 'sms77/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.add_development_dependency 'bundler', '~> 2.1'
8
+ spec.add_development_dependency 'rake', '~> 13.0'
9
+ spec.add_development_dependency 'rspec', '~> 3.9'
10
+ spec.add_runtime_dependency 'faraday', '~> 1.1'
11
+ spec.author = 'seven communications GmbH & Co. KG'
12
+ spec.description = 'Send SMS & text-to-speech messages via the seven SMS Gateway.'
13
+ spec.email = 'support@seven.io'
14
+ spec.files = `git ls-files`.split("\n")
15
+ spec.homepage = 'https://github.com/seven-io/ruby-client'
16
+ spec.license = 'MIT'
17
+ spec.name = 'sms77'
18
+ spec.required_ruby_version = '>= 2.6.0'
19
+ spec.summary = 'Official API Client for the seven SMS Gateway'
20
+ spec.test_files = Dir['spec/**/*']
21
+ spec.version = Sms77::VERSION
22
22
  end
data/spec/EnvKeyStore.rb CHANGED
@@ -1,15 +1,15 @@
1
- class EnvKeyStore
2
- def initialize(key)
3
- @key = "SMS77_TEST_#{key}"
4
-
5
- @store = ENV[@key]
6
- end
7
-
8
- def get(fallback = nil)
9
- @store.nil? ? fallback : @store
10
- end
11
-
12
- def set(val, only_on_nil = false)
13
- @store = val unless only_on_nil
14
- end
1
+ class EnvKeyStore
2
+ def initialize(key)
3
+ @key = "SMS77_TEST_#{key}"
4
+
5
+ @store = ENV[@key]
6
+ end
7
+
8
+ def get(fallback = nil)
9
+ @store.nil? ? fallback : @store
10
+ end
11
+
12
+ def set(val, only_on_nil = false)
13
+ @store = val unless only_on_nil
14
+ end
15
15
  end
data/spec/matchers.rb CHANGED
@@ -1,23 +1,23 @@
1
- RSpec::Matchers.define :be_nil_or_lengthy_string do
2
- match do |val|
3
- Sms77::Util::nil_or_lengthy_string?(val)
4
- end
5
- end
6
-
7
- RSpec::Matchers.define :be_boolean do
8
- match do |val|
9
- Sms77::Util::boolean?(val)
10
- end
11
- end
12
-
13
- RSpec::Matchers.define :be_numeric do
14
- match do |val|
15
- Sms77::Util::numeric?(val)
16
- end
17
- end
18
-
19
- RSpec::Matchers.define :be_lengthy_string do
20
- match do |val|
21
- Sms77::Util::lengthy_string?(val)
22
- end
1
+ RSpec::Matchers.define :be_nil_or_lengthy_string do
2
+ match do |val|
3
+ Sms77::Util::nil_or_lengthy_string?(val)
4
+ end
5
+ end
6
+
7
+ RSpec::Matchers.define :be_boolean do
8
+ match do |val|
9
+ Sms77::Util::boolean?(val)
10
+ end
11
+ end
12
+
13
+ RSpec::Matchers.define :be_numeric do
14
+ match do |val|
15
+ Sms77::Util::numeric?(val)
16
+ end
17
+ end
18
+
19
+ RSpec::Matchers.define :be_lengthy_string do
20
+ match do |val|
21
+ Sms77::Util::lengthy_string?(val)
22
+ end
23
23
  end
@@ -1,12 +1,12 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'sms77/resources/balance'
5
-
6
- RSpec.describe Sms77, 'balance' do
7
- it 'returns the account balance' do
8
- helper = Helper.new(Sms77::Resources::Balance)
9
- balance = helper.request(helper.resource.method(:retrieve), 155.55)
10
- expect(balance).to be_a(Float)
11
- end
12
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/resources/balance'
5
+
6
+ RSpec.describe Sms77, 'balance' do
7
+ it 'returns the account balance' do
8
+ helper = Helper.new(Sms77::Resources::Balance)
9
+ balance = helper.request(helper.resource.method(:retrieve), 155.55)
10
+ expect(balance).to be_a(Float)
11
+ end
12
+ end
@@ -1,15 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- require 'sms77/client'
4
- require 'sms77/resource'
5
- require 'spec_helper'
6
-
7
- RSpec.describe Sms77, 'client' do
8
- it 'should contain all resource modules' do
9
- client = Sms77::Client.new(Sms77::Resource.new('x'))
10
-
11
- client.instance_variables.each do |var|
12
- expect(Sms77::Resources.const_get(client.instance_variable_get(var).class.name)).to be_truthy
13
- end
14
- end
15
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/client'
5
+ require 'sms77/resource'
6
+
7
+ RSpec.describe Sms77, 'client' do
8
+ it 'should contain all resource modules' do
9
+ client = Sms77::Client.new(Sms77::Resource.new('x'))
10
+
11
+ client.instance_variables.each do |var|
12
+ expect(Sms77::Resources.const_get(client.instance_variable_get(var).class.name)).to be_truthy
13
+ end
14
+ end
15
+ end
@@ -1,116 +1,129 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'sms77/contacts'
5
- require 'sms77/resources/contacts'
6
-
7
- RSpec.describe Sms77, 'contacts' do
8
- $new_contact_id = nil
9
- HELPER = Helper.new(Sms77::Resources::Contacts)
10
-
11
- def assert_new(response_body)
12
- if response_body.is_a?(String)
13
- code, $new_contact_id = response_body.split("\n")
14
- $new_contact_id = $new_contact_id.to_i
15
- else
16
- code = response_body[:return]
17
- $new_contact_id = response_body[:id]
18
- end
19
-
20
- expect(code).to be_numeric
21
- expect($new_contact_id).to be_an_instance_of(Integer)
22
- end
23
-
24
- def assert_contact(contact)
25
- if contact.is_a?(String)
26
- id, name, number = contact.split(';')
27
-
28
- id = id.gsub('"', '')
29
- name = name.gsub('"', '')
30
- number = number.gsub('"', '')
31
- else
32
- id = contact[:ID]
33
- name = contact[:Name]
34
- number = contact[:Number]
35
- end
36
-
37
- expect(id).to be_numeric
38
- expect(name).to be_an_instance_of(String)
39
- expect(number.sub('+', '')).to be_numeric
40
- end
41
-
42
- it 'returns all contacts as CSV' do
43
- stub = <<~CSV
44
- "4848436";"";""
45
- "4848437";"";""
46
- "4848433";"Alf Albert";"007"
47
- "3172517";"BNN Nolte";"004911112"
48
- "4848434";"Harry Harald";"0049123456"
49
- "4848431";"Karl Konrad";"00123456"
50
- "4848432";"Petra Pan";"00513414"
51
- "2925186";"Tom Tester";"004901234567890"
52
- CSV
53
-
54
- body = HELPER.request(HELPER.resource.method(:read), stub)
55
-
56
- expect(body).to be_a(String)
57
-
58
- body.split("\n").each do |contact|
59
- assert_contact(contact)
60
- end
61
- end
62
-
63
- it 'returns all contacts as JSON' do
64
- stub = [
65
- { ID: '4848436', Name: '', Number: '' },
66
- { ID: '4848437', Name: '', Number: '' },
67
- { ID: '4848433', Name: 'Alf Albert', Number: '007' },
68
- { ID: '3172517', Name: 'BNN Nolte', Number: '004911112' },
69
- { ID: '4848434', Name: 'Harry Harald', Number: '0049123456' },
70
- { ID: '4848431', Name: 'Karl Konrad', Number: '00123456' },
71
- { ID: '4848432', Name: 'Petra Pan', Number: '00513414' },
72
- { ID: '2925186', Name: 'Tom Tester', Number: '004901234567890' }
73
- ]
74
-
75
- body = HELPER.request(HELPER.resource.method(:read), stub, { json: true })
76
-
77
- expect(body).to be_a(Array)
78
-
79
- body.each do |contact|
80
- assert_contact(contact)
81
- end
82
- end
83
-
84
- it 'creates a contact and returns its ID as TEXT' do
85
- stub = <<~TEXT
86
- 152
87
- 4868400
88
- TEXT
89
-
90
- body = HELPER.request(HELPER.resource.method(:write), stub, {})
91
-
92
- expect(body).to be_a(String)
93
-
94
- assert_new(body)
95
- end
96
-
97
- it 'deletes a contact with given ID and return code' do
98
- expect(HELPER.request(HELPER.resource.method(:delete), 152, { id: $new_contact_id })).to be_a(Integer)
99
- end
100
-
101
- it 'creates a contact and returns its ID as JSON' do
102
- body = HELPER.request(HELPER.resource.method(:write), { id: 4868401, return: '152' }, { json: true })
103
-
104
- expect(body).to be_a(Hash)
105
-
106
- assert_new(body)
107
- end
108
-
109
- it 'deletes a contact with given ID and return code as JSON' do
110
- body = HELPER.request(
111
- HELPER.resource.method(:delete), { return: '152' }, { id: $new_contact_id, json: true })
112
-
113
- expect(body).to be_a(Hash)
114
- expect(body[:return]).to be_a(String)
115
- end
116
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/contacts'
5
+ require 'sms77/resources/contacts'
6
+
7
+ RSpec.describe Sms77, 'contacts' do
8
+ $new_contact_id = nil
9
+
10
+ def assert_new(response_body)
11
+ if response_body.is_a?(String)
12
+ code, $new_contact_id = response_body.split("\n")
13
+ $new_contact_id = $new_contact_id.to_i
14
+ else
15
+ code = response_body[:return]
16
+ $new_contact_id = response_body[:id]
17
+ end
18
+
19
+ expect(code).to be_numeric
20
+ expect($new_contact_id).to be_an_instance_of(Integer)
21
+ end
22
+
23
+ def assert_contact(contact)
24
+ if contact.is_a?(String)
25
+ id, name, number = contact.split(';')
26
+
27
+ id = id.gsub('"', '')
28
+ name = name.gsub('"', '')
29
+ number = number.gsub('"', '')
30
+ else
31
+ id = contact[:ID]
32
+ name = contact[:Name]
33
+ number = contact[:Number]
34
+ end
35
+
36
+ expect(id).to be_numeric
37
+ expect(name).to be_an_instance_of(String)
38
+ expect(number.sub('+', '')).to be_numeric
39
+ end
40
+
41
+ it 'returns all contacts as CSV' do
42
+ stub = <<~CSV
43
+ "4848436";"";""
44
+ "4848437";"";""
45
+ "4848433";"Alf Albert";"007"
46
+ "3172517";"BNN Nolte";"004911112"
47
+ "4848434";"Harry Harald";"0049123456"
48
+ "4848431";"Karl Konrad";"00123456"
49
+ "4848432";"Petra Pan";"00513414"
50
+ "2925186";"Tom Tester";"004901234567890"
51
+ CSV
52
+
53
+ helper = Helper.new(Sms77::Resources::Contacts)
54
+ body = helper.request(helper.resource.method(:read), stub)
55
+
56
+ expect(body).to be_a(String)
57
+
58
+ body.split("\n").each do |contact|
59
+ assert_contact(contact)
60
+ end
61
+ end
62
+
63
+ it 'returns all contacts as JSON' do
64
+ stub = [
65
+ { ID: '4848436', Name: '', Number: '' },
66
+ { ID: '4848437', Name: '', Number: '' },
67
+ { ID: '4848433', Name: 'Alf Albert', Number: '007' },
68
+ { ID: '3172517', Name: 'BNN Nolte', Number: '004911112' },
69
+ { ID: '4848434', Name: 'Harry Harald', Number: '0049123456' },
70
+ { ID: '4848431', Name: 'Karl Konrad', Number: '00123456' },
71
+ { ID: '4848432', Name: 'Petra Pan', Number: '00513414' },
72
+ { ID: '2925186', Name: 'Tom Tester', Number: '004901234567890' }
73
+ ]
74
+
75
+ helper = Helper.new(Sms77::Resources::Contacts)
76
+ body = helper.request(helper.resource.method(:read), stub, { json: true })
77
+
78
+ expect(body).to be_a(Array)
79
+
80
+ body.each do |contact|
81
+ assert_contact(contact)
82
+ end
83
+ end
84
+
85
+ it 'creates a contact and returns its ID as TEXT' do
86
+ stub = <<~TEXT
87
+ 152
88
+ 4868400
89
+ TEXT
90
+
91
+ helper = Helper.new(Sms77::Resources::Contacts)
92
+ body = helper.request(helper.resource.method(:write), stub, {})
93
+
94
+ expect(body).to be_a(String)
95
+
96
+ assert_new(body)
97
+ end
98
+
99
+ it 'deletes a contact with given ID and return code' do
100
+ helper = Helper.new(Sms77::Resources::Contacts)
101
+ expect(helper.request(helper.resource.method(:delete), 152, { id: $new_contact_id })).to be_a(Integer)
102
+ end
103
+
104
+ it 'creates a contact and returns its ID as JSON' do
105
+ helper = Helper.new(Sms77::Resources::Contacts)
106
+ body = helper.request(helper.resource.method(:write), { id: 4868401, return: '152' }, { json: true })
107
+
108
+ expect(body).to be_a(Hash)
109
+
110
+ assert_new(body)
111
+ end
112
+
113
+ it 'deletes a contact with given ID and return code as JSON' do
114
+ helper = Helper.new(Sms77::Resources::Contacts)
115
+ body = helper.request(
116
+ helper.resource.method(:delete),
117
+ {
118
+ return: '152'
119
+ },
120
+ {
121
+ id: $new_contact_id,
122
+ json: true,
123
+ }
124
+ )
125
+
126
+ expect(body).to be_a(Hash)
127
+ expect(body[:return]).to be_a(String)
128
+ end
129
+ end