braze_ruby 0.4.1 → 0.7.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 (117) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +26 -0
  3. data/.github/workflows/gem_credentials +2 -0
  4. data/.github/workflows/release.yml +20 -0
  5. data/.gitignore +12 -19
  6. data/.standard.yml +1 -0
  7. data/Gemfile +1 -2
  8. data/LICENSE.txt +17 -18
  9. data/README.md +39 -2
  10. data/Rakefile +2 -1
  11. data/bin/release +16 -0
  12. data/braze_ruby.gemspec +28 -31
  13. data/lib/braze_ruby/api.rb +16 -10
  14. data/lib/braze_ruby/deprecated.rb +4 -5
  15. data/lib/braze_ruby/endpoints/campaigns.rb +4 -0
  16. data/lib/braze_ruby/endpoints/remove_email_addresses_from_spam.rb +19 -0
  17. data/lib/braze_ruby/endpoints/remove_external_ids.rb +19 -0
  18. data/lib/braze_ruby/endpoints/rename_external_ids.rb +19 -0
  19. data/lib/braze_ruby/endpoints/subscription.rb +0 -1
  20. data/lib/braze_ruby/endpoints.rb +11 -8
  21. data/lib/braze_ruby/http.rb +12 -9
  22. data/lib/braze_ruby/rest/base.rb +3 -3
  23. data/lib/braze_ruby/rest/canvas_details.rb +1 -1
  24. data/lib/braze_ruby/rest/create_user_aliases.rb +2 -2
  25. data/lib/braze_ruby/rest/delete_users.rb +2 -2
  26. data/lib/braze_ruby/rest/email_hard_bounces.rb +1 -1
  27. data/lib/braze_ruby/rest/email_status.rb +3 -3
  28. data/lib/braze_ruby/rest/email_unsubscribes.rb +1 -1
  29. data/lib/braze_ruby/rest/export_users.rb +7 -7
  30. data/lib/braze_ruby/rest/identify_users.rb +2 -2
  31. data/lib/braze_ruby/rest/list_segments.rb +1 -1
  32. data/lib/braze_ruby/rest/remove_email_addresses_from_spam.rb +13 -0
  33. data/lib/braze_ruby/rest/remove_external_ids.rb +13 -0
  34. data/lib/braze_ruby/rest/rename_external_ids.rb +13 -0
  35. data/lib/braze_ruby/rest/schedule_messages.rb +6 -6
  36. data/lib/braze_ruby/rest/send_messages.rb +3 -3
  37. data/lib/braze_ruby/rest/subscription_status_get.rb +1 -1
  38. data/lib/braze_ruby/rest/subscription_status_set.rb +1 -1
  39. data/lib/braze_ruby/rest/subscription_user_status.rb +1 -1
  40. data/lib/braze_ruby/rest/track_users.rb +4 -4
  41. data/lib/braze_ruby/rest/trigger_campaign_schedule.rb +18 -0
  42. data/lib/braze_ruby/rest/trigger_campaign_send.rb +1 -1
  43. data/lib/braze_ruby/rest/trigger_canvas_send.rb +1 -1
  44. data/lib/braze_ruby/rest.rb +22 -18
  45. data/lib/braze_ruby/version.rb +1 -1
  46. data/lib/braze_ruby.rb +4 -4
  47. metadata +52 -177
  48. data/.github/workflows/ci.yml +0 -30
  49. data/Gemfile.lock +0 -78
  50. data/spec/braze_ruby/api_spec.rb +0 -6
  51. data/spec/braze_ruby/endpoints/delete_users_spec.rb +0 -31
  52. data/spec/braze_ruby/endpoints/track_users_spec.rb +0 -74
  53. data/spec/braze_ruby/http_spec.rb +0 -48
  54. data/spec/braze_ruby/rest/create_user_aliases_spec.rb +0 -23
  55. data/spec/braze_ruby/rest/delete_users_spec.rb +0 -22
  56. data/spec/braze_ruby/rest/email_status_spec.rb +0 -20
  57. data/spec/braze_ruby/rest/export_users_spec.rb +0 -21
  58. data/spec/braze_ruby/rest/identify_users_spec.rb +0 -23
  59. data/spec/braze_ruby/rest/schedule_messages_spec.rb +0 -37
  60. data/spec/braze_ruby/rest/send_messages_spec.rb +0 -30
  61. data/spec/braze_ruby/rest/track_users_spec.rb +0 -27
  62. data/spec/factories.rb +0 -38
  63. data/spec/fixtures/responses/campaigns/trigger_send/sends_an_email.yml +0 -71
  64. data/spec/fixtures/responses/canvas/details/returns_error_when_no_canvas.yml +0 -69
  65. data/spec/fixtures/responses/canvas/trigger_send/sends_a_canvas.yml +0 -71
  66. data/spec/fixtures/responses/create_user_aliases/unauthorized/responds_with_unauthorized.yml +0 -67
  67. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_created.yml +0 -71
  68. data/spec/fixtures/responses/create_user_aliases/with_success/responds_with_success_message.yml +0 -71
  69. data/spec/fixtures/responses/delete_users/unauthorized/responds_with_unauthorized.yml +0 -68
  70. data/spec/fixtures/responses/delete_users/with_success/responds_with_created.yml +0 -71
  71. data/spec/fixtures/responses/delete_users/with_success/responds_with_success_message.yml +0 -71
  72. data/spec/fixtures/responses/email_status/existing_email/responds_with_created.yml +0 -71
  73. data/spec/fixtures/responses/email_status/existing_email/responds_with_success_message.yml +0 -71
  74. data/spec/fixtures/responses/email_status/unknown_email/responds_with_bad_request.yml +0 -71
  75. data/spec/fixtures/responses/email_status/unknown_email/responds_with_success_message.yml +0 -71
  76. data/spec/fixtures/responses/email_sync/hard_bounces/responds_with_empty_array_when_no_hard_bounces.yml +0 -75
  77. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_empty_array_when_no_unsubscribes.yml +0 -75
  78. data/spec/fixtures/responses/email_sync/unsubscribes/responds_with_unsubscribed_emails.yml +0 -75
  79. data/spec/fixtures/responses/export_users/by_ids/with_success/responds_with_created.yml +0 -72
  80. data/spec/fixtures/responses/export_users/by_segment/with_success/responds_with_created.yml +0 -71
  81. data/spec/fixtures/responses/identify_users/unauthorized/responds_with_unauthorized.yml +0 -68
  82. data/spec/fixtures/responses/identify_users/with_success/responds_with_created.yml +0 -71
  83. data/spec/fixtures/responses/identify_users/with_success/responds_with_success_message.yml +0 -71
  84. data/spec/fixtures/responses/list_segments/with_success/responds_with_a_list_of_segments.yml +0 -81
  85. data/spec/fixtures/responses/list_segments/with_success/responds_with_success.yml +0 -81
  86. data/spec/fixtures/responses/schedule_messages/unauthorized/responds_with_unauthorize.yml +0 -68
  87. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_created.yml +0 -71
  88. data/spec/fixtures/responses/schedule_messages/with_success/responds_with_success_message.yml +0 -71
  89. data/spec/fixtures/responses/send_messages/unauthorized/responds_with_unauthorized.yml +0 -68
  90. data/spec/fixtures/responses/send_messages/with_success/responds_with_created.yml +0 -71
  91. data/spec/fixtures/responses/send_messages/with_success/responds_with_success_message.yml +0 -71
  92. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscribing/subscribes_the_user.yml +0 -71
  93. data/spec/fixtures/responses/subscription/subscription_status_set/when_subscription_group_does_not_exist/returns_an_error_status.yml +0 -68
  94. data/spec/fixtures/responses/subscription/subscription_status_set/when_unsubscribing/unsubscribes_the_user.yml +0 -139
  95. 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 +0 -211
  96. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_status_get/when_group_does_not_exist/returns_an_error.yml +0 -199
  97. data/spec/fixtures/responses/subscription/when_getting_subscription_group_statuses/subscription_user_status/returns_subscription_groups_and_status_for_every_group.yml +0 -211
  98. data/spec/fixtures/responses/track_users/unauthorized/responds_with_unauthorized.yml +0 -70
  99. data/spec/fixtures/responses/track_users/with_success/responds_with_created.yml +0 -73
  100. data/spec/fixtures/responses/track_users/with_success/responds_with_success_message.yml +0 -73
  101. data/spec/integrations/campaigns_spec.rb +0 -19
  102. data/spec/integrations/canvas_spec.rb +0 -28
  103. data/spec/integrations/create_user_aliases_spec.rb +0 -32
  104. data/spec/integrations/delete_users_spec.rb +0 -32
  105. data/spec/integrations/email_status_spec.rb +0 -38
  106. data/spec/integrations/email_sync_spec.rb +0 -31
  107. data/spec/integrations/export_users_spec.rb +0 -29
  108. data/spec/integrations/identify_users_spec.rb +0 -32
  109. data/spec/integrations/list_segments_spec.rb +0 -21
  110. data/spec/integrations/schedule_messages_spec.rb +0 -34
  111. data/spec/integrations/send_messages_spec.rb +0 -33
  112. data/spec/integrations/subscription_spec.rb +0 -149
  113. data/spec/integrations/track_users_spec.rb +0 -38
  114. data/spec/spec_helper.rb +0 -25
  115. data/spec/support/factory_bot.rb +0 -12
  116. data/spec/support/integrations.rb +0 -27
  117. data/spec/support/vcr.rb +0 -20
@@ -1,73 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: "<BRAZE_REST_URL>/users/track"
6
- body:
7
- encoding: UTF-8
8
- string: '{"attributes":[{"external_id":1,"foo":"bar"}],"events":[{"external_id":1,"name":"baz","time":"2019-02-15
9
- 00:00:00 -0500"}],"purchases":[{"external_id":1,"product_id":1,"time":"2019-02-15
10
- 00:00:00 -0500","currency":"CAD","price":1.0}]}'
11
- headers:
12
- Content-Type:
13
- - application/json
14
- Accept:
15
- - application/json
16
- User-Agent:
17
- - Braze Ruby gem v0.3.3
18
- Authorization:
19
- - Bearer <BRAZE_REST_API_KEY>
20
- Accept-Encoding:
21
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
22
- response:
23
- status:
24
- code: 201
25
- message: Created
26
- headers:
27
- Connection:
28
- - keep-alive
29
- Content-Length:
30
- - '85'
31
- Cache-Control:
32
- - max-age=0, private, must-revalidate
33
- Content-Type:
34
- - application/json
35
- Etag:
36
- - W/"68b326343749fed4d6cc5dda395b5367"
37
- Server:
38
- - nginx
39
- Strict-Transport-Security:
40
- - max-age=0; includeSubDomains
41
- - max-age=31536000; includeSubDomains
42
- X-Ratelimit-Limit:
43
- - '250000'
44
- X-Ratelimit-Remaining:
45
- - '250000'
46
- X-Ratelimit-Reset:
47
- - '1592427600'
48
- X-Request-Id:
49
- - 2e7a73fc-7efe-4c04-b837-c696cb10735a
50
- X-Runtime:
51
- - '0.007710'
52
- Accept-Ranges:
53
- - bytes
54
- Date:
55
- - Wed, 17 Jun 2020 20:31:42 GMT
56
- Via:
57
- - 1.1 varnish
58
- X-Served-By:
59
- - cache-hhn4030-HHN
60
- X-Cache:
61
- - MISS
62
- X-Cache-Hits:
63
- - '0'
64
- X-Timer:
65
- - S1592425903.632582,VS0,VE10
66
- Vary:
67
- - Origin,Accept-Encoding
68
- body:
69
- encoding: ASCII-8BIT
70
- string: '{"attributes_processed":1,"events_processed":1,"purchases_processed":1,"message":"success"}'
71
- http_version:
72
- recorded_at: Wed, 17 Jun 2020 20:31:42 GMT
73
- recorded_with: VCR 5.0.0
@@ -1,73 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: "<BRAZE_REST_URL>/users/track"
6
- body:
7
- encoding: UTF-8
8
- string: '{"attributes":[{"external_id":1,"foo":"bar"}],"events":[{"external_id":1,"name":"baz","time":"2019-02-15
9
- 00:00:00 -0500"}],"purchases":[{"external_id":1,"product_id":1,"time":"2019-02-15
10
- 00:00:00 -0500","currency":"CAD","price":1.0}]}'
11
- headers:
12
- Content-Type:
13
- - application/json
14
- Accept:
15
- - application/json
16
- User-Agent:
17
- - Braze Ruby gem v0.3.3
18
- Authorization:
19
- - Bearer <BRAZE_REST_API_KEY>
20
- Accept-Encoding:
21
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
22
- response:
23
- status:
24
- code: 201
25
- message: Created
26
- headers:
27
- Connection:
28
- - keep-alive
29
- Content-Length:
30
- - '85'
31
- Cache-Control:
32
- - max-age=0, private, must-revalidate
33
- Content-Type:
34
- - application/json
35
- Etag:
36
- - W/"68b326343749fed4d6cc5dda395b5367"
37
- Server:
38
- - nginx
39
- Strict-Transport-Security:
40
- - max-age=0; includeSubDomains
41
- - max-age=31536000; includeSubDomains
42
- X-Ratelimit-Limit:
43
- - '250000'
44
- X-Ratelimit-Remaining:
45
- - '250000'
46
- X-Ratelimit-Reset:
47
- - '1592427600'
48
- X-Request-Id:
49
- - 75dc3ac0-d4d2-4278-89d0-b29e540dc719
50
- X-Runtime:
51
- - '0.008741'
52
- Accept-Ranges:
53
- - bytes
54
- Date:
55
- - Wed, 17 Jun 2020 20:31:42 GMT
56
- Via:
57
- - 1.1 varnish
58
- X-Served-By:
59
- - cache-hhn4063-HHN
60
- X-Cache:
61
- - MISS
62
- X-Cache-Hits:
63
- - '0'
64
- X-Timer:
65
- - S1592425903.749169,VS0,VE11
66
- Vary:
67
- - Origin,Accept-Encoding
68
- body:
69
- encoding: ASCII-8BIT
70
- string: '{"attributes_processed":1,"events_processed":1,"purchases_processed":1,"message":"success"}'
71
- http_version:
72
- recorded_at: Wed, 17 Jun 2020 20:31:42 GMT
73
- recorded_with: VCR 5.0.0
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'campaigns' do
6
- describe 'trigger_send' do
7
- it 'sends an email', vcr: true do
8
- response = api.trigger_campaign_send(
9
- campaign_id: 'd8b73da7-0b7c-fc72-1d80-e59c7f20f0d3',
10
- recipients: [
11
- external_user_id: 12345,
12
- trigger_properties: {first_name: 'John'}
13
- ]
14
- )
15
-
16
- expect(response.success?).to eq(true)
17
- end
18
- end
19
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'canvas' do
6
- describe 'trigger_send' do
7
- it 'sends a canvas', vcr: true do
8
- response = api.trigger_canvas_send(
9
- canvas_id: '70a7fb99-cbcb-451a-8224-5f8b8c63e03f',
10
- recipients: [
11
- external_user_id: 12345,
12
- canvas_entry_properties: {first_name: 'John'}
13
- ]
14
- )
15
-
16
- expect(response.success?).to eq(true)
17
- end
18
- end
19
-
20
- describe 'details' do
21
- it 'returns error when no canvas', vcr: true do
22
- response = api.canvas_details(
23
- canvas_id: 'non-existing'
24
- )
25
- expect(response.status).to eq(400)
26
- end
27
- end
28
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'create user aliases' do
6
- let(:user) { { user_alias: { alias_name: 'abc', alias_label: 'foo' } } }
7
-
8
- subject(:create_user_aliases) do
9
- api.create_user_aliases(user_aliases: [user])
10
- end
11
-
12
- context 'with success', vcr: true do
13
- it 'responds with created' do
14
- expect(create_user_aliases.status).to be 201
15
- end
16
-
17
- it 'responds with success message' do
18
- expect(JSON.parse(create_user_aliases.body)).to eq(
19
- 'aliases_processed' => 1,
20
- 'message' => 'success'
21
- )
22
- end
23
- end
24
-
25
- context 'unauthorized', vcr: true do
26
- let(:api_key) { 'non-existent' }
27
-
28
- it 'responds with unauthorized' do
29
- expect(create_user_aliases.status).to be 401
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'delete users' do
6
- let(:external_ids) { [400, 401, 402] }
7
-
8
- subject(:delete_users) do
9
- api.delete_users(external_ids)
10
- end
11
-
12
- context 'with success', vcr: true do
13
- it 'responds with created' do
14
- expect(delete_users.status).to be 201
15
- end
16
-
17
- it 'responds with success message' do
18
- expect(JSON.parse(delete_users.body)).to include(
19
- 'deleted' => 3,
20
- 'message' => 'success'
21
- )
22
- end
23
- end
24
-
25
- context 'unauthorized', vcr: true do
26
- let(:api_key) { 'non-existent' }
27
-
28
- it 'responds with unauthorized' do
29
- expect(delete_users.status).to be 401
30
- end
31
- end
32
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'email status' do
6
- let(:email) { 'john@example.com' }
7
- let(:status) { :unsubscribed }
8
-
9
- subject do
10
- api.email_status(email: email, status: status)
11
- end
12
-
13
- context 'existing email', vcr: true do
14
- it 'responds with created' do
15
- expect(subject.status).to be 201
16
- end
17
-
18
- it 'responds with success message' do
19
- expect(JSON.parse(subject.body)).to eq(
20
- 'message' => 'success'
21
- )
22
- end
23
- end
24
-
25
- context 'unknown email', vcr: true do
26
- let(:email) { 'notthere@example.com' }
27
-
28
- it 'responds with bad request' do
29
- expect(subject.status).to be 201
30
- end
31
-
32
- it 'responds with success message' do
33
- expect(JSON.parse(subject.body)).to eq(
34
- 'message' => 'success'
35
- )
36
- end
37
- end
38
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'email sync' do
6
- describe 'unsubscribes' do
7
- it 'responds with unsubscribed emails', vcr: true do
8
- response = api.email_unsubscribes(start_date: '2020-06-17', end_date: '2020-06-18')
9
- emails = JSON.parse(response.body)['emails']
10
-
11
- expect(emails.size).to eq(1)
12
- expect(emails.first['email']).to eq('example@123.com')
13
- end
14
-
15
- it 'responds with empty array when no unsubscribes', vcr: true do
16
- response = api.email_unsubscribes(start_date: '2019-02-20', end_date: '2019-02-25')
17
- emails = JSON.parse(response.body)['emails']
18
-
19
- expect(emails.size).to eq(0)
20
- end
21
- end
22
-
23
- describe 'hard_bounces' do
24
- it 'responds with empty array when no hard bounces', vcr: true do
25
- response = api.email_hard_bounces(start_date: '2019-02-20', end_date: '2019-02-25')
26
- emails = JSON.parse(response.body)['emails']
27
-
28
- expect(emails.size).to eq(0)
29
- end
30
- end
31
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'export users' do
6
- context 'by ids' do
7
- subject(:export_users) { api.export_users(external_ids: [12345]) }
8
-
9
- context 'with success', :vcr do
10
- it 'responds with created' do
11
- expect(export_users).to be_success
12
- end
13
- end
14
- end
15
-
16
- context 'by segment' do
17
- context 'with success', :vcr do
18
- let(:segment_id) { "3aca937b-9bbc-4e42-9370-05e411967b2b" }
19
-
20
- subject(:export_users) do
21
- api.export_users(segment_id: segment_id, callback_endpoint: 'https://example.com')
22
- end
23
-
24
- it 'responds with created' do
25
- expect(export_users).to be_success
26
- end
27
- end
28
- end
29
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'identify users' do
6
- let(:user) { { external_id: 12345, user_alias: { alias_name: 'abc', alias_label: 'foo' } } }
7
-
8
- subject(:identify_users) do
9
- api.identify_users(aliases_to_identify: [user])
10
- end
11
-
12
- context 'with success', vcr: true do
13
- it 'responds with created' do
14
- expect(identify_users.status).to be 201
15
- end
16
-
17
- it 'responds with success message' do
18
- expect(JSON.parse(identify_users.body)).to eq(
19
- 'aliases_processed' => 1,
20
- 'message' => 'success'
21
- )
22
- end
23
- end
24
-
25
- context 'unauthorized', vcr: true do
26
- let(:api_key) { 'non-existent' }
27
-
28
- it 'responds with unauthorized' do
29
- expect(identify_users.status).to be 401
30
- end
31
- end
32
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'list segments' do
6
- subject(:list_segments) { api.list_segments }
7
-
8
- context 'with success', :vcr do
9
- it 'responds with success' do
10
- expect(list_segments).to be_success
11
- end
12
-
13
- it 'responds with a list of segments' do
14
- expect(segments.count).to be 6
15
- end
16
-
17
- def segments
18
- JSON.parse(list_segments.body)['segments']
19
- end
20
- end
21
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'schedule messages' do
6
- let(:user_ids) { [12345] }
7
- let(:test_time) { "2020-08-07T00:00:00+02:00" }
8
- let(:messages) { build(:messages) }
9
-
10
- subject(:schedule_messages) do
11
- api.schedule_messages(time: test_time,
12
- messages: messages, external_user_ids: user_ids)
13
- end
14
-
15
- context 'with success', vcr: true do
16
- it 'responds with created' do
17
- expect(schedule_messages.status).to be 201
18
- end
19
-
20
- it 'responds with success message' do
21
- expect(JSON.parse(schedule_messages.body)).to include(
22
- 'message' => 'success'
23
- )
24
- end
25
- end
26
-
27
- context 'unauthorized', vcr: true do
28
- let(:api_key) { 'non-existent' }
29
-
30
- it 'responds with unauthorize' do
31
- expect(schedule_messages.status).to be 401
32
- end
33
- end
34
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'send messages' do
6
- let(:user_ids) { [12345] }
7
- let(:messages) { build(:messages) }
8
-
9
- subject(:send_messages) do
10
- api.send_messages(messages: messages, external_user_ids: user_ids)
11
- end
12
-
13
- context 'with success', vcr: true do
14
- it 'responds with created' do
15
- expect(send_messages.status).to be 201
16
- end
17
-
18
- it 'responds with success message' do
19
- expect(JSON.parse(send_messages.body)).to eq(
20
- 'dispatch_id' => "ea0532cddfc97cd4e5767b351d6af0eb",
21
- 'message' => 'success'
22
- )
23
- end
24
- end
25
-
26
- context 'unauthorized', vcr: true do
27
- let(:api_key) { 'non-existent' }
28
-
29
- it 'responds with unauthorized' do
30
- expect(send_messages.status).to be 401
31
- end
32
- end
33
- end
@@ -1,149 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- RSpec.describe 'subscription', vcr: true do
6
- let(:subscription_group_id) { 'ed06e19a-69b1-4f9b-a452-2db2c4e303a8' }
7
- let(:subscribed_user) { 'test-user-1' }
8
- let(:unsubscribed_user) { 'test-user-2' }
9
- let(:never_subscribed_user) { 'test-user-3' }
10
-
11
- context 'when getting subscription group statuses' do
12
- let(:json_response) { JSON.parse(response.body) }
13
-
14
- before do
15
- api.subscription_status_set(
16
- external_id: subscribed_user,
17
- subscription_group_id: subscription_group_id,
18
- subscription_state: 'subscribed'
19
- )
20
-
21
- api.subscription_status_set(
22
- external_id: unsubscribed_user,
23
- subscription_group_id: subscription_group_id,
24
- subscription_state: 'unsubscribed'
25
- )
26
- end
27
-
28
- describe 'subscription_user_status' do
29
- subject(:response) do
30
- api.subscription_user_status(
31
- external_id: external_id,
32
- )
33
- end
34
-
35
- let(:external_id) { [subscribed_user, unsubscribed_user, never_subscribed_user] }
36
-
37
- it 'returns subscription groups and status for every group' do
38
- expect(response.status).to eq(200)
39
- expect(json_response).to match(
40
- 'message' => 'success',
41
- 'total_count' => 3,
42
- 'users' => [
43
- hash_including(
44
- 'external_id' => subscribed_user,
45
- 'subscription_groups' => [
46
- hash_including(
47
- 'id' => subscription_group_id,
48
- 'status' => 'Subscribed'
49
- )
50
- ]
51
- ),
52
- hash_including(
53
- 'external_id' => unsubscribed_user,
54
- 'subscription_groups' => [
55
- hash_including(
56
- 'id' => subscription_group_id,
57
- 'status' => 'Unsubscribed'
58
- )
59
- ]
60
- ),
61
- hash_including(
62
- 'external_id' => never_subscribed_user,
63
- 'subscription_groups' => []
64
- )
65
- ]
66
- )
67
- end
68
- end
69
-
70
- describe 'subscription_status_get' do
71
- subject(:response) do
72
- api.subscription_status_get(
73
- external_id: external_id,
74
- subscription_group_id: subscription_group_id
75
- )
76
- end
77
-
78
- context 'when checking subscribed and unsubscribed user status' do
79
- let(:external_id) { [subscribed_user, unsubscribed_user, never_subscribed_user] }
80
-
81
- it 'returns only users that were once subscribed' do
82
- expect(response.status).to eq(200)
83
- expect(json_response).to eq(
84
- 'message' => 'success',
85
- 'status' => {
86
- 'test-user-1' => 'Subscribed',
87
- 'test-user-2' => 'Unsubscribed',
88
- 'test-user-3' => 'unknown'
89
- }
90
- )
91
- end
92
- end
93
-
94
- context 'when group does not exist' do
95
- let(:external_id) { subscribed_user }
96
- let(:subscription_group_id) { 'non-existing-subscription-group' }
97
-
98
- it 'returns an error' do
99
- expect(response.status).to eq(400)
100
- end
101
- end
102
- end
103
-
104
- end
105
-
106
- describe 'subscription_status_set' do
107
- subject(:response) do
108
- api.subscription_status_set(
109
- external_id: external_id,
110
- subscription_group_id: subscription_group_id,
111
- subscription_state: subscription_state
112
- )
113
- end
114
-
115
- let(:external_id) { subscribed_user }
116
- let(:subscription_state) { 'subscribed' }
117
-
118
- context 'when subscribing' do
119
- it 'subscribes the user' do
120
- expect(response.status).to eq(201)
121
- end
122
- end
123
-
124
- context 'when unsubscribing' do
125
- let(:external_id) { unsubscribed_user }
126
- let(:subscription_state) { 'unsubscribed' }
127
-
128
- before do
129
- api.subscription_status_set(
130
- external_id: external_id,
131
- subscription_group_id: subscription_group_id,
132
- subscription_state: 'subscribed'
133
- )
134
- end
135
-
136
- it 'unsubscribes the user' do
137
- expect(response.status).to eq(201)
138
- end
139
- end
140
-
141
- context 'when subscription group does not exist' do
142
- let(:subscription_group_id) { 'non-existing-subscription-group' }
143
-
144
- it 'returns an error status' do
145
- expect(response.status).to eq(400)
146
- end
147
- end
148
- end
149
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe 'track users' do
6
- let(:attributes) { [build(:attribute)] }
7
- let(:test_time) { Time.parse('2019-02-15 00:00:00 -0500') }
8
- let(:events) { [build(:event, time: test_time)] }
9
- let(:purchases) { [build(:purchase, time: test_time)] }
10
-
11
- subject(:track_users) do
12
- api.track_users(attributes: attributes,
13
- events: events, purchases: purchases)
14
- end
15
-
16
- context 'with success', vcr: true do
17
- it 'responds with created' do
18
- expect(track_users.status).to be 201
19
- end
20
-
21
- it 'responds with success message' do
22
- expect(JSON.parse(track_users.body)).to eq(
23
- 'attributes_processed' => 1,
24
- 'events_processed' => 1,
25
- 'purchases_processed' => 1,
26
- 'message' => 'success'
27
- )
28
- end
29
- end
30
-
31
- context 'unauthorized', vcr: true do
32
- let(:api_key) { 'non-existent' }
33
-
34
- it 'responds with unauthorized' do
35
- expect(track_users.status).to be 401
36
- end
37
- end
38
- end