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
@@ -1,103 +1,103 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'sms77/resources/sms'
5
-
6
- RSpec.describe Sms77, 'sms' do
7
- $text = 'Your glasses are ready for pickup.'
8
-
9
- def assert_response(response)
10
- if response.is_a?(String)
11
- id, name, number = response.split("\n")
12
- else
13
- id = response['ID']
14
- name = response['Name']
15
- number = response['Number']
16
- end
17
-
18
- expect(Integer(id)).to be_an_instance_of(Integer)
19
- expect(name.to_f).to be_an_instance_of(Float) if id != ''
20
- expect(number.to_f).to be_an_instance_of(Float)
21
- end
22
-
23
- def request(stub, extra_params = {})
24
- params = {
25
- from: Helper::VIRTUAL_INBOUNDS[:eplus],
26
- text: $text,
27
- to: Helper::VIRTUAL_INBOUNDS[:eplus]
28
- }.merge(extra_params)
29
-
30
- helper = Helper.new(Sms77::Resources::Sms)
31
- helper.request(helper.resource.method(:retrieve), stub, params)
32
- end
33
-
34
- it 'sends a single sms and returns success code' do
35
- expect(request(100)).to be_a(Integer)
36
- end
37
-
38
- it 'sends a single sms and returns detailed text response' do
39
- stub = <<~TEXT
40
- 100
41
- Verbucht: 0
42
- Preis: 0.075
43
- Guthaben: 4.575
44
- Text: Your glasses are ready for pickup.
45
- SMS-Typ: direct
46
- Flash SMS: false
47
- Encoding: gsm
48
- GSM0338: true
49
- Debug: true
50
- TEXT
51
-
52
- body = request(stub, { details: 1 })
53
-
54
- expect(body).to be_a(String)
55
-
56
- code, booked, cost, balance, text, type, flash, encoding, gsm0338, debug = body.split("\n")
57
-
58
- expect(code).to be_a(String)
59
- expect(booked.split(':').last.to_f).to be_a(Float)
60
- expect(cost.split(':').last.to_f).to be_a(Float)
61
- expect(balance.split(':').last.to_f).to be_a(Float)
62
- expect(text.split(':').last.strip!).to eq($text)
63
- expect(type.split(':').last.strip!).to eq('direct')
64
- expect(flash.split(':').last.strip!).to eq('false')
65
- expect(encoding.split(':').last.strip!).to eq('gsm')
66
- expect(gsm0338.split(':').last.strip!).to eq('true')
67
- expect(debug.split(':').last.strip!).to eq('true')
68
- end
69
-
70
- it 'sends a single sms and returns json response' do
71
- stub = {
72
- success: '100',
73
- total_price: 0,
74
- balance: 4.5,
75
- debug: 'true',
76
- sms_type: 'direct',
77
- messages: [{ id: nil,
78
- sender: '491771783130',
79
- recipient: '491771783130',
80
- text: 'Your glasses are ready for pickup.',
81
- encoding: 'gsm',
82
- parts: 1,
83
- price: 0,
84
- success: true,
85
- error: nil,
86
- error_text: nil }]
87
- }
88
-
89
- body = request(stub, { json: 1 })
90
-
91
- expect(body).to be_a(Hash)
92
-
93
- expect(body[:success]).to be_a(String)
94
- expect(body[:total_price]).to be_numeric
95
- expect(body[:balance]).to be_a(Float)
96
- expect(body[:debug]).to be_a(String)
97
- expect(body[:sms_type]).to eq('direct')
98
- expect(body[:messages]).to be_a(Array)
99
- body[:messages].each do |message|
100
- expect(message).to be_a(Hash)
101
- end
102
- end
103
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/resources/sms'
5
+
6
+ RSpec.describe Sms77, 'sms' do
7
+ $text = 'Your glasses are ready for pickup.'
8
+
9
+ def assert_response(response)
10
+ if response.is_a?(String)
11
+ id, name, number = response.split("\n")
12
+ else
13
+ id = response['ID']
14
+ name = response['Name']
15
+ number = response['Number']
16
+ end
17
+
18
+ expect(Integer(id)).to be_an_instance_of(Integer)
19
+ expect(name.to_f).to be_an_instance_of(Float) if id != ''
20
+ expect(number.to_f).to be_an_instance_of(Float)
21
+ end
22
+
23
+ def request(stub, extra_params = {})
24
+ params = {
25
+ from: Helper::VIRTUAL_INBOUNDS[:eplus],
26
+ text: $text,
27
+ to: Helper::VIRTUAL_INBOUNDS[:eplus]
28
+ }.merge(extra_params)
29
+
30
+ helper = Helper.new(Sms77::Resources::Sms)
31
+ helper.request(helper.resource.method(:retrieve), stub, params)
32
+ end
33
+
34
+ it 'sends a single sms and returns success code' do
35
+ expect(request(100)).to be_a(Integer)
36
+ end
37
+
38
+ it 'sends a single sms and returns detailed text response' do
39
+ stub = <<~TEXT
40
+ 100
41
+ Verbucht: 0
42
+ Preis: 0.075
43
+ Guthaben: 4.575
44
+ Text: Your glasses are ready for pickup.
45
+ SMS-Typ: direct
46
+ Flash SMS: false
47
+ Encoding: gsm
48
+ GSM0338: true
49
+ Debug: true
50
+ TEXT
51
+
52
+ body = request(stub, { details: 1 })
53
+
54
+ expect(body).to be_a(String)
55
+
56
+ code, booked, cost, balance, text, type, flash, encoding, gsm0338, debug = body.split("\n")
57
+
58
+ expect(code).to be_a(String)
59
+ expect(booked.split(':').last.to_f).to be_a(Float)
60
+ expect(cost.split(':').last.to_f).to be_a(Float)
61
+ expect(balance.split(':').last.to_f).to be_a(Float)
62
+ expect(text.split(':').last.strip!).to eq($text)
63
+ expect(type.split(':').last.strip!).to eq('direct')
64
+ expect(flash.split(':').last.strip!).to eq('false')
65
+ expect(encoding.split(':').last.strip!).to eq('gsm')
66
+ expect(gsm0338.split(':').last.strip!).to eq('true')
67
+ expect(debug.split(':').last.strip!).to eq('true')
68
+ end
69
+
70
+ it 'sends a single sms and returns json response' do
71
+ stub = {
72
+ success: '100',
73
+ total_price: 0,
74
+ balance: 4.5,
75
+ debug: 'true',
76
+ sms_type: 'direct',
77
+ messages: [{ id: nil,
78
+ sender: '491771783130',
79
+ recipient: '491771783130',
80
+ text: 'Your glasses are ready for pickup.',
81
+ encoding: 'gsm',
82
+ parts: 1,
83
+ price: 0,
84
+ success: true,
85
+ error: nil,
86
+ error_text: nil }]
87
+ }
88
+
89
+ body = request(stub, { json: 1 })
90
+
91
+ expect(body).to be_a(Hash)
92
+
93
+ expect(body[:success]).to be_a(String)
94
+ expect(body[:total_price]).to be_numeric
95
+ expect(body[:balance]).to be_a(Float)
96
+ expect(body[:debug]).to be_a(String)
97
+ expect(body[:sms_type]).to eq('direct')
98
+ expect(body[:messages]).to be_a(Array)
99
+ body[:messages].each do |message|
100
+ expect(message).to be_a(Hash)
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/resources/subaccounts'
5
+
6
+ dummy_subaccount = {
7
+ :auto_topup => {
8
+ :amount => 5,
9
+ :threshold => 1,
10
+ },
11
+ :balance => 36.8100,
12
+ :company => 'Company1',
13
+ :contact => {
14
+ :email => 'sms@acme-company1.com',
15
+ :name => 'John Doe',
16
+ },
17
+ :id => '1234567891',
18
+ :total_usage => 0.3000,
19
+ :username => nil,
20
+ }
21
+
22
+ RSpec.describe Sms77, 'subaccounts' do
23
+ HELPER = Helper.new(Sms77::Resources::Subaccounts)
24
+
25
+ def request(key, stub, extra_params = {})
26
+ HELPER.request(HELPER.resource.method(key), stub, extra_params)
27
+ end
28
+
29
+ it 'returns all subaccounts' do
30
+ res = request(:read, [
31
+ dummy_subaccount
32
+ ])
33
+
34
+ expect(res).to be_a(Array)
35
+
36
+ res.each do |subaccount|
37
+ assert_subaccount(subaccount)
38
+ end
39
+ end
40
+
41
+ it 'creates a subaccount' do
42
+ res = request(:create, {
43
+ :error => nil,
44
+ :subaccount => dummy_subaccount,
45
+ :success => true,
46
+ })
47
+
48
+ expect(res).to be_a(Hash)
49
+ expect(res[:error]).to be_nil_or_lengthy_string
50
+ assert_subaccount(res[:subaccount])
51
+ expect(res[:success]).to be_boolean
52
+ end
53
+
54
+ it 'deletes a subaccount' do
55
+ res = request(
56
+ :delete,
57
+ {
58
+ :error => nil,
59
+ :success => true,
60
+ },
61
+ {
62
+ :id => -1,
63
+ }
64
+ )
65
+
66
+ expect(res).to be_a(Hash)
67
+ expect(res[:error]).to be_nil_or_lengthy_string
68
+ expect(res[:success]).to be_boolean
69
+ end
70
+
71
+ it 'transfers credits' do
72
+ res = request(
73
+ :transfer_credits,
74
+ {
75
+ :error => nil,
76
+ :success => true,
77
+ },
78
+ {
79
+ :amount => 0,
80
+ :id => -1,
81
+ }
82
+ )
83
+
84
+ expect(res).to be_a(Hash)
85
+ expect(res[:error]).to be_nil_or_lengthy_string
86
+ expect(res[:success]).to be_boolean
87
+ end
88
+
89
+ it 'updats automatic charging of credits' do
90
+ res = request(
91
+ :update,
92
+ {
93
+ :error => nil,
94
+ :success => true,
95
+ },
96
+ {
97
+ :amount => 0,
98
+ :id => -1,
99
+ :threshold => -1,
100
+ }
101
+ )
102
+
103
+ expect(res).to be_a(Hash)
104
+ expect(res[:error]).to be_nil_or_lengthy_string
105
+ expect(res[:success]).to be_boolean
106
+ end
107
+
108
+ private
109
+
110
+ def assert_subaccount(subaccount)
111
+ expect(subaccount).to be_a(Hash)
112
+ expect(subaccount).to include(:auto_topup, :balance, :company, :contact, :id, :total_usage, :username,)
113
+ expect(subaccount[:auto_topup]).to be_a(Object)
114
+ expect(subaccount[:auto_topup]).to include(:amount, :threshold,)
115
+ expect(subaccount[:balance]).to be_a(Float)
116
+ expect(subaccount[:contact]).to be_a(Object)
117
+ expect(subaccount[:contact]).to include(:email, :name,)
118
+ expect(subaccount[:id]).to be_a(String)
119
+ expect(subaccount[:total_usage]).to be_a(Float)
120
+ end
121
+ end
@@ -1,19 +1,19 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'sms77/resources/validate_for_voice'
5
-
6
- RSpec.describe Sms77, 'validate_for_voice' do
7
- it 'returns caller id information' do
8
- number = '491771783130'
9
- callback_host = Helper::IS_HTTP ? `curl http://ipecho.net/plain` : '127.0.0.1'
10
- callback = "#{callback_host}/callback.php"
11
- stub = { success: true }
12
-
13
- helper = Helper.new(Sms77::Resources::ValidateForVoice)
14
- body = helper.request(helper.resource.method(:retrieve), stub, { number: number, callback: callback })
15
-
16
- expect(body).to be_a(Hash)
17
- expect(body[:success]).to be_boolean
18
- end
19
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/resources/validate_for_voice'
5
+
6
+ RSpec.describe Sms77, 'validate_for_voice' do
7
+ it 'returns caller id information' do
8
+ number = '491771783130'
9
+ callback_host = Helper::IS_HTTP ? `curl http://ipecho.net/plain` : '127.0.0.1'
10
+ callback = "#{callback_host}/callback.php"
11
+ stub = { success: true }
12
+
13
+ helper = Helper.new(Sms77::Resources::ValidateForVoice)
14
+ body = helper.request(helper.resource.method(:retrieve), stub, { number: number, callback: callback })
15
+
16
+ expect(body).to be_a(Hash)
17
+ expect(body[:success]).to be_boolean
18
+ end
19
+ end
@@ -1,51 +1,51 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'sms77/resources/voice'
5
-
6
- RSpec.describe Sms77, 'voice' do
7
- def assert_response(response)
8
- expect(response).to be_a(String)
9
-
10
- code, id, cost = response.split("\n")
11
-
12
- expect(Integer(code)).to be_an_instance_of(Integer)
13
- expect(id.to_f).to be_an_instance_of(Float) if id != ''
14
- expect(cost.to_f).to be_an_instance_of(Float)
15
- end
16
-
17
- def request(text, extra_params = {})
18
- stub = <<~TEXT
19
- 301
20
-
21
- 0.1
22
- TEXT
23
-
24
- params = {
25
- from: Helper::VIRTUAL_INBOUNDS[:eplus],
26
- text: text,
27
- to: Helper::VIRTUAL_INBOUNDS[:eplus]
28
- }.merge(extra_params)
29
-
30
- helper = Helper.new(Sms77::Resources::Voice)
31
- assert_response(helper.request(helper.resource.method(:send), stub, params))
32
- end
33
-
34
- it 'calls a number with text input' do
35
- request('Your glasses are ready for pickup.')
36
- end
37
-
38
- it 'calls a number with xml input' do
39
- text = <<~XML
40
- <?xml version="1.0" encoding="UTF-8"?>
41
- <Response>
42
- <Say voice="woman" language="en-EN">
43
- Your glasses are ready for pickup.
44
- </Say>
45
- <Record maxlength="20" />
46
- </Response>
47
- XML
48
-
49
- request(text, { xml: true })
50
- end
51
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'sms77/resources/voice'
5
+
6
+ RSpec.describe Sms77, 'voice' do
7
+ def assert_response(response)
8
+ expect(response).to be_a(String)
9
+
10
+ code, id, cost = response.split("\n")
11
+
12
+ expect(Integer(code)).to be_an_instance_of(Integer)
13
+ expect(id.to_f).to be_an_instance_of(Float) if id != ''
14
+ expect(cost.to_f).to be_an_instance_of(Float)
15
+ end
16
+
17
+ def request(text, extra_params = {})
18
+ stub = <<~TEXT
19
+ 301
20
+
21
+ 0.1
22
+ TEXT
23
+
24
+ params = {
25
+ from: Helper::VIRTUAL_INBOUNDS[:eplus],
26
+ text: text,
27
+ to: Helper::VIRTUAL_INBOUNDS[:eplus]
28
+ }.merge(extra_params)
29
+
30
+ helper = Helper.new(Sms77::Resources::Voice)
31
+ assert_response(helper.request(helper.resource.method(:send), stub, params))
32
+ end
33
+
34
+ it 'calls a number with text input' do
35
+ request('Your glasses are ready for pickup.')
36
+ end
37
+
38
+ it 'calls a number with xml input' do
39
+ text = <<~XML
40
+ <?xml version="1.0" encoding="UTF-8"?>
41
+ <Response>
42
+ <Say voice="woman" language="en-EN">
43
+ Your glasses are ready for pickup.
44
+ </Say>
45
+ <Record maxlength="20" />
46
+ </Response>
47
+ XML
48
+
49
+ request(text, { xml: true })
50
+ end
51
+ end
data/spec/sms77_spec.rb CHANGED
@@ -1,7 +1,9 @@
1
- # frozen_string_literal: true
2
-
3
- describe Sms77 do
4
- it 'has a version number' do
5
- expect(Sms77::VERSION).not_to be nil
6
- end
7
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Sms77 do
6
+ it 'has a version number' do
7
+ expect(Sms77::VERSION).not_to be nil
8
+ end
9
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,53 +1,53 @@
1
- # frozen_string_literal: true
2
-
3
- $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
4
-
5
- require 'sms77'
6
- require 'sms77/resource'
7
- require 'sms77/util'
8
- require 'matchers'
9
- require 'EnvKeyStore'
10
-
11
- SMS77_TEST_HTTP = (ENV['SMS77_TEST_HTTP'].nil? ? false : true).freeze
12
-
13
- RSpec.configure do |config|
14
- SMS77_TEST_HTTP && config.after do
15
- sleep(1.125)
16
- end
17
- end
18
-
19
- class Helper
20
- attr_reader :resource
21
-
22
- IS_HTTP = SMS77_TEST_HTTP
23
- VIRTUAL_INBOUNDS = {
24
- eplus: '+491771783130',
25
- }.freeze
26
-
27
- # @param resource [Class<Sms77::Resource>]
28
- def initialize(resource)
29
- @resource = resource.new(ENV['SMS77_DUMMY_API_KEY'], 'ruby-test')
30
-
31
- unless Helper::IS_HTTP
32
- @stubs = Faraday::Adapter::Test::Stubs.new
33
- @resource.conn.builder.adapter(:test, @stubs)
34
- end
35
- end
36
-
37
- def create_stub(fn_name, stub)
38
- http_fn = @resource.http_methods[fn_name]
39
- puts "creating stub for #{http_fn} @ #{@resource.class.name}.#{fn_name}"
40
-
41
- @stubs.method(http_fn).call(Sms77::Resource::BASE_PATH + @resource.endpoint) do
42
- puts "stub: " + stub.inspect
43
-
44
- [200, {}, stub]
45
- end
46
- end
47
-
48
- def request(fn, stub, params = nil)
49
- create_stub(fn.name, stub) unless Helper::IS_HTTP
50
-
51
- fn.call(*[params].compact)
52
- end
53
- end
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
4
+
5
+ require 'sms77'
6
+ require 'sms77/resource'
7
+ require 'sms77/util'
8
+ require 'matchers'
9
+ require 'EnvKeyStore'
10
+
11
+ SMS77_TEST_HTTP = (ENV['SMS77_TEST_HTTP'].nil? ? false : true).freeze
12
+
13
+ RSpec.configure do |config|
14
+ SMS77_TEST_HTTP && config.after do
15
+ sleep(1.125)
16
+ end
17
+ end
18
+
19
+ class Helper
20
+ attr_reader :resource
21
+
22
+ IS_HTTP = SMS77_TEST_HTTP
23
+ VIRTUAL_INBOUNDS = {
24
+ eplus: '+491771783130',
25
+ }.freeze
26
+
27
+ # @param resource [Class<Sms77::Resource>]
28
+ def initialize(resource)
29
+ @resource = resource.new(ENV['SMS77_DUMMY_API_KEY'], 'ruby-test')
30
+
31
+ unless Helper::IS_HTTP
32
+ @stubs = Faraday::Adapter::Test::Stubs.new
33
+ @resource.conn.builder.adapter(:test, @stubs)
34
+ end
35
+ end
36
+
37
+ def create_stub(fn_name, stub)
38
+ http_fn = @resource.http_methods[fn_name]
39
+ puts "creating stub for #{http_fn} @ #{@resource.class.name}.#{fn_name}"
40
+
41
+ @stubs.method(http_fn).call(Sms77::Resource::BASE_PATH + @resource.endpoint) do
42
+ puts "stub: " + stub.inspect
43
+
44
+ [200, {}, stub]
45
+ end
46
+ end
47
+
48
+ def request(fn, stub, params = nil)
49
+ create_stub(fn.name, stub) unless Helper::IS_HTTP
50
+
51
+ fn.call(*[params].compact)
52
+ end
53
+ end