activity_notification 2.1.2 → 2.2.2
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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -16
- data/CHANGELOG.md +52 -0
- data/Gemfile +2 -3
- data/README.md +2 -2
- data/activity_notification.gemspec +1 -1
- data/app/channels/activity_notification/notification_api_with_devise_channel.rb +1 -1
- data/app/channels/activity_notification/notification_channel.rb +1 -1
- data/app/channels/activity_notification/notification_with_devise_channel.rb +1 -1
- data/app/controllers/activity_notification/notifications_controller.rb +0 -20
- data/app/controllers/activity_notification/subscriptions_api_controller.rb +1 -1
- data/app/controllers/activity_notification/subscriptions_controller.rb +2 -2
- data/app/views/activity_notification/subscriptions/default/_form.html.erb +1 -1
- data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +2 -2
- data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +2 -2
- data/app/views/activity_notification/subscriptions/default/index.html.erb +2 -2
- data/app/views/activity_notification/subscriptions/default/show.html.erb +2 -2
- data/bin/bundle_update.sh +0 -1
- data/docs/Functions.md +19 -3
- data/docs/Setup.md +190 -63
- data/gemfiles/Gemfile.rails-5.0 +3 -1
- data/gemfiles/Gemfile.rails-5.1 +3 -1
- data/gemfiles/Gemfile.rails-5.2 +3 -1
- data/gemfiles/Gemfile.rails-6.0 +2 -3
- data/gemfiles/{Gemfile.rails-4.2 → Gemfile.rails-6.1} +4 -5
- data/lib/activity_notification/apis/notification_api.rb +7 -0
- data/lib/activity_notification/apis/subscription_api.rb +5 -5
- data/lib/activity_notification/common.rb +15 -4
- data/lib/activity_notification/config.rb +53 -23
- data/lib/activity_notification/controllers/common_controller.rb +2 -18
- data/lib/activity_notification/models/concerns/notifiable.rb +12 -12
- data/lib/activity_notification/models/concerns/subscriber.rb +6 -4
- data/lib/activity_notification/models/concerns/swagger/notification_schema.rb +34 -34
- data/lib/activity_notification/models/concerns/swagger/subscription_schema.rb +17 -17
- data/lib/activity_notification/models/concerns/target.rb +8 -12
- data/lib/activity_notification/optional_targets/action_cable_api_channel.rb +1 -1
- data/lib/activity_notification/optional_targets/action_cable_channel.rb +1 -1
- data/lib/activity_notification/orm/active_record.rb +1 -1
- data/lib/activity_notification/orm/active_record/notification.rb +3 -3
- data/lib/activity_notification/orm/dynamoid.rb +10 -3
- data/lib/activity_notification/orm/dynamoid/notification.rb +49 -14
- data/lib/activity_notification/orm/dynamoid/subscription.rb +2 -2
- data/lib/activity_notification/orm/mongoid.rb +10 -3
- data/lib/activity_notification/orm/mongoid/notification.rb +8 -6
- data/lib/activity_notification/orm/mongoid/subscription.rb +1 -1
- data/lib/activity_notification/renderable.rb +2 -2
- data/lib/activity_notification/roles/acts_as_notifiable.rb +13 -16
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/templates/activity_notification.rb +11 -1
- data/lib/generators/templates/migrations/migration.rb +1 -1
- data/spec/channels/notification_api_channel_spec.rb +42 -44
- data/spec/channels/notification_api_with_devise_channel_spec.rb +57 -59
- data/spec/channels/notification_channel_spec.rb +41 -43
- data/spec/channels/notification_with_devise_channel_spec.rb +75 -77
- data/spec/concerns/apis/subscription_api_spec.rb +144 -2
- data/spec/concerns/common_spec.rb +25 -3
- data/spec/concerns/models/notifiable_spec.rb +35 -35
- data/spec/concerns/models/subscriber_spec.rb +179 -6
- data/spec/concerns/models/target_spec.rb +10 -12
- data/spec/concerns/renderable_spec.rb +5 -5
- data/spec/config_spec.rb +26 -15
- data/spec/controllers/controller_spec_utility.rb +15 -51
- data/spec/generators/migration/migration_generator_spec.rb +2 -10
- data/spec/helpers/view_helpers_spec.rb +1 -1
- data/spec/optional_targets/action_cable_api_channel_spec.rb +21 -24
- data/spec/optional_targets/action_cable_channel_spec.rb +26 -29
- data/spec/rails_app/app/controllers/users_controller.rb +5 -0
- data/spec/rails_app/app/javascript/App.vue +8 -72
- data/spec/rails_app/app/javascript/components/DeviseTokenAuth.vue +3 -4
- data/spec/rails_app/app/javascript/components/Top.vue +2 -3
- data/spec/rails_app/app/javascript/packs/spa.js +6 -3
- data/spec/rails_app/app/javascript/router/index.js +73 -0
- data/spec/rails_app/app/javascript/store/{auth.js → index.js} +0 -0
- data/spec/rails_app/app/models/dummy/dummy_group.rb +8 -0
- data/spec/rails_app/app/models/dummy/dummy_notifiable_target.rb +8 -0
- data/spec/rails_app/app/models/user.rb +2 -1
- data/spec/rails_app/config/application.rb +6 -7
- data/spec/rails_app/config/dynamoid.rb +11 -3
- data/spec/rails_app/config/environments/production.rb +3 -0
- data/spec/rails_app/config/environments/test.rb +2 -11
- data/spec/rails_app/config/initializers/activity_notification.rb +13 -3
- data/spec/rails_app/config/routes.rb +5 -1
- data/spec/rails_app/db/seeds.rb +9 -2
- data/spec/rails_app/package.json +14 -14
- data/spec/roles/acts_as_notifiable_spec.rb +5 -5
- data/spec/spec_helper.rb +1 -5
- metadata +12 -12
- data/spec/support/patch_rails_42_action_controller_test_response.rb +0 -11
|
@@ -31,6 +31,16 @@ ActivityNotification.configure do |config|
|
|
|
31
31
|
# Set false when you want to unsubscribe to any notifications as default.
|
|
32
32
|
config.subscribe_as_default = true
|
|
33
33
|
|
|
34
|
+
# Configure default email subscription value to use when the subscription record does not configured.
|
|
35
|
+
# Note that you can configure them for each method calling as default argument.
|
|
36
|
+
# Set false when you want to unsubscribe to email notifications as default.
|
|
37
|
+
# config.subscribe_to_email_as_default = true
|
|
38
|
+
|
|
39
|
+
# Configure default optional target subscription value to use when the subscription record does not configured.
|
|
40
|
+
# Note that you can configure them for each method calling as default argument.
|
|
41
|
+
# Set false when you want to unsubscribe to optinal target notifications as default.
|
|
42
|
+
# config.subscribe_to_optional_targets_as_default = true
|
|
43
|
+
|
|
34
44
|
# Configure the e-mail address which will be shown in ActivityNotification::Mailer,
|
|
35
45
|
# note that it will be overwritten if you use your own mailer class with default "from" parameter.
|
|
36
46
|
config.mailer_sender = 'please-change-me-at-config-initializers-activity_notification@example.com'
|
|
@@ -76,7 +86,7 @@ ActivityNotification.configure do |config|
|
|
|
76
86
|
# Set true when you want to turn on WebSocket API subscription using ActionCable as default.
|
|
77
87
|
config.action_cable_api_enabled = false
|
|
78
88
|
|
|
79
|
-
# Configure if
|
|
89
|
+
# Configure if activity_notification publishes WebSocket notifications using ActionCable only to authenticated target with Devise.
|
|
80
90
|
# Note that you can configure them for each model by acts_as roles.
|
|
81
91
|
# Set true when you want to use Device integration with WebSocket subscription using ActionCable as default.
|
|
82
92
|
config.action_cable_with_devise = false
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Migration responsible for creating a table with notifications
|
|
2
|
-
class <%= @migration_name %> < ActiveRecord::Migration<%=
|
|
2
|
+
class <%= @migration_name %> < ActiveRecord::Migration<%= "[#{Rails.version.to_f}]" %>
|
|
3
3
|
# Create tables
|
|
4
4
|
def change
|
|
5
5
|
<% if @migration_tables.include?('notifications') %>create_table :notifications do |t|
|
|
@@ -1,51 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
User._notification_action_cable_with_devise = true
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
after do
|
|
18
|
-
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "rejects subscription even if target_type and target_id parameters are passed" do
|
|
22
|
-
subscribe({ target_type: target_type, target_id: test_target.id })
|
|
23
|
-
expect(subscription).to be_rejected
|
|
24
|
-
expect {
|
|
25
|
-
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_api_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
26
|
-
}.to raise_error(/Must be subscribed!/)
|
|
27
|
-
end
|
|
1
|
+
require 'channels/notification_api_channel_shared_examples'
|
|
2
|
+
|
|
3
|
+
# @See https://github.com/palkan/action-cable-testing
|
|
4
|
+
describe ActivityNotification::NotificationApiChannel, type: :channel do
|
|
5
|
+
let(:test_target) { create(:user) }
|
|
6
|
+
let(:target_type) { "User" }
|
|
7
|
+
let(:typed_target_param) { "user_id" }
|
|
8
|
+
let(:extra_params) { {} }
|
|
9
|
+
|
|
10
|
+
context "when target.notification_action_cable_with_devise? returns true" do
|
|
11
|
+
before do
|
|
12
|
+
@user_notification_action_cable_with_devise = User._notification_action_cable_with_devise
|
|
13
|
+
User._notification_action_cable_with_devise = true
|
|
28
14
|
end
|
|
29
15
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
User._notification_action_cable_with_devise = false
|
|
34
|
-
@auth_headers = {}
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
after do
|
|
38
|
-
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
39
|
-
end
|
|
16
|
+
after do
|
|
17
|
+
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
18
|
+
end
|
|
40
19
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
20
|
+
it "rejects subscription even if target_type and target_id parameters are passed" do
|
|
21
|
+
subscribe({ target_type: target_type, target_id: test_target.id })
|
|
22
|
+
expect(subscription).to be_rejected
|
|
23
|
+
expect {
|
|
44
24
|
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_api_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
}.to raise_error(/Must be subscribed!/)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
47
28
|
|
|
48
|
-
|
|
29
|
+
context "when target.notification_action_cable_with_devise? returns false" do
|
|
30
|
+
before do
|
|
31
|
+
@user_notification_action_cable_with_devise = User._notification_action_cable_with_devise
|
|
32
|
+
User._notification_action_cable_with_devise = false
|
|
33
|
+
@auth_headers = {}
|
|
49
34
|
end
|
|
35
|
+
|
|
36
|
+
after do
|
|
37
|
+
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "successfully subscribes with target_type and target_id parameters" do
|
|
41
|
+
subscribe({ target_type: target_type, target_id: test_target.id })
|
|
42
|
+
expect(subscription).to be_confirmed
|
|
43
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_api_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
44
|
+
expect(subscription).to have_stream_from("activity_notification_api_channel_User##{test_target.id}")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it_behaves_like :notification_api_channel
|
|
50
48
|
end
|
|
51
|
-
end
|
|
49
|
+
end
|
|
@@ -1,78 +1,76 @@
|
|
|
1
|
-
|
|
2
|
-
require 'channels/notification_api_channel_shared_examples'
|
|
1
|
+
require 'channels/notification_api_channel_shared_examples'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
# @See https://github.com/palkan/action-cable-testing
|
|
4
|
+
describe ActivityNotification::NotificationApiWithDeviseChannel, type: :channel do
|
|
5
|
+
let(:test_user) { create(:confirmed_user) }
|
|
6
|
+
let(:unauthenticated_user) { create(:confirmed_user) }
|
|
7
|
+
let(:test_target) { create(:admin, user: test_user) }
|
|
8
|
+
let(:target_type) { "Admin" }
|
|
9
|
+
let(:typed_target_param) { "admin_id" }
|
|
10
|
+
let(:extra_params) { { devise_type: :users } }
|
|
11
|
+
let(:valid_session) {}
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
# @See https://github.com/lynndylanhurley/devise_token_auth
|
|
14
|
+
def sign_in(current_target)
|
|
15
|
+
@auth_headers = current_target.create_new_auth_token
|
|
16
|
+
end
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
before do
|
|
19
|
+
@user_notification_action_cable_with_devise = User._notification_action_cable_with_devise
|
|
20
|
+
User._notification_action_cable_with_devise = true
|
|
21
|
+
end
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
after do
|
|
24
|
+
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
25
|
+
end
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it_behaves_like :notification_api_channel
|
|
27
|
+
context "signed in with devise as authenticated user" do
|
|
28
|
+
before do
|
|
29
|
+
sign_in test_user
|
|
34
30
|
end
|
|
31
|
+
|
|
32
|
+
it_behaves_like :notification_api_channel
|
|
33
|
+
end
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
context "signed in with devise as unauthenticated user" do
|
|
36
|
+
let(:target_params) { { target_type: target_type, devise_type: :users } }
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
before do
|
|
39
|
+
sign_in unauthenticated_user
|
|
40
|
+
end
|
|
42
41
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
end
|
|
42
|
+
it "rejects subscription" do
|
|
43
|
+
subscribe(target_params.merge({ typed_target_param => test_target }).merge(@auth_headers))
|
|
44
|
+
expect(subscription).to be_rejected
|
|
45
|
+
expect {
|
|
46
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_api_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
47
|
+
}.to raise_error(/Must be subscribed!/)
|
|
50
48
|
end
|
|
49
|
+
end
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
|
|
51
|
+
context "unsigned in with devise" do
|
|
52
|
+
let(:target_params) { { target_type: target_type, devise_type: :users } }
|
|
54
53
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
end
|
|
54
|
+
it "rejects subscription" do
|
|
55
|
+
subscribe(target_params.merge({ typed_target_param => test_target }))
|
|
56
|
+
expect(subscription).to be_rejected
|
|
57
|
+
expect {
|
|
58
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_api_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
59
|
+
}.to raise_error(/Must be subscribed!/)
|
|
62
60
|
end
|
|
61
|
+
end
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
63
|
+
context "without target_id and (typed_target)_id parameters for devise integrated channel with devise_type option" do
|
|
64
|
+
let(:target_params) { { target_type: target_type, devise_type: :users } }
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
before do
|
|
67
|
+
sign_in test_target.user
|
|
68
|
+
end
|
|
70
69
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
end
|
|
70
|
+
it "successfully subscribes" do
|
|
71
|
+
subscribe(target_params.merge(@auth_headers))
|
|
72
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_api_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
73
|
+
expect(subscription).to have_stream_from("activity_notification_api_channel_Admin##{test_target.id}")
|
|
76
74
|
end
|
|
77
75
|
end
|
|
78
76
|
end
|
|
@@ -1,50 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
User._notification_action_cable_with_devise = true
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
after do
|
|
18
|
-
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it "rejects subscription even if target_type and target_id parameters are passed" do
|
|
22
|
-
subscribe({ target_type: target_type, target_id: test_target.id })
|
|
23
|
-
expect(subscription).to be_rejected
|
|
24
|
-
expect {
|
|
25
|
-
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
26
|
-
}.to raise_error(/Must be subscribed!/)
|
|
27
|
-
end
|
|
1
|
+
require 'channels/notification_channel_shared_examples'
|
|
2
|
+
|
|
3
|
+
# @See https://github.com/palkan/action-cable-testing
|
|
4
|
+
describe ActivityNotification::NotificationChannel, type: :channel do
|
|
5
|
+
let(:test_target) { create(:user) }
|
|
6
|
+
let(:target_type) { "User" }
|
|
7
|
+
let(:typed_target_param) { "user_id" }
|
|
8
|
+
let(:extra_params) { {} }
|
|
9
|
+
|
|
10
|
+
context "when target.notification_action_cable_with_devise? returns true" do
|
|
11
|
+
before do
|
|
12
|
+
@user_notification_action_cable_with_devise = User._notification_action_cable_with_devise
|
|
13
|
+
User._notification_action_cable_with_devise = true
|
|
28
14
|
end
|
|
29
15
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
User._notification_action_cable_with_devise = false
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
after do
|
|
37
|
-
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
38
|
-
end
|
|
16
|
+
after do
|
|
17
|
+
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
18
|
+
end
|
|
39
19
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
20
|
+
it "rejects subscription even if target_type and target_id parameters are passed" do
|
|
21
|
+
subscribe({ target_type: target_type, target_id: test_target.id })
|
|
22
|
+
expect(subscription).to be_rejected
|
|
23
|
+
expect {
|
|
43
24
|
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
44
|
-
|
|
45
|
-
|
|
25
|
+
}.to raise_error(/Must be subscribed!/)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
46
28
|
|
|
47
|
-
|
|
29
|
+
context "when target.notification_action_cable_with_devise? returns false" do
|
|
30
|
+
before do
|
|
31
|
+
@user_notification_action_cable_with_devise = User._notification_action_cable_with_devise
|
|
32
|
+
User._notification_action_cable_with_devise = false
|
|
48
33
|
end
|
|
34
|
+
|
|
35
|
+
after do
|
|
36
|
+
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it "successfully subscribes with target_type and target_id parameters" do
|
|
40
|
+
subscribe({ target_type: target_type, target_id: test_target.id })
|
|
41
|
+
expect(subscription).to be_confirmed
|
|
42
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
43
|
+
expect(subscription).to have_stream_from("activity_notification_channel_User##{test_target.id}")
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it_behaves_like :notification_channel
|
|
49
47
|
end
|
|
50
|
-
end
|
|
48
|
+
end
|
|
@@ -1,99 +1,97 @@
|
|
|
1
|
-
|
|
2
|
-
require 'channels/notification_channel_shared_examples'
|
|
1
|
+
require 'channels/notification_channel_shared_examples'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
end
|
|
3
|
+
#TODO Make it more smart test method
|
|
4
|
+
module ActivityNotification
|
|
5
|
+
module Test
|
|
6
|
+
class NotificationWithDeviseChannel < ::ActivityNotification::NotificationWithDeviseChannel
|
|
7
|
+
@@custom_current_target = nil
|
|
8
|
+
|
|
9
|
+
def set_custom_current_target(custom_current_target)
|
|
10
|
+
@@custom_current_target = custom_current_target
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def find_current_target(devise_type = nil)
|
|
14
|
+
super(devise_type)
|
|
15
|
+
rescue NoMethodError
|
|
16
|
+
devise_type = (devise_type || @target.notification_devise_resource.class.name).to_s
|
|
17
|
+
@@custom_current_target.is_a?(devise_type.to_model_class) ? @@custom_current_target : nil
|
|
20
18
|
end
|
|
21
19
|
end
|
|
22
20
|
end
|
|
21
|
+
end
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
#TODO Make it more smart test method
|
|
35
|
-
#include Devise::Test::IntegrationHelpers
|
|
36
|
-
def sign_in(current_target)
|
|
37
|
-
described_class.new(ActionCable::Channel::ConnectionStub.new, {}).set_custom_current_target(current_target)
|
|
38
|
-
end
|
|
23
|
+
# @See https://github.com/palkan/action-cable-testing
|
|
24
|
+
describe ActivityNotification::Test::NotificationWithDeviseChannel, type: :channel do
|
|
25
|
+
let(:test_user) { create(:confirmed_user) }
|
|
26
|
+
let(:unauthenticated_user) { create(:confirmed_user) }
|
|
27
|
+
let(:test_target) { create(:admin, user: test_user) }
|
|
28
|
+
let(:target_type) { "Admin" }
|
|
29
|
+
let(:typed_target_param) { "admin_id" }
|
|
30
|
+
let(:extra_params) { { devise_type: :users } }
|
|
31
|
+
let(:valid_session) {}
|
|
39
32
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
33
|
+
#TODO Make it more smart test method
|
|
34
|
+
#include Devise::Test::IntegrationHelpers
|
|
35
|
+
def sign_in(current_target)
|
|
36
|
+
described_class.new(ActionCable::Channel::ConnectionStub.new, {}).set_custom_current_target(current_target)
|
|
37
|
+
end
|
|
44
38
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
before do
|
|
40
|
+
@user_notification_action_cable_with_devise = User._notification_action_cable_with_devise
|
|
41
|
+
User._notification_action_cable_with_devise = true
|
|
42
|
+
end
|
|
48
43
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
after do
|
|
45
|
+
User._notification_action_cable_with_devise = @user_notification_action_cable_with_devise
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context "signed in with devise as authenticated user" do
|
|
49
|
+
before do
|
|
50
|
+
sign_in test_user
|
|
55
51
|
end
|
|
52
|
+
|
|
53
|
+
it_behaves_like :notification_channel
|
|
54
|
+
end
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
context "signed in with devise as unauthenticated user" do
|
|
57
|
+
let(:target_params) { { target_type: target_type, devise_type: :users } }
|
|
59
58
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
before do
|
|
60
|
+
sign_in unauthenticated_user
|
|
61
|
+
end
|
|
63
62
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
end
|
|
63
|
+
it "rejects subscription" do
|
|
64
|
+
subscribe(target_params.merge({ typed_target_param => test_target }))
|
|
65
|
+
expect(subscription).to be_rejected
|
|
66
|
+
expect {
|
|
67
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
68
|
+
}.to raise_error(/Must be subscribed!/)
|
|
71
69
|
end
|
|
70
|
+
end
|
|
72
71
|
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
context "unsigned in with devise" do
|
|
73
|
+
let(:target_params) { { target_type: target_type, devise_type: :users } }
|
|
75
74
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
end
|
|
75
|
+
it "rejects subscription" do
|
|
76
|
+
subscribe(target_params.merge({ typed_target_param => test_target }))
|
|
77
|
+
expect(subscription).to be_rejected
|
|
78
|
+
expect {
|
|
79
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
80
|
+
}.to raise_error(/Must be subscribed!/)
|
|
83
81
|
end
|
|
82
|
+
end
|
|
84
83
|
|
|
85
|
-
|
|
86
|
-
|
|
84
|
+
context "without target_id and (typed_target)_id parameters for devise integrated channel with devise_type option" do
|
|
85
|
+
let(:target_params) { { target_type: target_type, devise_type: :users } }
|
|
87
86
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
before do
|
|
88
|
+
sign_in test_target.user
|
|
89
|
+
end
|
|
91
90
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
end
|
|
91
|
+
it "successfully subscribes" do
|
|
92
|
+
subscribe(target_params)
|
|
93
|
+
expect(subscription).to have_stream_from("#{ActivityNotification.config.notification_channel_prefix}_#{test_target.to_class_name}#{ActivityNotification.config.composite_key_delimiter}#{test_target.id}")
|
|
94
|
+
expect(subscription).to have_stream_from("activity_notification_channel_Admin##{test_target.id}")
|
|
97
95
|
end
|
|
98
96
|
end
|
|
99
97
|
end
|