sms77 0.4.0 → 0.5.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.
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