hyrax 2.0.0.beta1 → 2.0.0.beta2
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/README.md +13 -2
- data/app/actors/hyrax/actors/file_set_actor.rb +12 -15
- data/app/assets/javascripts/hyrax.js +6 -5
- data/app/assets/javascripts/hyrax/{app.js → app.js.erb} +12 -8
- data/app/assets/javascripts/hyrax/channels/notifications.js +0 -0
- data/app/assets/javascripts/hyrax/notification.es6 +19 -31
- data/app/channels/hyrax/application_cable/channel.rb +6 -0
- data/app/channels/hyrax/application_cable/connection.rb +30 -0
- data/app/channels/hyrax/notifications_channel.rb +15 -0
- data/app/controllers/hyrax/depositors_controller.rb +2 -2
- data/app/controllers/hyrax/notifications_controller.rb +2 -0
- data/app/controllers/hyrax/users_controller.rb +0 -7
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +27 -0
- data/app/jobs/import_url_job.rb +3 -1
- data/app/jobs/stream_notifications_job.rb +10 -0
- data/app/models/proxy_deposit_request.rb +2 -2
- data/app/models/user_mailbox.rb +19 -0
- data/app/services/hyrax/{message_user_service.rb → abstract_message_service.rb} +7 -4
- data/app/services/hyrax/batch_create_failure_service.rb +1 -1
- data/app/services/hyrax/batch_create_success_service.rb +1 -1
- data/app/services/hyrax/fixity_check_failure_service.rb +1 -1
- data/app/services/hyrax/import_url_failure_service.rb +1 -1
- data/app/services/hyrax/messenger_service.rb +8 -0
- data/app/services/hyrax/workflow/abstract_notification.rb +1 -1
- data/app/views/_user_util_links.html.erb +1 -1
- data/app/views/hyrax/homepage/index.html.erb +1 -1
- data/config/locales/hyrax.de.yml +5 -2
- data/config/locales/hyrax.en.yml +4 -1
- data/config/locales/hyrax.es.yml +4 -1
- data/config/locales/hyrax.fr.yml +5 -2
- data/config/locales/hyrax.it.yml +4 -1
- data/config/locales/hyrax.pt-BR.yml +5 -2
- data/config/locales/hyrax.zh.yml +5 -2
- data/config/routes.rb +4 -2
- data/db/migrate/20170905135339_add_preferred_locale_to_users.rb +5 -0
- data/lib/generators/hyrax/templates/config/authorities/licenses.yml +28 -10
- data/lib/generators/hyrax/templates/config/hyrax.rb +0 -3
- data/lib/hyrax/configuration.rb +0 -5
- data/lib/hyrax/engine.rb +5 -0
- data/lib/hyrax/version.rb +1 -1
- data/spec/actors/hyrax/actors/file_set_actor_spec.rb +74 -0
- data/spec/channels/hyrax/application_cable/channel_spec.rb +14 -0
- data/spec/channels/hyrax/application_cable/connection_spec.rb +31 -0
- data/spec/channels/hyrax/notifications_channel_spec.rb +45 -0
- data/spec/controllers/hyrax/notifications_controller_spec.rb +1 -0
- data/spec/helpers/blacklight_helper_spec.rb +4 -2
- data/spec/helpers/hyrax_helper_spec.rb +34 -4
- data/spec/jobs/import_url_job_spec.rb +1 -1
- data/spec/jobs/stream_notifications_job_spec.rb +30 -0
- data/spec/models/collection_spec.rb +13 -19
- data/spec/models/proxy_deposit_request_spec.rb +2 -1
- data/spec/models/user_mailbox_spec.rb +73 -0
- data/spec/services/hyrax/abstract_message_service_spec.rb +25 -0
- data/spec/services/hyrax/messenger_service_spec.rb +15 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +6 -0
- data/spec/views/_user_util_links.html.erb_spec.rb +3 -2
- data/spec/views/hyrax/homepage/index.html.erb_spec.rb +4 -0
- data/template.rb +1 -1
- metadata +23 -14
- data/app/assets/javascripts/hyrax/notifications.es6 +0 -63
- data/app/views/hyrax/users/_notify_number.html.erb +0 -8
- data/app/views/hyrax/users/notifications_number.json.jbuilder +0 -1
- data/app/views/kaminari/blacklight/_first_page.html.erb +0 -9
- data/app/views/kaminari/blacklight/_gap.html.erb +0 -8
- data/app/views/kaminari/blacklight/_last_page.html.erb +0 -9
- data/app/views/kaminari/blacklight/_next_page.html.erb +0 -9
- data/app/views/kaminari/blacklight/_page.html.erb +0 -10
- data/app/views/kaminari/blacklight/_paginator.html.erb +0 -19
- data/app/views/kaminari/blacklight/_prev_page.html.erb +0 -9
@@ -0,0 +1,31 @@
|
|
1
|
+
RSpec.describe Hyrax::ApplicationCable::Connection, no_clean: true do
|
2
|
+
subject { described_class.new(server, env) }
|
3
|
+
|
4
|
+
let(:server) { ActionCable::Server::Base.new }
|
5
|
+
let(:env) { {} }
|
6
|
+
|
7
|
+
describe '#connect' do
|
8
|
+
# rubocop:disable RSpec/SubjectStub
|
9
|
+
before do
|
10
|
+
allow(subject).to receive(:user_id).and_return(user_id)
|
11
|
+
end
|
12
|
+
# rubocop:enable RSpec/SubjectStub
|
13
|
+
|
14
|
+
context 'when user is found' do
|
15
|
+
let(:user) { create(:user) }
|
16
|
+
let(:user_id) { user.id }
|
17
|
+
|
18
|
+
it 'sets #current_user to the found user instance' do
|
19
|
+
expect { subject.connect }.to change { subject.current_user }.from(nil).to(user)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when user is not found' do
|
24
|
+
let(:user_id) { nil }
|
25
|
+
|
26
|
+
it 'rejects the unauthorized connection' do
|
27
|
+
expect { subject.connect }.to raise_error(ActionCable::Connection::Authorization::UnauthorizedError)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
RSpec.describe Hyrax::NotificationsChannel, no_clean: true do
|
2
|
+
subject { described_class.new(connection, nil) }
|
3
|
+
|
4
|
+
let(:connection) { Hyrax::ApplicationCable::Connection.new(server, {}) }
|
5
|
+
let(:server) { ActionCable::Server::Base.new }
|
6
|
+
let(:user) { create(:user) }
|
7
|
+
|
8
|
+
before do
|
9
|
+
allow(connection).to receive(:find_verified_user).and_return(user)
|
10
|
+
connection.connect
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#current_user' do
|
14
|
+
it 'has a current user instance from its connection' do
|
15
|
+
expect(subject.current_user).to eq user
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#update_locale' do
|
20
|
+
let(:data) { { 'locale' => 'zh' } }
|
21
|
+
|
22
|
+
it 'updates the current user instance with the locale' do
|
23
|
+
expect { subject.update_locale(data) }.to change { user.preferred_locale }
|
24
|
+
.from(nil).to(data['locale'])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#subscribed' do
|
29
|
+
# rubocop:disable RSpec/SubjectStub
|
30
|
+
it 'calls #stream_for with the current user instance' do
|
31
|
+
expect(subject).to receive(:stream_for).with(user).once
|
32
|
+
subject.subscribed
|
33
|
+
end
|
34
|
+
# rubocop:enable RSpec/SubjectStub
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#unsubscribed' do
|
38
|
+
# rubocop:disable RSpec/SubjectStub
|
39
|
+
it 'calls #stop_all_streams' do
|
40
|
+
expect(subject).to receive(:stop_all_streams).once
|
41
|
+
subject.unsubscribed
|
42
|
+
end
|
43
|
+
# rubocop:enable RSpec/SubjectStub
|
44
|
+
end
|
45
|
+
end
|
@@ -9,6 +9,7 @@ RSpec.describe Hyrax::NotificationsController, type: :controller do
|
|
9
9
|
describe "#index" do
|
10
10
|
it "shows message" do
|
11
11
|
expect(mock_box).to receive(:inbox).and_return(["test"])
|
12
|
+
expect(StreamNotificationsJob).to receive(:perform_later).once
|
12
13
|
get :index
|
13
14
|
expect(response).to be_success
|
14
15
|
expect(assigns[:messages]).to eq(["test"])
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
RSpec.describe BlacklightHelper, type: :helper do
|
2
4
|
let(:blacklight_config) { CatalogController.blacklight_config }
|
3
5
|
let(:attributes) do
|
@@ -49,8 +51,8 @@ RSpec.describe BlacklightHelper, type: :helper do
|
|
49
51
|
let(:field_name) { 'rights_tesim' }
|
50
52
|
|
51
53
|
it do
|
52
|
-
is_expected.to eq "<a href=\"http://creativecommons.org/publicdomain/zero/1.0/\">CC0 1.0 Universal</a>, " \
|
53
|
-
"<a href=\"http://creativecommons.org/publicdomain/mark/1.0/\">Public Domain Mark 1.0</a>, " \
|
54
|
+
is_expected.to eq "<a href=\"http://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons CC0 1.0 Universal</a>, " \
|
55
|
+
"<a href=\"http://creativecommons.org/publicdomain/mark/1.0/\">Creative Commons Public Domain Mark 1.0</a>, " \
|
54
56
|
"and <a href=\"http://www.europeana.eu/portal/rights/rr-r.html\">All rights reserved</a>"
|
55
57
|
end
|
56
58
|
end
|
@@ -23,6 +23,36 @@ RSpec.describe HyraxHelper, type: :helper do
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
+
describe '#render_notifications' do
|
27
|
+
let(:mailbox) { double('mailbox', unread_count: unread_count, label: 'Foobar') }
|
28
|
+
|
29
|
+
subject { helper.render_notifications(user: nil) }
|
30
|
+
|
31
|
+
before do
|
32
|
+
allow(UserMailbox).to receive(:new).and_return(mailbox)
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'with unread messages' do
|
36
|
+
let(:unread_count) { 10 }
|
37
|
+
|
38
|
+
it 'renders with label-danger and is visible' do
|
39
|
+
expect(subject).to eq '<a aria-label="Foobar" class="notify-number" href="/notifications"><span class="fa fa-bell"></span>' \
|
40
|
+
"\n" \
|
41
|
+
'<span class="count label label-danger">10</span></a>'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'with no unread messages' do
|
46
|
+
let(:unread_count) { 0 }
|
47
|
+
|
48
|
+
it 'renders with label-default and is invisible' do
|
49
|
+
expect(subject).to eq '<a aria-label="Foobar" class="notify-number" href="/notifications"><span class="fa fa-bell"></span>' \
|
50
|
+
"\n" \
|
51
|
+
'<span class="count label invisible label-default">0</span></a>'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
26
56
|
describe '#available_translations' do
|
27
57
|
subject { helper.available_translations }
|
28
58
|
|
@@ -321,16 +351,16 @@ RSpec.describe HyraxHelper, type: :helper do
|
|
321
351
|
it "maps the url to a link with a label" do
|
322
352
|
expect(helper.license_links(
|
323
353
|
value: ["http://creativecommons.org/publicdomain/zero/1.0/"]
|
324
|
-
)).to eq("<a href=\"http://creativecommons.org/publicdomain/zero/1.0/\">CC0 1.0 Universal</a>")
|
354
|
+
)).to eq("<a href=\"http://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons CC0 1.0 Universal</a>")
|
325
355
|
end
|
326
356
|
|
327
|
-
it "converts multiple
|
357
|
+
it "converts multiple licenses to a sentence" do
|
328
358
|
expect(helper.license_links(
|
329
359
|
value: ["http://creativecommons.org/publicdomain/zero/1.0/",
|
330
360
|
"http://creativecommons.org/publicdomain/mark/1.0/",
|
331
361
|
"http://www.europeana.eu/portal/rights/rr-r.html"]
|
332
|
-
)).to eq("<a href=\"http://creativecommons.org/publicdomain/zero/1.0/\">CC0 1.0 Universal</a>, " \
|
333
|
-
"<a href=\"http://creativecommons.org/publicdomain/mark/1.0/\">Public Domain Mark 1.0</a>, " \
|
362
|
+
)).to eq("<a href=\"http://creativecommons.org/publicdomain/zero/1.0/\">Creative Commons CC0 1.0 Universal</a>, " \
|
363
|
+
"<a href=\"http://creativecommons.org/publicdomain/mark/1.0/\">Creative Commons Public Domain Mark 1.0</a>, " \
|
334
364
|
"and <a href=\"http://www.europeana.eu/portal/rights/rr-r.html\">All rights reserved</a>")
|
335
365
|
end
|
336
366
|
end
|
@@ -29,7 +29,7 @@ RSpec.describe ImportUrlJob do
|
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'creates the content and updates the associated operation' do
|
32
|
-
expect(actor).to receive(:create_content).with(File).and_return(true)
|
32
|
+
expect(actor).to receive(:create_content).with(File, from_url: true).and_return(true)
|
33
33
|
described_class.perform_now(file_set, operation)
|
34
34
|
expect(operation).to be_success
|
35
35
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
RSpec.describe StreamNotificationsJob do
|
2
|
+
describe '#perform' do
|
3
|
+
context 'with zero users' do
|
4
|
+
let(:users) { nil }
|
5
|
+
|
6
|
+
it 'does not broadcast' do
|
7
|
+
expect(Hyrax::NotificationsChannel).not_to receive(:broadcast_to)
|
8
|
+
described_class.perform_now(users)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
context 'with a user' do
|
13
|
+
let(:users) { create(:user) }
|
14
|
+
let(:mailbox) { double('mailbox', unread_count: 7, label: "You've got mail!") }
|
15
|
+
|
16
|
+
before do
|
17
|
+
allow(UserMailbox).to receive(:new).and_return(mailbox)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'broadcasts to the user' do
|
21
|
+
expect(Hyrax::NotificationsChannel).to receive(:broadcast_to)
|
22
|
+
.once
|
23
|
+
.with(users,
|
24
|
+
notifications_count: 7,
|
25
|
+
notifications_label: "You've got mail!")
|
26
|
+
described_class.perform_now(users)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -14,18 +14,15 @@ RSpec.describe Collection do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
describe "#to_solr" do
|
17
|
-
let(:user) {
|
17
|
+
let(:user) { build(:user) }
|
18
18
|
let(:collection) { build(:collection, user: user, title: ['A good title']) }
|
19
19
|
|
20
20
|
let(:solr_document) { collection.to_solr }
|
21
21
|
|
22
|
-
it "has title information" do
|
22
|
+
it "has title information and depositor information" do
|
23
23
|
expect(solr_document).to include 'title_tesim' => ['A good title'],
|
24
|
-
'title_sim' => ['A good title']
|
25
|
-
|
26
|
-
|
27
|
-
it "has depositor information" do
|
28
|
-
expect(solr_document).to include 'depositor_tesim' => [user.user_key],
|
24
|
+
'title_sim' => ['A good title'],
|
25
|
+
'depositor_tesim' => [user.user_key],
|
29
26
|
'depositor_ssim' => [user.user_key]
|
30
27
|
end
|
31
28
|
end
|
@@ -42,7 +39,7 @@ RSpec.describe Collection do
|
|
42
39
|
end
|
43
40
|
end
|
44
41
|
|
45
|
-
describe "#members_objects" do
|
42
|
+
describe "#members_objects", clean_repo: true do
|
46
43
|
let(:collection) { create(:collection) }
|
47
44
|
|
48
45
|
it "is empty by default" do
|
@@ -52,43 +49,40 @@ RSpec.describe Collection do
|
|
52
49
|
context "adding members" do
|
53
50
|
let(:work1) { create(:work) }
|
54
51
|
let(:work2) { create(:work) }
|
55
|
-
let(:work3) { create(:work) }
|
56
52
|
|
57
53
|
it "allows multiple files to be added" do
|
58
|
-
collection.add_member_objects [work1.id, work2.id
|
54
|
+
collection.add_member_objects [work1.id, work2.id]
|
59
55
|
collection.save!
|
60
|
-
expect(collection.reload.member_objects).to match_array [work1, work2
|
56
|
+
expect(collection.reload.member_objects).to match_array [work1, work2]
|
61
57
|
end
|
62
58
|
end
|
63
59
|
end
|
64
60
|
|
65
|
-
it "has a title" do
|
61
|
+
it "has a title", clean_repo: true do
|
66
62
|
subject.title = ["title"]
|
67
63
|
subject.save!
|
68
64
|
expect(subject.reload.title).to eq ["title"]
|
69
65
|
end
|
70
66
|
|
71
|
-
it "has a description" do
|
72
|
-
subject.title = ["title"]
|
67
|
+
it "has a description", clean_repo: true do
|
68
|
+
subject.title = ["title"] # Because the title is required
|
73
69
|
subject.description = ["description"]
|
74
70
|
subject.save!
|
75
71
|
expect(subject.reload.description).to eq ["description"]
|
76
72
|
end
|
77
73
|
|
78
|
-
describe "#destroy" do
|
74
|
+
describe "#destroy", clean_repo: true do
|
79
75
|
let(:collection) { build(:collection) }
|
80
76
|
let(:work1) { create(:work) }
|
81
|
-
let(:work2) { create(:work) }
|
82
77
|
|
83
78
|
before do
|
84
|
-
collection.add_member_objects [work1.id
|
79
|
+
collection.add_member_objects [work1.id]
|
85
80
|
collection.save!
|
86
81
|
collection.destroy
|
87
82
|
end
|
88
83
|
|
89
84
|
it "does not delete member files when deleted" do
|
90
85
|
expect(GenericWork.exists?(work1.id)).to be true
|
91
|
-
expect(GenericWork.exists?(work2.id)).to be true
|
92
86
|
end
|
93
87
|
end
|
94
88
|
|
@@ -111,7 +105,7 @@ RSpec.describe Collection do
|
|
111
105
|
let(:member) { Member.create }
|
112
106
|
let(:collection) { OtherCollection.create(title: ['test title']) }
|
113
107
|
|
114
|
-
it "have members that know about the collection" do
|
108
|
+
it "have members that know about the collection", clean_repo: true do
|
115
109
|
member.reload
|
116
110
|
expect(member.member_of_collections).to eq [collection]
|
117
111
|
end
|
@@ -112,7 +112,8 @@ RSpec.describe ProxyDepositRequest, type: :model do
|
|
112
112
|
context 'when the transfer_to user is found' do
|
113
113
|
it 'creates a transfer_request' do
|
114
114
|
subject.transfer_to = receiver.user_key
|
115
|
-
subject.save!
|
115
|
+
expect { subject.save! }.to change { receiver.mailbox.inbox(unread: true).count }
|
116
|
+
.from(0).to(1)
|
116
117
|
proxy_request = receiver.proxy_deposit_requests.first
|
117
118
|
expect(proxy_request.work_id).to eq(work_id)
|
118
119
|
expect(proxy_request.sending_user).to eq(sender)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
RSpec.describe UserMailbox do
|
2
4
|
let(:user) { create(:user) }
|
3
5
|
let(:another_user) { create(:user) }
|
@@ -19,6 +21,77 @@ RSpec.describe UserMailbox do
|
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
24
|
+
describe '#unread_count' do
|
25
|
+
it 'returns the number of unread messages for a user' do
|
26
|
+
expect { another_user.send_message(user, 'Another Test', '[subj]') }
|
27
|
+
.to change { subject.unread_count }.from(1).to(2)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#label' do
|
32
|
+
# rubocop:disable RSpec/SubjectStub
|
33
|
+
before do
|
34
|
+
allow(subject).to receive(:unread_count).and_return(count)
|
35
|
+
end
|
36
|
+
# rubocop:enable RSpec/SubjectStub
|
37
|
+
|
38
|
+
context 'with zero unread messages' do
|
39
|
+
let(:count) { 0 }
|
40
|
+
|
41
|
+
it 'returns the appropriate label' do
|
42
|
+
expect(subject.label).to eq 'You have no unread notifications'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'with one unread message' do
|
47
|
+
let(:count) { 1 }
|
48
|
+
|
49
|
+
it 'returns the appropriate label' do
|
50
|
+
expect(subject.label).to eq 'You have one unread notification'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'with multiple unread messages' do
|
55
|
+
let(:count) { 5 }
|
56
|
+
|
57
|
+
it 'returns the appropriate label' do
|
58
|
+
expect(subject.label).to eq 'You have 5 unread notifications'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe 'locales' do
|
63
|
+
let(:count) { 3 }
|
64
|
+
|
65
|
+
context 'when param is passed' do
|
66
|
+
it 'returns the label in the specified locale' do
|
67
|
+
expect(subject.label('es')).to eq 'Tienes notificaciones no leídas de 3'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'when param is not passed' do
|
72
|
+
before { allow(user).to receive(:preferred_locale).and_return(preferred_locale) }
|
73
|
+
|
74
|
+
context 'when user has a preferred locale' do
|
75
|
+
let(:preferred_locale) { 'it' }
|
76
|
+
|
77
|
+
it 'returns the label in the user-preferred locale' do
|
78
|
+
expect(I18n).not_to receive(:default_locale)
|
79
|
+
expect(subject.label).to eq 'Hai notifiche non letti 3'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context 'when user lacks a preferred locale' do
|
84
|
+
let(:preferred_locale) { nil }
|
85
|
+
|
86
|
+
it 'returns the system default locale' do
|
87
|
+
expect(I18n).to receive(:default_locale).once.and_return('de')
|
88
|
+
expect(subject.label).to eq 'Sie haben 3 ungelesene Benachrichtigungen'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
22
95
|
describe "#delete_all" do
|
23
96
|
before do
|
24
97
|
another_user.send_message(user, 'message 2', 'subject 2')
|
@@ -0,0 +1,25 @@
|
|
1
|
+
RSpec.describe Hyrax::AbstractMessageService do
|
2
|
+
let(:file_set) { double }
|
3
|
+
let(:user) { build(:user) }
|
4
|
+
let(:klass) do
|
5
|
+
Class.new(described_class) do
|
6
|
+
def message
|
7
|
+
'You have won!'
|
8
|
+
end
|
9
|
+
|
10
|
+
def subject
|
11
|
+
'Attention!'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
subject { klass.new(file_set, user) }
|
17
|
+
|
18
|
+
describe '#call' do
|
19
|
+
it 'invokes Hyrax::MessengerService to deliver the message' do
|
20
|
+
expect(Hyrax::MessengerService).to receive(:deliver)
|
21
|
+
.with(::User.audit_user, user, 'You have won!', 'Attention!').once
|
22
|
+
subject.call
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
RSpec.describe Hyrax::MessengerService do
|
2
|
+
describe '#deliver' do
|
3
|
+
let(:sender) { create(:user) }
|
4
|
+
let(:recipients) { create(:user) }
|
5
|
+
let(:body) { 'Quite an excellent message' }
|
6
|
+
let(:subject) { 'IMPORTANT' }
|
7
|
+
let(:other_arg) { 'Did I make it?' }
|
8
|
+
|
9
|
+
it 'invokes Hyrax::MessengerService to deliver the message' do
|
10
|
+
expect(sender).to receive(:send_message).with(recipients, body, subject, other_arg)
|
11
|
+
expect(StreamNotificationsJob).to receive(:perform_later).with(recipients)
|
12
|
+
described_class.deliver(sender, recipients, body, subject, other_arg)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -76,4 +76,10 @@ class TestAppGenerator < Rails::Generators::Base
|
|
76
76
|
end
|
77
77
|
copy_file 'disable_animations_in_test_environment.rb', 'app/middleware/disable_animations_in_test_environment.rb'
|
78
78
|
end
|
79
|
+
|
80
|
+
def configure_action_cable_to_use_redis
|
81
|
+
gsub_file 'config/cable.yml',
|
82
|
+
"development:\n adapter: async",
|
83
|
+
"development:\n adapter: redis\n url: redis://localhost:6379"
|
84
|
+
end
|
79
85
|
end
|