braze_ruby 0.2.2 → 0.4.1

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 (113) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +14 -3
  3. data/.gitignore +1 -0
  4. data/Gemfile +2 -0
  5. data/Gemfile.lock +39 -39
  6. data/README.md +64 -0
  7. data/Rakefile +2 -0
  8. data/braze_ruby.gemspec +7 -7
  9. data/lib/braze_ruby.rb +2 -0
  10. data/lib/braze_ruby/api.rb +11 -4
  11. data/lib/braze_ruby/deprecated.rb +2 -0
  12. data/lib/braze_ruby/endpoints.rb +4 -0
  13. data/lib/braze_ruby/endpoints/campaigns.rb +3 -1
  14. data/lib/braze_ruby/endpoints/canvas.rb +7 -1
  15. data/lib/braze_ruby/endpoints/create_user_aliases.rb +19 -0
  16. data/lib/braze_ruby/endpoints/delete_users.rb +4 -2
  17. data/lib/braze_ruby/endpoints/email_status.rb +3 -1
  18. data/lib/braze_ruby/endpoints/email_sync.rb +4 -2
  19. data/lib/braze_ruby/endpoints/identify_users.rb +19 -0
  20. data/lib/braze_ruby/endpoints/schedule_messages.rb +3 -1
  21. data/lib/braze_ruby/endpoints/send_messages.rb +3 -1
  22. data/lib/braze_ruby/endpoints/subscription.rb +20 -0
  23. data/lib/braze_ruby/endpoints/track_users.rb +7 -5
  24. data/lib/braze_ruby/http.rb +20 -5
  25. data/lib/braze_ruby/rest.rb +8 -0
  26. data/lib/braze_ruby/rest/base.rb +6 -2
  27. data/lib/braze_ruby/rest/canvas_details.rb +20 -0
  28. data/lib/braze_ruby/rest/create_user_aliases.rb +13 -0
  29. data/lib/braze_ruby/rest/delete_users.rb +3 -2
  30. data/lib/braze_ruby/rest/email_hard_bounces.rb +5 -5
  31. data/lib/braze_ruby/rest/email_status.rb +5 -5
  32. data/lib/braze_ruby/rest/email_unsubscribes.rb +5 -5
  33. data/lib/braze_ruby/rest/export_users.rb +7 -7
  34. data/lib/braze_ruby/rest/identify_users.rb +13 -0
  35. data/lib/braze_ruby/rest/list_segments.rb +4 -4
  36. data/lib/braze_ruby/rest/schedule_messages.rb +5 -5
  37. data/lib/braze_ruby/rest/send_messages.rb +5 -5
  38. data/lib/braze_ruby/rest/subscription_status_get.rb +20 -0
  39. data/lib/braze_ruby/rest/subscription_status_set.rb +20 -0
  40. data/lib/braze_ruby/rest/subscription_user_status.rb +20 -0
  41. data/lib/braze_ruby/rest/track_users.rb +3 -2
  42. data/lib/braze_ruby/rest/trigger_campaign_send.rb +6 -8
  43. data/lib/braze_ruby/rest/trigger_canvas_send.rb +5 -5
  44. data/lib/braze_ruby/version.rb +3 -1
  45. data/spec/braze_ruby/api_spec.rb +2 -0
  46. data/spec/braze_ruby/endpoints/delete_users_spec.rb +3 -1
  47. data/spec/braze_ruby/endpoints/track_users_spec.rb +10 -8
  48. data/spec/braze_ruby/http_spec.rb +48 -0
  49. data/spec/braze_ruby/rest/create_user_aliases_spec.rb +23 -0
  50. data/spec/braze_ruby/rest/delete_users_spec.rb +5 -3
  51. data/spec/braze_ruby/rest/email_status_spec.rb +3 -2
  52. data/spec/braze_ruby/rest/export_users_spec.rb +5 -3
  53. data/spec/braze_ruby/rest/identify_users_spec.rb +23 -0
  54. data/spec/braze_ruby/rest/schedule_messages_spec.rb +3 -2
  55. data/spec/braze_ruby/rest/send_messages_spec.rb +10 -13
  56. data/spec/braze_ruby/rest/track_users_spec.rb +12 -9
  57. data/spec/factories.rb +2 -0
  58. data/spec/fixtures/responses/campaigns/trigger_send/sends_an_email.yml +17 -15
  59. data/spec/fixtures/responses/canvas/details/returns_error_when_no_canvas.yml +69 -0
  60. data/spec/fixtures/responses/canvas/trigger_send/sends_a_canvas.yml +18 -16
  61. data/spec/fixtures/responses/create_user_aliases/unauthorized/responds_with_unauthorized.yml +67 -0
  62. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_created.yml +71 -0
  63. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_success_message.yml +71 -0
  64. data/spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml +20 -18
  65. data/spec/fixtures/responses/delete_users/with_success/responds_with_created.yml +25 -23
  66. data/spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml +25 -23
  67. data/spec/fixtures/responses/email_status/existing_email/responds_with_created.yml +22 -20
  68. data/spec/fixtures/responses/email_status/existing_email/responds_with_success_message.yml +22 -20
  69. data/spec/fixtures/responses/email_status/unknown_email/responds_with_bad_request.yml +22 -20
  70. data/spec/fixtures/responses/email_status/unknown_email/responds_with_success_message.yml +22 -20
  71. data/spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml +18 -16
  72. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml +18 -16
  73. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml +21 -20
  74. data/spec/fixtures/responses/export_users/by_ids/with_success/responds_with_created.yml +25 -22
  75. data/spec/fixtures/responses/export_users/by_segment/with_success/responds_with_created.yml +24 -22
  76. data/spec/fixtures/responses/identify_users/unauthorized/responds_with_unauthorized.yml +68 -0
  77. data/spec/fixtures/responses/identify_users/with_success/responds_with_created.yml +71 -0
  78. data/spec/fixtures/responses/identify_users/with_success/responds_with_success_message.yml +71 -0
  79. data/spec/fixtures/responses/list_segments/with_success/responds_with_a_list_of_segments.yml +35 -35
  80. data/spec/fixtures/responses/list_segments/with_success/responds_with_success.yml +35 -35
  81. data/spec/fixtures/responses/schedule_messages/unauthorized/responds_with_unauthorize.yml +20 -19
  82. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_created.yml +24 -23
  83. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_success_message.yml +24 -23
  84. data/spec/fixtures/responses/send_messages/unauthorized/responds_with_unauthorized.yml +20 -18
  85. data/spec/fixtures/responses/send_messages/with_success/responds_with_created.yml +24 -22
  86. data/spec/fixtures/responses/send_messages/with_success/responds_with_success_message.yml +24 -22
  87. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml +71 -0
  88. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml +68 -0
  89. data/spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml +139 -0
  90. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_checking_subscribed_and_unsubscribed_user_status/returns_only_users_that_were_once_subscribed.yml +211 -0
  91. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml +199 -0
  92. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml +211 -0
  93. data/spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml +23 -21
  94. data/spec/fixtures/responses/track_users/with_success/responds_with_created.yml +22 -20
  95. data/spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml +22 -20
  96. data/spec/integrations/campaigns_spec.rb +6 -2
  97. data/spec/integrations/canvas_spec.rb +15 -2
  98. data/spec/integrations/create_user_aliases_spec.rb +32 -0
  99. data/spec/integrations/delete_users_spec.rb +3 -0
  100. data/spec/integrations/email_status_spec.rb +2 -0
  101. data/spec/integrations/email_sync_spec.rb +4 -2
  102. data/spec/integrations/export_users_spec.rb +4 -2
  103. data/spec/integrations/identify_users_spec.rb +32 -0
  104. data/spec/integrations/list_segments_spec.rb +3 -1
  105. data/spec/integrations/schedule_messages_spec.rb +4 -1
  106. data/spec/integrations/send_messages_spec.rb +4 -1
  107. data/spec/integrations/subscription_spec.rb +149 -0
  108. data/spec/integrations/track_users_spec.rb +3 -0
  109. data/spec/spec_helper.rb +2 -8
  110. data/spec/support/factory_bot.rb +2 -0
  111. data/spec/support/integrations.rb +7 -1
  112. data/spec/support/vcr.rb +5 -1
  113. metadata +68 -21
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BrazeRuby
4
+ module REST
5
+ class SubscriptionUserStatus < Base
6
+ attr_reader :params
7
+
8
+ def initialize(api_key, braze_url, options, **params)
9
+ @params = params
10
+ super api_key, braze_url, options
11
+ end
12
+
13
+ def perform
14
+ http.get('/subscription/user/status', {
15
+ **params
16
+ })
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrazeRuby
2
4
  module REST
3
5
  class TrackUsers < Base
4
- def perform(api_key, attributes: [], events: [], purchases: [])
6
+ def perform(attributes: [], events: [], purchases: [])
5
7
  http.post '/users/track', {
6
- 'api_key': api_key,
7
8
  'attributes': attributes,
8
9
  'events': events,
9
10
  'purchases': purchases
@@ -1,19 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrazeRuby
2
4
  module REST
3
5
  class TriggerCampaignSend < Base
4
- attr_reader :api_key, :params
6
+ attr_reader :params
5
7
 
6
- def initialize(api_key, braze_url, **params)
7
- @api_key = api_key
8
+ def initialize(api_key, braze_url, options, **params)
8
9
  @params = params
9
- super braze_url
10
+ super api_key, braze_url, options
10
11
  end
11
12
 
12
13
  def perform
13
- http.post('/campaigns/trigger/send', {
14
- 'api_key': api_key,
15
- **@params
16
- })
14
+ http.post('/campaigns/trigger/send', @params)
17
15
  end
18
16
  end
19
17
  end
@@ -1,17 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrazeRuby
2
4
  module REST
3
5
  class TriggerCanvasSend < Base
4
- attr_reader :api_key, :params
6
+ attr_reader :params
5
7
 
6
- def initialize(api_key, braze_url, **params)
7
- @api_key = api_key
8
+ def initialize(api_key, braze_url, options, **params)
8
9
  @params = params
9
- super braze_url
10
+ super api_key, braze_url, options
10
11
  end
11
12
 
12
13
  def perform
13
14
  http.post('/canvas/trigger/send', {
14
- 'api_key': api_key,
15
15
  **@params
16
16
  })
17
17
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BrazeRuby
2
- VERSION = '0.2.2'.freeze
4
+ VERSION = '0.4.1'.freeze
3
5
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe BrazeRuby::API do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  class API
@@ -21,7 +23,7 @@ describe BrazeRuby::Endpoints::DeleteUsers do
21
23
 
22
24
  it 'deletes users' do
23
25
  expect(delete_users_service).to receive(:perform)
24
- .with(:api_key, external_ids: payload)
26
+ .with(external_ids: payload)
25
27
 
26
28
  delete_users!
27
29
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  class API
@@ -21,11 +23,11 @@ describe BrazeRuby::Endpoints::TrackUsers do
21
23
  purchases: [build(:purchase)]
22
24
  }}
23
25
 
24
- subject(:track_users!) { api.track_users(payload) }
26
+ subject(:track_users!) { api.track_users(**payload) }
25
27
 
26
28
  it 'tracks attributes, events and purchases' do
27
29
  expect(track_users_service).to receive(:perform)
28
- .with(:api_key, payload)
30
+ .with(payload)
29
31
 
30
32
  track_users!
31
33
  end
@@ -34,11 +36,11 @@ describe BrazeRuby::Endpoints::TrackUsers do
34
36
  describe '#track_purchase' do
35
37
  let(:payload) { build(:purchase) }
36
38
 
37
- subject(:track_purchase!) { api.track_purchase(payload) }
39
+ subject(:track_purchase!) { api.track_purchase(**payload) }
38
40
 
39
41
  it 'tracks a single purchase' do
40
42
  expect(track_users_service).to receive(:perform)
41
- .with(:api_key, purchases: [payload])
43
+ .with(purchases: [payload])
42
44
 
43
45
  track_purchase!
44
46
  end
@@ -47,11 +49,11 @@ describe BrazeRuby::Endpoints::TrackUsers do
47
49
  describe '#track_event' do
48
50
  let(:payload) { build(:event) }
49
51
 
50
- subject(:track_event!) { api.track_event(payload) }
52
+ subject(:track_event!) { api.track_event(**payload) }
51
53
 
52
54
  it 'tracks a single purchase' do
53
55
  expect(track_users_service).to receive(:perform)
54
- .with(:api_key, events: [payload])
56
+ .with(events: [payload])
55
57
 
56
58
  track_event!
57
59
  end
@@ -60,11 +62,11 @@ describe BrazeRuby::Endpoints::TrackUsers do
60
62
  describe '#track_attribute' do
61
63
  let(:payload) { build(:attribute) }
62
64
 
63
- subject(:track_attribute!) { api.track_attribute(payload) }
65
+ subject(:track_attribute!) { api.track_attribute(**payload) }
64
66
 
65
67
  it 'tracks a single purchase' do
66
68
  expect(track_users_service).to receive(:perform)
67
- .with(:api_key, attributes: [payload])
69
+ .with(attributes: [payload])
68
70
 
69
71
  track_attribute!
70
72
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'braze_ruby/http'
5
+
6
+ describe BrazeRuby::HTTP do
7
+ describe "#connection" do
8
+ let(:options) { double("options", :"[]=" => nil) }
9
+ let(:headers) { double("headers", :"[]=" => nil) }
10
+ let(:conn) { double("conn", adapter: nil, options: options, headers: headers) }
11
+ let(:api_key) { "braze-api-key" }
12
+ let(:braze_url) { "http://example.com" }
13
+
14
+ before :each do
15
+ allow(Faraday).to receive(:new).and_yield(conn)
16
+ allow(Faraday).to receive(:default_adapter).and_return(:default_adapter)
17
+ end
18
+
19
+ it "it defaults to the timeout option" do
20
+ described_class.new(api_key, braze_url).connection
21
+
22
+ expect(options).to have_received(:"[]=").with(:timeout, described_class::DEFAULT_TIMEOUT)
23
+ end
24
+
25
+ it "it sets the default timeout option when given" do
26
+ timeout = 5
27
+ described_class.new(api_key, braze_url, {timeout: timeout}).connection
28
+
29
+ expect(options).to have_received(:"[]=").with(:timeout, timeout)
30
+ end
31
+
32
+ it "sets the headers" do
33
+ described_class.new(api_key, braze_url).connection
34
+
35
+
36
+ expect(headers).to have_received(:"[]=").with("Content-Type", "application/json")
37
+ expect(headers).to have_received(:"[]=").with("Accept", "application/json")
38
+ expect(headers).to have_received(:"[]=").with("User-Agent", "Braze Ruby gem v#{BrazeRuby::VERSION}")
39
+ expect(headers).to have_received(:"[]=").with("Authorization", "Bearer braze-api-key")
40
+ end
41
+
42
+ it "it sets the default adapter" do
43
+ described_class.new(api_key, braze_url).connection
44
+
45
+ expect(conn).to have_received(:adapter).with(:default_adapter)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe BrazeRuby::REST::CreateUserAliases do
6
+ let(:http) { double(:http) }
7
+
8
+ let(:payload) { {user_aliases: [user]} }
9
+ let(:user) { { user_alias: { alias_name: 'abc', alias_label: 'foo' } } }
10
+
11
+ let(:api_key) { :api_key }
12
+
13
+ subject { described_class.new :api_key, :rest_url, {}}
14
+
15
+ before { subject.http = http }
16
+
17
+ it 'makes an http call to the user aliases endpoint' do
18
+ expect(http).to receive(:post).with '/users/alias/new',
19
+ payload
20
+
21
+ subject.perform(**payload)
22
+ end
23
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe BrazeRuby::REST::DeleteUsers do
@@ -7,14 +9,14 @@ describe BrazeRuby::REST::DeleteUsers do
7
9
 
8
10
  let(:api_key) { :api_key }
9
11
 
10
- subject { described_class.new :rest_url}
12
+ subject { described_class.new :api_key, :rest_url, {}}
11
13
 
12
14
  before { subject.http = http }
13
15
 
14
16
  it 'makes an http call to the delete user endpoint' do
15
17
  expect(http).to receive(:post).with '/users/delete',
16
- payload.merge({ api_key: :api_key })
18
+ payload
17
19
 
18
- subject.perform(api_key, payload)
20
+ subject.perform(**payload)
19
21
  end
20
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe BrazeRuby::REST::EmailStatus do
@@ -5,11 +7,10 @@ describe BrazeRuby::REST::EmailStatus do
5
7
 
6
8
  before { subject.http = http }
7
9
 
8
- subject { described_class.new(:api_key, :rest_url, email: :email, status: :status) }
10
+ subject { described_class.new(:api_key, :rest_url, {}, email: :email, status: :status) }
9
11
 
10
12
  it 'makes an http call to the email status endpoint' do
11
13
  expect(http).to receive(:post).with '/email/status', {
12
- api_key: :api_key,
13
14
  email: :email,
14
15
  subscription_state: :status
15
16
  }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe BrazeRuby::REST::ExportUsers do
@@ -6,14 +8,14 @@ describe BrazeRuby::REST::ExportUsers do
6
8
  let(:payload) {{ external_ids: external_ids }}
7
9
  let(:external_ids) { [1] }
8
10
 
9
- subject { described_class.new :rest_url }
11
+ subject { described_class.new :api_key, :rest_url, {} }
10
12
 
11
13
  before { subject.http = http }
12
14
 
13
15
  it 'makes an http call to the track user endpoint' do
14
16
  expect(http).to receive(:post).with '/users/export/ids',
15
- payload.merge({ api_key: :api_key })
17
+ payload
16
18
 
17
- subject.perform(:api_key, payload)
19
+ subject.perform(**payload)
18
20
  end
19
21
  end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe BrazeRuby::REST::IdentifyUsers do
6
+ let(:http) { double(:http) }
7
+
8
+ let(:payload) { {aliases_to_identify: [user]} }
9
+ let(:user) { { external_id: 123, user_alias: { alias_name: 'abc', alias_label: 'foo' } } }
10
+
11
+ let(:api_key) { :api_key }
12
+
13
+ subject { described_class.new :api_key, :rest_url, {}}
14
+
15
+ before { subject.http = http }
16
+
17
+ it 'makes an http call to the identify users endpoint' do
18
+ expect(http).to receive(:post).with '/users/identify',
19
+ payload
20
+
21
+ subject.perform(**payload)
22
+ end
23
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe BrazeRuby::REST::ScheduleMessages do
@@ -12,7 +14,7 @@ describe BrazeRuby::REST::ScheduleMessages do
12
14
 
13
15
  let(:api_key) { :api_key }
14
16
 
15
- subject { described_class.new(api_key, :rest_url, payload) }
17
+ subject { described_class.new(api_key, :rest_url, {}, **payload) }
16
18
 
17
19
  before { subject.http = http }
18
20
 
@@ -24,7 +26,6 @@ describe BrazeRuby::REST::ScheduleMessages do
24
26
 
25
27
  def expect_schedule_messages_http_call
26
28
  expect(http).to receive(:post).with '/messages/schedule/create', {
27
- api_key: api_key,
28
29
  external_user_ids: :external_user_ids,
29
30
  schedule: {
30
31
  time: :time,
@@ -1,18 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe BrazeRuby::REST::SendMessages do
4
6
  let(:http) { double(:http) }
5
7
 
6
- let(:payload) {{
7
- messages: :messages,
8
- external_user_ids: :external_user_ids,
9
- }}
10
-
11
- let(:api_key) { :api_key }
12
-
13
- subject { described_class.new(api_key,
14
- messages: :messages,
15
- external_user_ids: :external_user_ids
8
+ subject { described_class.new(
9
+ :api_key,
10
+ :rest_url,
11
+ {},
12
+ messages: ["message"],
13
+ external_user_ids: ["1", "2"]
16
14
  ) }
17
15
 
18
16
  before { subject.http = http }
@@ -25,9 +23,8 @@ describe BrazeRuby::REST::SendMessages do
25
23
 
26
24
  def expect_send_messages_http_call
27
25
  expect(http).to receive(:post).with '/messages/send', {
28
- api_key: :api_key,
29
- messages: [],
30
- external_user_ids: [],
26
+ messages: ["message"],
27
+ external_user_ids: ["1", "2"],
31
28
  }
32
29
  end
33
30
  end
@@ -1,24 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe BrazeRuby::REST::TrackUsers do
4
6
  let(:http) { double(:http) }
5
7
 
6
- let(:payload) {{
7
- attributes: :attributes,
8
- events: :events,
9
- purchases: :purchases
10
- }}
8
+ let(:payload) do
9
+ {
10
+ attributes: :attributes,
11
+ events: :events,
12
+ purchases: :purchases
13
+ }
14
+ end
11
15
 
12
16
  let(:api_key) { :api_key }
13
17
 
14
- subject { described_class.new :rest_url}
18
+ subject { described_class.new :api_key, :rest_url, {}}
15
19
 
16
20
  before { subject.http = http }
17
21
 
18
22
  it 'makes an http call to the track user endpoint' do
19
- expect(http).to receive(:post).with '/users/track',
20
- payload.merge({ api_key: :api_key })
23
+ expect(http).to receive(:post).with '/users/track', payload
21
24
 
22
- subject.perform(api_key, payload)
25
+ subject.perform(**payload)
23
26
  end
24
27
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  FactoryBot.define do
2
4
  factory :attribute, class: Hash do
3
5
  skip_create