braze_ruby 0.2.2 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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