seven_api 0.5.0 → 0.6.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 (90) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/ruby-client.iml +16 -4
  3. data/README.md +2 -2
  4. data/doc/{Sms77 → SevenApi}/Client.html +222 -222
  5. data/doc/{Sms77 → SevenApi}/Contacts/Action.html +130 -130
  6. data/doc/{Sms77 → SevenApi}/Contacts.html +125 -125
  7. data/doc/{Sms77 → SevenApi}/Endpoint.html +186 -186
  8. data/doc/{Sms77 → SevenApi}/Hooks/Action.html +130 -130
  9. data/doc/{Sms77 → SevenApi}/Hooks/EventType.html +145 -145
  10. data/doc/{Sms77 → SevenApi}/Hooks/RequestMethod.html +130 -130
  11. data/doc/{Sms77 → SevenApi}/Hooks/Validator.html +582 -582
  12. data/doc/{Sms77 → SevenApi}/Hooks.html +125 -125
  13. data/doc/{Sms77 → SevenApi}/Journal/Type.html +135 -135
  14. data/doc/{Sms77 → SevenApi}/Journal/Validator.html +380 -380
  15. data/doc/{Sms77 → SevenApi}/Journal.html +125 -125
  16. data/doc/{Sms77 → SevenApi}/Lookup/Type.html +135 -135
  17. data/doc/{Sms77 → SevenApi}/Lookup.html +125 -125
  18. data/doc/{Sms77 → SevenApi}/Resource.html +857 -857
  19. data/doc/{Sms77 → SevenApi}/Resources/Analytics.html +260 -260
  20. data/doc/{Sms77 → SevenApi}/Resources/Balance.html +243 -243
  21. data/doc/{Sms77 → SevenApi}/Resources/Contacts.html +445 -445
  22. data/doc/{Sms77 → SevenApi}/Resources/Hooks.html +453 -453
  23. data/doc/{Sms77 → SevenApi}/Resources/Journal.html +258 -258
  24. data/doc/{Sms77 → SevenApi}/Resources/Lookup.html +535 -535
  25. data/doc/{Sms77 → SevenApi}/Resources/Pricing.html +260 -260
  26. data/doc/{Sms77 → SevenApi}/Resources/Sms.html +258 -258
  27. data/doc/{Sms77 → SevenApi}/Resources/Status.html +258 -258
  28. data/doc/{Sms77 → SevenApi}/Resources/Subaccounts.html +645 -645
  29. data/doc/{Sms77 → SevenApi}/Resources/ValidateForVoice.html +258 -258
  30. data/doc/{Sms77 → SevenApi}/Resources/Voice.html +258 -258
  31. data/doc/SevenApi/Resources.html +128 -0
  32. data/doc/{Sms77 → SevenApi}/Sms/Type.html +125 -125
  33. data/doc/{Sms77 → SevenApi}/Sms.html +125 -125
  34. data/doc/{Sms77 → SevenApi}/Subaccounts/Action.html +140 -140
  35. data/doc/SevenApi/Subaccounts/Validator.html +490 -0
  36. data/doc/{Sms77 → SevenApi}/Subaccounts.html +125 -125
  37. data/doc/{Sms77 → SevenApi}/Util.html +993 -993
  38. data/doc/{Sms77.html → SevenApi.html} +145 -145
  39. data/doc/_index.html +443 -443
  40. data/doc/class_list.html +51 -51
  41. data/doc/css/full_list.css +58 -58
  42. data/doc/css/style.css +497 -497
  43. data/doc/file.README.html +110 -111
  44. data/doc/file_list.html +56 -56
  45. data/doc/frames.html +17 -17
  46. data/doc/index.html +110 -111
  47. data/doc/js/app.js +314 -314
  48. data/doc/js/full_list.js +216 -216
  49. data/doc/js/jquery.js +3 -3
  50. data/doc/method_list.html +563 -563
  51. data/doc/top-level-namespace.html +109 -109
  52. data/lib/seven_api/client.rb +2 -0
  53. data/lib/seven_api/contacts.rb +0 -5
  54. data/lib/seven_api/endpoint.rb +5 -0
  55. data/lib/seven_api/hooks.rb +1 -0
  56. data/lib/seven_api/lookup.rb +1 -0
  57. data/lib/seven_api/numbers.rb +9 -0
  58. data/lib/seven_api/paginated.rb +10 -0
  59. data/lib/seven_api/rcs.rb +9 -0
  60. data/lib/seven_api/resource.rb +8 -3
  61. data/lib/seven_api/resources/analytics.rb +38 -5
  62. data/lib/seven_api/resources/balance.rb +2 -2
  63. data/lib/seven_api/resources/contacts.rb +36 -18
  64. data/lib/seven_api/resources/groups.rb +57 -0
  65. data/lib/seven_api/resources/hooks.rb +1 -1
  66. data/lib/seven_api/resources/journal.rb +1 -1
  67. data/lib/seven_api/resources/lookup.rb +36 -20
  68. data/lib/seven_api/resources/numbers.rb +70 -0
  69. data/lib/seven_api/resources/pricing.rb +1 -1
  70. data/lib/seven_api/resources/rcs.rb +39 -0
  71. data/lib/seven_api/resources/sms.rb +1 -1
  72. data/lib/seven_api/resources/status.rb +1 -1
  73. data/lib/seven_api/resources/subaccounts.rb +5 -5
  74. data/lib/seven_api/resources/validate_for_voice.rb +1 -1
  75. data/lib/seven_api/resources/voice.rb +1 -1
  76. data/lib/seven_api/version.rb +1 -1
  77. data/seven_api.gemspec +5 -5
  78. data/spec/seven_api/analytics_spec.rb +49 -0
  79. data/spec/seven_api/balance_spec.rb +8 -2
  80. data/spec/seven_api/contacts_spec.rb +52 -81
  81. data/spec/seven_api/groups_spec.rb +74 -0
  82. data/spec/seven_api/lookup_spec.rb +51 -33
  83. data/spec/seven_api/numbers_spec.rb +135 -0
  84. data/spec/seven_api/rcs_spec.rb +99 -0
  85. data/spec/seven_api/sms_spec.rb +2 -2
  86. data/spec/seven_api/voice_spec.rb +2 -2
  87. data/spec/spec_helper.rb +8 -17
  88. metadata +64 -50
  89. data/doc/Sms77/Resources.html +0 -128
  90. data/doc/Sms77/Subaccounts/Validator.html +0 -490
@@ -7,12 +7,10 @@ require 'seven_api/resources/lookup'
7
7
  require 'json'
8
8
 
9
9
  RSpec.describe SevenApi, 'lookup' do
10
- def request(type, stub, extra_args = {})
11
- helper = Helper.new(SevenApi::Resources::Lookup)
12
- helper.request(
13
- helper.resource.method(type),
14
- stub,
15
- { number: '+491771783130' }.merge(extra_args))
10
+ helper = Helper.new(SevenApi::Resources::Lookup)
11
+
12
+ def request(type, stub, params = { number: '+491771783130' })
13
+ helper.request(helper.resource.method(type), stub, params)
16
14
  end
17
15
 
18
16
  it 'misses number to lookup' do
@@ -27,14 +25,14 @@ RSpec.describe SevenApi, 'lookup' do
27
25
  network_type: nil,
28
26
  success: false
29
27
  }
30
-
31
- res = request(SevenApi::Lookup::Type::FORMAT, stub, { number: '' })
28
+ path = SevenApi::Resources::Lookup.const_get('PATHS')[:format]
29
+ res = helper.request(helper.resource.method(:format), stub, { number: '' }, path)
32
30
 
33
31
  expect(res).to be_a(Hash)
34
32
  expect(res[:success]).to match(false)
35
33
  end
36
34
 
37
- it 'returns number formatting details as json' do
35
+ it 'returns number formatting details' do
38
36
  stub = {
39
37
  carrier: 'Eplus',
40
38
  country_code: '49',
@@ -46,29 +44,41 @@ RSpec.describe SevenApi, 'lookup' do
46
44
  network_type: 'mobile',
47
45
  success: true
48
46
  }
47
+ path = SevenApi::Resources::Lookup.const_get('PATHS')[:format]
48
+ body = helper.request(helper.resource.method(:format), stub, { number: '+491771783130' }, path)
49
49
 
50
- body = request(SevenApi::Lookup::Type::FORMAT, stub)
50
+ assert_format(body)
51
+ end
51
52
 
52
- expect(body).to be_a(Hash)
53
- expect(body[:carrier]).to be_a(String)
54
- expect(body[:country_code]).to be_a(String)
55
- expect(body[:country_iso]).to be_a(String)
56
- expect(body[:country_name]).to be_a(String)
57
- expect(body[:international]).to be_a(String)
58
- expect(body[:international_formatted]).to be_a(String)
59
- expect(body[:national]).to be_a(String)
60
- expect(body[:network_type]).to be_a(String)
61
- expect(body[:success]).to be_boolean
53
+ it 'returns RCS lookup capabilities' do
54
+ stub = {
55
+ carrier: "O2",
56
+ country_code: "49",
57
+ country_iso: "DE",
58
+ country_name: "Germany",
59
+ international: "+49176123456789",
60
+ international_formatted: "+49 179 123456789",
61
+ national: "0176 12345679",
62
+ network_type: "mobile",
63
+ rcs_capabilities: %w[ACTION_CREATE_CALENDAR_EVENT ACTION_DIAL ACTION_OPEN_URL ACTION_SHARE_LOCATION ACTION_VIEW_LOCATION RICHCARD_CAROUSEL RICHCARD_STANDALONE],
64
+ success: true
65
+ }
66
+ path = SevenApi::Resources::Lookup.const_get('PATHS')[:rcs_capabilities]
67
+ body = helper.request(helper.resource.method(:rcs_capabilities), stub, { number: '+491771783130' }, path)
68
+
69
+ assert_format(body)
70
+ expect(body[:rcs_capabilities]).to be_a(Array)
62
71
  end
63
72
 
64
- it 'returns CNAM details as json' do
73
+ it 'returns CNAM details' do
65
74
  stub = {
66
75
  code: '100',
67
76
  name: 'GERMANY',
68
77
  number: '+491771783130',
69
78
  success: 'true'
70
79
  }
71
- body = request(SevenApi::Lookup::Type::CNAM, stub)
80
+ path = SevenApi::Resources::Lookup.const_get('PATHS')[:cnam]
81
+ body = helper.request(helper.resource.method(:cnam), stub, { number: '+491771783130' }, path)
72
82
 
73
83
  expect(body).to be_a(Hash)
74
84
  expect(body[:code]).to be_a(String)
@@ -77,13 +87,7 @@ RSpec.describe SevenApi, 'lookup' do
77
87
  expect(body[:success]).to be_a(String)
78
88
  end
79
89
 
80
- it 'returns MNP details as text' do
81
- body = request(SevenApi::Lookup::Type::MNP, 'eplus')
82
-
83
- expect(body).to be_a(String)
84
- end
85
-
86
- it 'returns MNP details as json' do
90
+ it 'returns MNP details' do
87
91
  stub = {
88
92
  code: 100,
89
93
  mnp: {
@@ -98,7 +102,8 @@ RSpec.describe SevenApi, 'lookup' do
98
102
  price: 0.005,
99
103
  success: true
100
104
  }
101
- body = request(SevenApi::Lookup::Type::MNP, stub, { json: 1 })
105
+ path = SevenApi::Resources::Lookup.const_get('PATHS')[:mnp]
106
+ body = helper.request(helper.resource.method(:mnp), stub, { number: '+491771783130' }, path)
102
107
 
103
108
  expect(body).to be_a(Hash)
104
109
  expect(body[:code]).to be_a(Integer)
@@ -114,7 +119,7 @@ RSpec.describe SevenApi, 'lookup' do
114
119
  expect(body[:success]).to be_boolean
115
120
  end
116
121
 
117
- it 'returns HLR details as json' do
122
+ it 'returns HLR details' do
118
123
  stub = {
119
124
  country_code: 'DE',
120
125
  country_name: 'Germany',
@@ -145,8 +150,8 @@ RSpec.describe SevenApi, 'lookup' do
145
150
  roaming: 'not_roaming',
146
151
  valid_number: 'valid'
147
152
  }
148
-
149
- body = request(SevenApi::Lookup::Type::HLR, stub)
153
+ path = SevenApi::Resources::Lookup.const_get('PATHS')[:hlr]
154
+ body = helper.request(helper.resource.method(:hlr), stub, { number: '+491771783130' }, path)
150
155
 
151
156
  expect(body).to be_a(Hash)
152
157
  expect(body[:country_code]).to be_a(String)
@@ -176,4 +181,17 @@ RSpec.describe SevenApi, 'lookup' do
176
181
  expect(hash[:network_code]).to be_a(String)
177
182
  expect(hash[:network_type]).to be_a(String)
178
183
  end
184
+
185
+ def assert_format(body)
186
+ expect(body).to be_a(Hash)
187
+ expect(body[:carrier]).to be_a(String)
188
+ expect(body[:country_code]).to be_a(String)
189
+ expect(body[:country_iso]).to be_a(String)
190
+ expect(body[:country_name]).to be_a(String)
191
+ expect(body[:international]).to be_a(String)
192
+ expect(body[:international_formatted]).to be_a(String)
193
+ expect(body[:national]).to be_a(String)
194
+ expect(body[:network_type]).to be_a(String)
195
+ expect(body[:success]).to be_boolean
196
+ end
179
197
  end
@@ -0,0 +1,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'seven_api/resources/numbers'
5
+
6
+ dummy_number = {
7
+ "country": "DE",
8
+ "number": "49176123456789",
9
+ "friendly_name": "",
10
+ "billing": {
11
+ "fees": {
12
+ "setup": 19.9,
13
+ "basic_charge": 238.8,
14
+ "sms_mo": 0,
15
+ "voice_mo": 0
16
+ },
17
+ "payment_interval": "annually"
18
+ },
19
+ "features": {
20
+ "sms": true,
21
+ "a2p_sms": false,
22
+ "voice": true
23
+ },
24
+ "forward_sms_mo": {
25
+ "sms": {
26
+ "number": [
27
+ "4917612345678"
28
+ ],
29
+ "enabled": true
30
+ },
31
+ "email": {
32
+ "address": %w[j.doe@acme.inc john@doe.com],
33
+ "enabled": true
34
+ }
35
+ },
36
+ "expires": nil,
37
+ "created": "2024-01-31 17:06:27"
38
+ }
39
+
40
+ RSpec.describe SevenApi, 'numbers' do
41
+ $new_number_id = nil
42
+
43
+ def assert_new(response_body)
44
+ code = response_body[:return]
45
+ $new_number_id = response_body[:id]
46
+
47
+ expect(code).to be_numeric
48
+ expect($new_number_id).to be_an_instance_of(Integer)
49
+ end
50
+
51
+ def assert_number(number)
52
+ expect(number[:id]).to be_numeric
53
+ expect(number[:name]).to be_an_instance_of(String)
54
+ end
55
+
56
+ it 'returns available numbers' do
57
+ stub = {
58
+ availableNumbers: [
59
+ dummy_number,
60
+ dummy_number
61
+ ],
62
+ }
63
+
64
+ helper = Helper.new(SevenApi::Resources::Numbers)
65
+ body = helper.request(helper.resource.method(:available), stub)
66
+
67
+ expect(body).to be_a(Hash)
68
+ expect(body).to have_key(:availableNumbers)
69
+ expect(body[:availableNumbers]).to be_a(Array)
70
+
71
+ body[:availableNumbers].each do |number|
72
+ assert_number(number)
73
+ end
74
+ end
75
+
76
+ it 'returns active numbers' do
77
+ stub = {
78
+ availableNumbers: [
79
+ dummy_number,
80
+ dummy_number
81
+ ],
82
+ }
83
+
84
+ helper = Helper.new(SevenApi::Resources::Numbers)
85
+ body = helper.request(helper.resource.method(:active), stub)
86
+
87
+ expect(body).to be_a(Array)
88
+
89
+ body.each do |number|
90
+ assert_number(number)
91
+ end
92
+ end
93
+
94
+ it 'order a number' do
95
+ stub = dummy_number
96
+ helper = Helper.new(SevenApi::Resources::Numbers)
97
+ body = helper.request(helper.resource.method(:order), stub)
98
+
99
+ expect(body).to be_a(Hash)
100
+
101
+ assert_new(body)
102
+ end
103
+
104
+ it 'update a number' do
105
+ stub = dummy_number
106
+ helper = Helper.new(SevenApi::Resources::Numbers)
107
+ body = helper.request(helper.resource.method(:update), stub)
108
+
109
+ expect(body).to be_a(Hash)
110
+
111
+ assert_new(body)
112
+ end
113
+
114
+ it 'get a number' do
115
+ stub = dummy_number
116
+ helper = Helper.new(SevenApi::Resources::Numbers)
117
+ body = helper.request(helper.resource.method(:one[:number]), stub)
118
+
119
+ expect(body).to be_a(Hash)
120
+
121
+ assert_new(body)
122
+ end
123
+
124
+ it 'deletes a number' do
125
+ helper = Helper.new(SevenApi::Resources::Numbers)
126
+ body = helper.request(
127
+ helper.resource.method(:delete),
128
+ nil,
129
+ 0
130
+ )
131
+
132
+ expect(body).to be_a(Hash)
133
+ expect(body[:return]).to be_a(String)
134
+ end
135
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'seven_api/resources/rcs'
5
+
6
+ RSpec.describe SevenApi, 'rcs' do
7
+ $helper = Helper.new(SevenApi::Resources::Rcs)
8
+
9
+ def dispatch(stub, extra_params = {})
10
+ params = {
11
+ text: 'Your glasses are ready for pickup.',
12
+ to: '491716992343'
13
+ }.merge(extra_params)
14
+
15
+ $helper.request($helper.resource.method(:dispatch), stub, params, '/messages')
16
+ end
17
+
18
+ it 'sends a single rcs and returns json response' do
19
+ stub = {
20
+ success: '100',
21
+ total_price: 0,
22
+ balance: 4.52,
23
+ debug: 'true',
24
+ sms_type: 'direct',
25
+ messages: [{ id: nil,
26
+ sender: '491771783130',
27
+ recipient: '491771783130',
28
+ text: 'Your glasses are ready for pickup.',
29
+ encoding: 'gsm',
30
+ parts: 1,
31
+ price: 0,
32
+ success: true,
33
+ error: nil,
34
+ error_text: nil,
35
+ channel: 'RCS'}]
36
+ }
37
+
38
+ body = dispatch(stub)
39
+
40
+ expect(body).to be_a(Hash)
41
+
42
+ expect(body[:success]).to be_a(String)
43
+ expect(body[:total_price]).to be_numeric
44
+ expect(body[:balance]).to be_a(Float)
45
+ expect(body[:debug]).to be_a(String)
46
+ expect(body[:sms_type]).to eq('direct')
47
+ expect(body[:messages]).to be_a(Array)
48
+ body[:messages].each do |message|
49
+ expect(message).to be_a(Hash)
50
+ expect(message[:channel]).to eq('RCS')
51
+ end
52
+ end
53
+
54
+ it 'schedules a rcs message and deletes it again' do
55
+ rcs = dispatch({
56
+ success: '100',
57
+ total_price: 0,
58
+ balance: 4.52,
59
+ debug: 'true',
60
+ sms_type: 'direct',
61
+ messages: [{ id: 12345,
62
+ sender: '491771783130',
63
+ recipient: '491771783130',
64
+ text: 'Your glasses are ready for pickup.',
65
+ encoding: 'gsm',
66
+ parts: 1,
67
+ price: 0,
68
+ success: true,
69
+ error: nil,
70
+ error_text: nil,
71
+ channel: 'RCS'}]
72
+ })
73
+ msg = rcs[:messages].first
74
+ id = msg[:id]
75
+ stub = {
76
+ success: true
77
+ }
78
+ params = {
79
+ id: id
80
+ }
81
+
82
+ deleted = $helper.request($helper.resource.method(:delete), stub, params, "/messages/#{id}")
83
+ expect(deleted[:success]).to eq(true)
84
+ end
85
+
86
+ it 'triggers a rcs event' do
87
+ stub = {
88
+ success: true
89
+ }
90
+ params = {
91
+ event: 'IS_TYPING',
92
+ msg_id: '',
93
+ to: '4915237035388'
94
+ }
95
+
96
+ event = $helper.request($helper.resource.method(:event), stub, params, '/events')
97
+ expect(event[:success]).to eq(true)
98
+ end
99
+ end
@@ -22,9 +22,9 @@ RSpec.describe SevenApi, 'sms' do
22
22
 
23
23
  def request(stub, extra_params = {})
24
24
  params = {
25
- from: Helper::VIRTUAL_INBOUNDS[:eplus],
25
+ from: 'seven',
26
26
  text: $text,
27
- to: Helper::VIRTUAL_INBOUNDS[:eplus]
27
+ to: '491716992343'
28
28
  }.merge(extra_params)
29
29
 
30
30
  helper = Helper.new(SevenApi::Resources::Sms)
@@ -22,9 +22,9 @@ RSpec.describe SevenApi, 'voice' do
22
22
  TEXT
23
23
 
24
24
  params = {
25
- from: Helper::VIRTUAL_INBOUNDS[:eplus],
25
+ from: nil,
26
26
  text: text,
27
- to: Helper::VIRTUAL_INBOUNDS[:eplus]
27
+ to: '491716992343'
28
28
  }.merge(extra_params)
29
29
 
30
30
  helper = Helper.new(SevenApi::Resources::Voice)
data/spec/spec_helper.rb CHANGED
@@ -8,25 +8,14 @@ require 'seven_api/util'
8
8
  require 'matchers'
9
9
  require 'EnvKeyStore'
10
10
 
11
- SEVEN_TEST_HTTP = (ENV['SEVEN_TEST_HTTP'].nil? ? false : true).freeze
12
-
13
- RSpec.configure do |config|
14
- SEVEN_TEST_HTTP && config.after do
15
- sleep(1.125)
16
- end
17
- end
18
-
19
11
  class Helper
20
12
  attr_reader :resource
21
13
 
22
- IS_HTTP = SEVEN_TEST_HTTP
23
- VIRTUAL_INBOUNDS = {
24
- eplus: '+491771783130',
25
- }.freeze
14
+ IS_HTTP = (ENV['SEVEN_TEST_HTTP'].nil? ? false : true).freeze
26
15
 
27
16
  # @param resource [Class<SevenApi::Resource>]
28
17
  def initialize(resource)
29
- @resource = resource.new(ENV['SEVEN_API_KEY_SANDBOX'], 'ruby-test')
18
+ @resource = resource.new(ENV['SEVEN_API_KEY'], 'ruby-test')
30
19
 
31
20
  unless Helper::IS_HTTP
32
21
  @stubs = Faraday::Adapter::Test::Stubs.new
@@ -34,19 +23,21 @@ class Helper
34
23
  end
35
24
  end
36
25
 
37
- def create_stub(fn_name, stub)
26
+ def create_stub(fn_name, stub, path)
38
27
  http_fn = @resource.http_methods[fn_name]
39
28
  puts "creating stub for #{http_fn} @ #{@resource.class.name}.#{fn_name}"
40
29
 
41
- @stubs.method(http_fn).call(SevenApi::Resource::BASE_PATH + @resource.endpoint) do
30
+ puts SevenApi::Resource::BASE_PATH + @resource.endpoint + path
31
+
32
+ @stubs.method(http_fn).call(SevenApi::Resource::BASE_PATH + @resource.endpoint + path) do
42
33
  puts "stub: " + stub.inspect
43
34
 
44
35
  [200, {}, stub]
45
36
  end
46
37
  end
47
38
 
48
- def request(fn, stub, params = nil)
49
- create_stub(fn.name, stub) unless Helper::IS_HTTP
39
+ def request(fn, stub, params = nil, path = '')
40
+ create_stub(fn.name, stub, path) unless Helper::IS_HTTP
50
41
 
51
42
  fn.call(*[params].compact)
52
43
  end