vero 0.9.1 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +15 -1
  3. data/Gemfile.lock +95 -73
  4. data/README.markdown +145 -121
  5. data/lib/generators/vero_generator.rb +18 -19
  6. data/lib/vero.rb +7 -3
  7. data/lib/vero/api.rb +14 -4
  8. data/lib/vero/api/base_api.rb +11 -10
  9. data/lib/vero/api/events/track_api.rb +5 -3
  10. data/lib/vero/api/users/delete_api.rb +21 -0
  11. data/lib/vero/api/users/edit_api.rb +5 -3
  12. data/lib/vero/api/users/edit_tags_api.rb +7 -5
  13. data/lib/vero/api/users/reidentify_api.rb +5 -3
  14. data/lib/vero/api/users/resubscribe_api.rb +3 -1
  15. data/lib/vero/api/users/track_api.rb +5 -3
  16. data/lib/vero/api/users/unsubscribe_api.rb +3 -1
  17. data/lib/vero/app.rb +4 -2
  18. data/lib/vero/config.rb +11 -8
  19. data/lib/vero/context.rb +9 -11
  20. data/lib/vero/context/api.rb +9 -7
  21. data/lib/vero/dsl.rb +3 -1
  22. data/lib/vero/railtie.rb +5 -3
  23. data/lib/vero/sender.rb +12 -31
  24. data/lib/vero/senders/base.rb +3 -1
  25. data/lib/vero/senders/delayed_job.rb +7 -7
  26. data/lib/vero/senders/invalid.rb +5 -3
  27. data/lib/vero/senders/resque.rb +8 -8
  28. data/lib/vero/senders/sidekiq.rb +3 -1
  29. data/lib/vero/senders/{thread.rb → sucker_punch.rb} +5 -3
  30. data/lib/vero/trackable.rb +4 -2
  31. data/lib/vero/trackable/base.rb +10 -9
  32. data/lib/vero/trackable/interface.rb +3 -1
  33. data/lib/vero/utility/ext.rb +3 -1
  34. data/lib/vero/utility/logger.rb +4 -6
  35. data/lib/vero/version.rb +3 -1
  36. data/lib/vero/view_helpers/javascript.rb +20 -20
  37. data/spec/lib/api/base_api_spec.rb +10 -8
  38. data/spec/lib/api/events/track_api_spec.rb +23 -21
  39. data/spec/lib/api/users/delete_api_spec.rb +33 -0
  40. data/spec/lib/api/users/edit_api_spec.rb +12 -10
  41. data/spec/lib/api/users/edit_tags_api_spec.rb +22 -20
  42. data/spec/lib/api/users/reidentify_spec.rb +16 -14
  43. data/spec/lib/api/users/resubscribe_api_spec.rb +16 -10
  44. data/spec/lib/api/users/track_api_spec.rb +21 -19
  45. data/spec/lib/api/users/unsubscribe_api_spec.rb +12 -10
  46. data/spec/lib/api_spec.rb +29 -24
  47. data/spec/lib/app_spec.rb +12 -10
  48. data/spec/lib/config_spec.rb +31 -29
  49. data/spec/lib/context_spec.rb +13 -11
  50. data/spec/lib/dsl_spec.rb +3 -1
  51. data/spec/lib/sender_spec.rb +12 -24
  52. data/spec/lib/senders/sidekiq_spec.rb +16 -9
  53. data/spec/lib/trackable_spec.rb +88 -114
  54. data/spec/lib/view_helpers_spec.rb +12 -8
  55. data/spec/spec_helper.rb +10 -4
  56. data/spec/support/base_config_shared_examples.rb +5 -3
  57. data/spec/support/user_support.rb +15 -7
  58. data/spec/support/vero_user_support.rb +4 -2
  59. data/vero.gemspec +14 -30
  60. metadata +30 -125
@@ -1,32 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Vero::Api::Workers::Users::UnsubscribeAPI do
4
- subject { Vero::Api::Workers::Users::UnsubscribeAPI.new('https://api.getvero.com', {:auth_token => 'abcd', :email => 'test@test.com', :changes => { :email => 'test@test.com' }}) }
6
+ subject { Vero::Api::Workers::Users::UnsubscribeAPI.new('https://api.getvero.com', { auth_token: 'abcd', email: 'test@test.com', changes: { email: 'test@test.com' } }) }
5
7
 
6
- it_behaves_like "a Vero wrapper" do
7
- let(:end_point) { "/api/v2/users/unsubscribe.json" }
8
+ it_behaves_like 'a Vero wrapper' do
9
+ let(:end_point) { '/api/v2/users/unsubscribe.json' }
8
10
  end
9
11
 
10
12
  describe :validate! do
11
- it "should not raise an error when the keys are Strings" do
12
- options = {"auth_token" => 'abcd', "email" => 'test@test.com', "changes" => { "email" => 'test@test.com' }}
13
+ it 'should not raise an error when the keys are Strings' do
14
+ options = { 'auth_token' => 'abcd', 'email' => 'test@test.com', 'changes' => { 'email' => 'test@test.com' } }
13
15
  subject.options = options
14
16
  expect { subject.send(:validate!) }.to_not raise_error
15
17
  end
16
18
  end
17
19
 
18
20
  describe :request do
19
- it "should send a request to the Vero API" do
20
- expect(RestClient).to receive(:post).with("https://api.getvero.com/api/v2/users/unsubscribe.json", {:auth_token => 'abcd', :email => 'test@test.com', :changes => { :email => 'test@test.com' }})
21
+ it 'should send a request to the Vero API' do
22
+ expect(RestClient).to receive(:post).with('https://api.getvero.com/api/v2/users/unsubscribe.json', { auth_token: 'abcd', email: 'test@test.com', changes: { email: 'test@test.com' } })
21
23
  allow(RestClient).to receive(:post).and_return(200)
22
24
  subject.send(:request)
23
25
  end
24
26
  end
25
27
 
26
- describe "integration test" do
27
- it "should not raise any errors" do
28
+ describe 'integration test' do
29
+ it 'should not raise any errors' do
28
30
  allow(RestClient).to receive(:post).and_return(200)
29
31
  expect { subject.perform }.to_not raise_error
30
32
  end
31
33
  end
32
- end
34
+ end
@@ -1,21 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Vero::Api::Events do
4
- let (:subject) { Vero::Api::Events }
6
+ let(:subject) { Vero::Api::Events }
5
7
 
6
8
  describe :track! do
7
- it "should call the TrackAPI object via the configured sender" do
8
- input = {:event_name => "test_event", :identity => {:email => "james@getvero.com"}, :data => {:test => "test"}}
9
- expected = input.merge(:auth_token => "abc123", :development_mode => true)
9
+ it 'should call the TrackAPI object via the configured sender' do
10
+ input = { event_name: 'test_event', identity: { email: 'james@getvero.com' }, data: { test: 'test' } }
11
+ expected = input.merge(auth_token: 'abc123', development_mode: true)
10
12
 
11
13
  mock_context = Vero::Context.new
12
14
  allow(mock_context.config).to receive(:configured?).and_return(true)
13
- allow(mock_context.config).to receive(:auth_token).and_return("abc123")
15
+ allow(mock_context.config).to receive(:auth_token).and_return('abc123')
14
16
  allow(mock_context.config).to receive(:development_mode).and_return(true)
15
17
 
16
18
  allow(Vero::App).to receive(:default_context).and_return(mock_context)
17
19
 
18
- expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Events::TrackAPI, true, "https://api.getvero.com", expected)
20
+ expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Events::TrackAPI, true, 'https://api.getvero.com', expected)
19
21
 
20
22
  subject.track!(input)
21
23
  end
@@ -25,67 +27,70 @@ end
25
27
  describe Vero::Api::Users do
26
28
  let(:subject) { Vero::Api::Users }
27
29
  let(:mock_context) { Vero::Context.new }
28
- let(:expected) { input.merge(:auth_token => "abc123", :development_mode => true) }
30
+ let(:expected) { input.merge(auth_token: 'abc123', development_mode: true) }
29
31
 
30
32
  before :each do
31
33
  allow(mock_context.config).to receive(:configured?).and_return(true)
32
- allow(mock_context.config).to receive(:auth_token).and_return("abc123")
34
+ allow(mock_context.config).to receive(:auth_token).and_return('abc123')
33
35
  allow(mock_context.config).to receive(:development_mode).and_return(true)
34
36
  allow(Vero::App).to receive(:default_context).and_return(mock_context)
35
37
  end
36
38
 
37
39
  describe :track! do
38
- context "should call the TrackAPI object via the configured sender" do
39
- let(:input) { {:email => "james@getvero.com", :data => {:age => 25}} }
40
+ context 'should call the TrackAPI object via the configured sender' do
41
+ let(:input) { { email: 'james@getvero.com', data: { age: 25 } } }
40
42
 
41
43
  specify do
42
- expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::TrackAPI, true, "https://api.getvero.com", expected)
44
+ expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::TrackAPI, true, 'https://api.getvero.com', expected)
43
45
  subject.track!(input)
44
46
  end
45
47
  end
46
48
  end
47
49
 
48
50
  describe :edit_user! do
49
- context "should call the TrackAPI object via the configured sender" do
50
- let(:input) { {:email => "james@getvero.com", :changes => {:age => 25}} }
51
+ context 'should call the TrackAPI object via the configured sender' do
52
+ let(:input) { { email: 'james@getvero.com', changes: { age: 25 } } }
51
53
 
52
54
  specify do
53
- expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::EditAPI, true, "https://api.getvero.com", expected)
55
+ expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::EditAPI, true, 'https://api.getvero.com', expected)
54
56
  subject.edit_user!(input)
55
57
  end
56
58
  end
57
59
  end
58
60
 
59
61
  describe :edit_user_tags! do
60
- context "should call the TrackAPI object via the configured sender" do
61
- let(:input) { {:add => ["boom"], :remove => ["tish"]} }
62
+ context 'should call the TrackAPI object via the configured sender' do
63
+ let(:input) { { add: ['boom'], remove: ['tish'] } }
62
64
 
63
65
  specify do
64
- expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::EditTagsAPI, true, "https://api.getvero.com", expected)
66
+ expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::EditTagsAPI, true, 'https://api.getvero.com', expected)
65
67
  subject.edit_user_tags!(input)
66
68
  end
67
69
  end
68
70
  end
69
71
 
70
72
  describe :unsubscribe! do
71
- context "should call the TrackAPI object via the configured sender" do
72
- let(:input) { {:email => "james@getvero"} }
73
+ context 'should call the TrackAPI object via the configured sender' do
74
+ let(:input) { { email: 'james@getvero' } }
73
75
 
74
76
  specify do
75
- expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::UnsubscribeAPI, true, "https://api.getvero.com", expected)
77
+ expect(Vero::Sender).to receive(:send).with(Vero::Api::Workers::Users::UnsubscribeAPI, true, 'https://api.getvero.com', expected)
76
78
  subject.unsubscribe!(input)
77
79
  end
78
80
  end
79
81
  end
80
82
 
81
83
  describe :resubscribe! do
82
- context "should call the TrackAPI object via the configured sender" do
83
- let(:input) { {:email => "james@getvero"} }
84
+ context 'should call the TrackAPI object via the configured sender' do
85
+ let(:input) { { email: 'james@getvero' } }
84
86
 
85
87
  specify do
86
- Vero::Sender.should_receive(:send).with(Vero::Api::Workers::Users::ResubscribeAPI, true, "https://api.getvero.com", expected)
88
+ expect(Vero::Sender).to(
89
+ receive(:send)
90
+ .with(Vero::Api::Workers::Users::ResubscribeAPI, true, 'https://api.getvero.com', expected)
91
+ )
87
92
  subject.resubscribe!(input)
88
93
  end
89
94
  end
90
95
  end
91
- end
96
+ end
@@ -1,31 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Vero::App do
4
6
  describe 'self.default_context' do
5
- it "inherits from Vero::Context" do
7
+ it 'inherits from Vero::Context' do
6
8
  actual = Vero::App.default_context
7
9
  expect(actual).to be_a(Vero::Context)
8
10
  end
9
11
  end
10
12
 
11
- let (:context) { Vero::App.default_context }
13
+ let(:context) { Vero::App.default_context }
12
14
  describe :init do
13
- it "should ignore configuring the config if no block is provided" do
15
+ it 'should ignore configuring the config if no block is provided' do
14
16
  Vero::App.init
15
17
  expect(context.configured?).to be(false)
16
18
  end
17
19
 
18
- it "should pass configuration defined in the block to the config file" do
20
+ it 'should pass configuration defined in the block to the config file' do
19
21
  Vero::App.init
20
22
 
21
23
  expect(context.config.api_key).to be_nil
22
24
  Vero::App.init do |c|
23
- c.api_key = "abcd1234"
25
+ c.api_key = 'abcd1234'
24
26
  end
25
- expect(context.config.api_key).to eq("abcd1234")
27
+ expect(context.config.api_key).to eq('abcd1234')
26
28
  end
27
29
 
28
- it "should init should be able to set async" do
30
+ it 'should init should be able to set async' do
29
31
  Vero::App.init do |c|
30
32
  c.async = false
31
33
  end
@@ -39,7 +41,7 @@ describe Vero::App do
39
41
  end
40
42
 
41
43
  describe :disable_requests! do
42
- it "should change config.disabled" do
44
+ it 'should change config.disabled' do
43
45
  Vero::App.init {}
44
46
  expect(context.config.disabled).to be(false)
45
47
 
@@ -49,10 +51,10 @@ describe Vero::App do
49
51
  end
50
52
 
51
53
  describe :log do
52
- it "should have a log method" do
54
+ it 'should have a log method' do
53
55
  Vero::App.init {}
54
56
  expect(Vero::App).to receive(:log)
55
- Vero::App.log(Object, "test")
57
+ Vero::App.log(Object, 'test')
56
58
  end
57
59
  end
58
60
  end
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Vero::Config do
4
6
  let(:config) { Vero::Config.new }
5
7
 
6
- it "should be async by default" do
8
+ it 'should be async by default' do
7
9
  expect(config.async).to be(true)
8
10
  end
9
11
 
10
12
  describe :reset! do
11
- it "should reset all attributes" do
12
- config.api_key = "abcd1234"
13
- config.secret = "abcd1234"
13
+ it 'should reset all attributes' do
14
+ config.api_key = 'abcd1234'
15
+ config.secret = 'abcd1234'
14
16
  config.reset!
15
17
 
16
18
  expect(config.api_key).to be_nil
@@ -19,51 +21,51 @@ describe Vero::Config do
19
21
  end
20
22
 
21
23
  describe :auth_token do
22
- it "should return nil if either api_key or secret are not set" do
24
+ it 'should return nil if either api_key or secret are not set' do
23
25
  config.api_key = nil
24
- config.secret = "abcd"
26
+ config.secret = 'abcd'
25
27
  expect(config.auth_token).to be_nil
26
28
 
27
- config.api_key = "abcd"
29
+ config.api_key = 'abcd'
28
30
  config.secret = nil
29
31
  expect(config.auth_token).to be_nil
30
32
 
31
- config.api_key = "abcd"
32
- config.secret = "abcd"
33
+ config.api_key = 'abcd'
34
+ config.secret = 'abcd'
33
35
  expect(config.auth_token).not_to be_nil
34
36
  end
35
37
 
36
- it "should return an expected auth_token" do
37
- config.api_key = "abcd1234"
38
- config.secret = "efgh5678"
39
- expect(config.auth_token).to eq("YWJjZDEyMzQ6ZWZnaDU2Nzg=")
38
+ it 'should return an expected auth_token' do
39
+ config.api_key = 'abcd1234'
40
+ config.secret = 'efgh5678'
41
+ expect(config.auth_token).to eq('YWJjZDEyMzQ6ZWZnaDU2Nzg=')
40
42
  end
41
43
  end
42
44
 
43
45
  describe :request_params do
44
- it "should return a hash of auth_token and development_mode if they are set" do
46
+ it 'should return a hash of auth_token and development_mode if they are set' do
45
47
  config.api_key = nil
46
48
  config.secret = nil
47
49
  config.development_mode = nil
48
50
  expect(config.request_params).to eq({})
49
51
 
50
- config.api_key = "abcd1234"
51
- config.secret = "abcd1234"
52
- expect(config.request_params).to eq({:auth_token => "YWJjZDEyMzQ6YWJjZDEyMzQ="})
52
+ config.api_key = 'abcd1234'
53
+ config.secret = 'abcd1234'
54
+ expect(config.request_params).to eq({ auth_token: 'YWJjZDEyMzQ6YWJjZDEyMzQ=' })
53
55
 
54
56
  config.development_mode = true
55
- expect(config.request_params).to eq({:auth_token => "YWJjZDEyMzQ6YWJjZDEyMzQ=", :development_mode => true})
57
+ expect(config.request_params).to eq({ auth_token: 'YWJjZDEyMzQ6YWJjZDEyMzQ=', development_mode: true })
56
58
  end
57
59
  end
58
60
 
59
61
  describe :domain do
60
- it "should return https://api.getvero.com when not set" do
62
+ it 'should return https://api.getvero.com when not set' do
61
63
  expect(config.domain).to eq('https://api.getvero.com')
62
64
  config.domain = 'blah.com'
63
65
  expect(config.domain).not_to eq('https://api.getvero.com')
64
66
  end
65
67
 
66
- it "should return the domain value" do
68
+ it 'should return the domain value' do
67
69
  config.domain = 'test.unbelieveable.com.au'
68
70
  expect(config.domain).to eq('http://test.unbelieveable.com.au')
69
71
 
@@ -73,24 +75,24 @@ describe Vero::Config do
73
75
  end
74
76
 
75
77
  describe :development_mode do
76
- it "by default it should return false regardless of Rails environment" do
77
- stub_env('development') {
78
+ it 'by default it should return false regardless of Rails environment' do
79
+ stub_env('development') do
78
80
  config = Vero::Config.new
79
81
  expect(config.development_mode).to be(false)
80
- }
82
+ end
81
83
 
82
- stub_env('test') {
84
+ stub_env('test') do
83
85
  config = Vero::Config.new
84
86
  expect(config.development_mode).to be(false)
85
- }
87
+ end
86
88
 
87
- stub_env('production') {
89
+ stub_env('production') do
88
90
  config = Vero::Config.new
89
91
  expect(config.development_mode).to be(false)
90
- }
92
+ end
91
93
  end
92
94
 
93
- it "can be overritten with the config block" do
95
+ it 'can be overritten with the config block' do
94
96
  config.development_mode = true
95
97
  expect(config.request_params[:development_mode]).to be(true)
96
98
 
@@ -101,7 +103,7 @@ describe Vero::Config do
101
103
 
102
104
  describe :test_mode do
103
105
  it 'should not raise error even though not configured properly' do
104
- input = {:event_name => "test_event"}
106
+ input = { event_name: 'test_event' }
105
107
  mock_context = Vero::Context.new
106
108
  allow(mock_context.config).to receive(:configured?).and_return(false)
107
109
 
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- describe Vero::Context do
5
+ describe Vero::Context do
4
6
  let(:context) { Vero::Context.new }
5
7
 
6
- it "accepts multiple parameter types in contructor" do
7
- context1 = Vero::Context.new({ :api_key => 'blah', :secret => 'didah' })
8
+ it 'accepts multiple parameter types in contructor' do
9
+ context1 = Vero::Context.new({ api_key: 'blah', secret: 'didah' })
8
10
  expect(context1).to be_a(Vero::Context)
9
11
  expect(context1.config.api_key).to eq('blah')
10
12
  expect(context1.config.secret).to eq('didah')
@@ -22,19 +24,19 @@ describe Vero::Context do
22
24
  end
23
25
 
24
26
  describe :configure do
25
- it "should ignore configuring the config if no block is provided" do
27
+ it 'should ignore configuring the config if no block is provided' do
26
28
  context.configure
27
29
  expect(context.configured?).to be(false)
28
30
  end
29
31
 
30
- it "should pass configuration defined in the block to the config file" do
32
+ it 'should pass configuration defined in the block to the config file' do
31
33
  context.configure do |c|
32
- c.api_key = "abcd1234"
34
+ c.api_key = 'abcd1234'
33
35
  end
34
- expect(context.config.api_key).to eq("abcd1234")
36
+ expect(context.config.api_key).to eq('abcd1234')
35
37
  end
36
38
 
37
- it "should init should be able to set async" do
39
+ it 'should init should be able to set async' do
38
40
  context.configure do |c|
39
41
  c.async = false
40
42
  end
@@ -48,10 +50,10 @@ describe Vero::Context do
48
50
  end
49
51
 
50
52
  describe :disable_requests! do
51
- it "should change config.disabled" do
53
+ it 'should change config.disabled' do
52
54
  expect(context.config.disabled).to be(false)
53
55
  context.disable_requests!
54
- expect(context.config.disabled).to be(true)
56
+ expect(context.config.disabled).to be(true)
55
57
  end
56
58
  end
57
- end
59
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Vero::DSL do
@@ -18,7 +20,7 @@ describe Vero::DSL::Proxy do
18
20
  expect(proxy.users).to eql(Vero::Api::Users)
19
21
  end
20
22
 
21
- it "should respond to reidentify!" do
23
+ it 'should respond to reidentify!' do
22
24
  expect(proxy.users.respond_to?(:reidentify!)).to be(true)
23
25
  end
24
26
  end
@@ -1,34 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Vero::Sender do
4
6
  subject { Vero::Sender }
5
7
 
6
- describe ".senders" do
7
- it "should be a Hash" do
8
- expect(subject.senders).to be_a(Hash)
9
- end
10
-
11
- context 'when using Ruby with verion greater than 1.8.7' do
12
- before do
13
- stub_const('RUBY_VERSION', '1.9.3')
14
- end
15
-
16
- it "should have a default set of senders (true, false, none, thread)" do
17
- expect(subject.senders).to eq({
18
- true => Vero::Senders::Thread,
19
- false => Vero::Senders::Base,
20
- :none => Vero::Senders::Base,
21
- :thread => Vero::Senders::Thread,
22
- })
23
- end
8
+ describe '.senders' do
9
+ it 'should automatically find senders that are not defined' do
10
+ expect(subject.senders[:delayed_job]).to eq(Vero::Senders::DelayedJob)
11
+ expect(subject.senders[:sucker_punch]).to eq(Vero::Senders::SuckerPunch)
12
+ expect(subject.senders[:resque]).to eq(Vero::Senders::Resque)
13
+ expect(subject.senders[:sidekiq]).to eq(Vero::Senders::Sidekiq)
14
+ expect(subject.senders[:invalid]).to eq(Vero::Senders::Invalid)
15
+ expect(subject.senders[:none]).to eq(Vero::Senders::Base)
24
16
  end
25
17
 
26
- it "should automatically find senders that are not defined" do
27
- expect(subject.senders[:delayed_job]).to eq(Vero::Senders::DelayedJob)
28
- expect(subject.senders[:resque]).to eq(Vero::Senders::Resque)
29
- expect(subject.senders[:sidekiq]).to eq(Vero::Senders::Sidekiq)
30
- expect(subject.senders[:invalid]).to eq(Vero::Senders::Invalid)
31
- expect(subject.senders[:none]).to eq(Vero::Senders::Base)
18
+ it 'should fallback to Vero::Senders::Base' do
19
+ expect(subject.senders[:unsupported_sender]).to eq(Vero::Senders::Base)
32
20
  end
33
21
  end
34
22
  end