sufia 7.3.0.rc3 → 7.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -0
  3. data/.eslintrc +6 -5
  4. data/.rubocop.yml +0 -1
  5. data/.rubocop_todo.yml +0 -8
  6. data/README.md +10 -5
  7. data/app/actors/sufia/actors/attach_members_actor.rb +70 -0
  8. data/app/actors/sufia/apply_permission_template_actor.rb +4 -4
  9. data/app/actors/sufia/default_admin_set_actor.rb +10 -7
  10. data/app/assets/javascripts/sufia.js +3 -1
  11. data/app/assets/javascripts/sufia/app.js +7 -18
  12. data/app/assets/javascripts/sufia/autocomplete.es6 +56 -57
  13. data/app/assets/javascripts/sufia/autocomplete/language.es6 +1 -2
  14. data/app/assets/javascripts/sufia/autocomplete/location.es6 +1 -1
  15. data/app/assets/javascripts/sufia/autocomplete/subject.es6 +1 -3
  16. data/app/assets/javascripts/sufia/autocomplete/work.es6 +31 -22
  17. data/app/assets/javascripts/sufia/{editor.js → content_blocks.js} +0 -0
  18. data/app/assets/javascripts/sufia/editor.es6 +47 -0
  19. data/app/assets/javascripts/sufia/editor/admin_set_widget.es6 +39 -0
  20. data/app/assets/javascripts/sufia/notifications.es6 +13 -13
  21. data/app/assets/javascripts/sufia/permissions/control.es6 +3 -3
  22. data/app/assets/javascripts/sufia/permissions/group_controls.es6 +2 -2
  23. data/app/assets/javascripts/sufia/permissions/user_controls.es6 +3 -3
  24. data/app/assets/javascripts/sufia/relationships.js +4 -2
  25. data/app/assets/javascripts/sufia/relationships/control.es6 +83 -0
  26. data/app/assets/javascripts/sufia/relationships/registry.es6 +60 -0
  27. data/app/assets/javascripts/sufia/relationships/registry_entry.es6 +38 -0
  28. data/app/assets/javascripts/sufia/relationships/work.es6 +7 -0
  29. data/app/assets/javascripts/sufia/save_work/required_fields.es6 +1 -1
  30. data/app/assets/javascripts/sufia/save_work/save_work_control.es6 +19 -11
  31. data/app/assets/javascripts/sufia/save_work/visibility_component.es6 +19 -10
  32. data/app/assets/javascripts/sufia/select_work_type.es6 +8 -6
  33. data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +1 -1
  34. data/app/controllers/concerns/sufia/works_controller_behavior.rb +7 -0
  35. data/app/controllers/sufia/admin/admin_sets_controller.rb +5 -2
  36. data/app/forms/sufia/forms/batch_edit_form.rb +2 -1
  37. data/app/forms/sufia/forms/work_form.rb +19 -17
  38. data/app/models/concerns/sufia/admin_set_behavior.rb +38 -0
  39. data/app/presenters/sufia/admin_set_options_presenter.rb +51 -0
  40. data/app/presenters/sufia/admin_set_presenter.rb +11 -0
  41. data/app/search_builders/sufia/find_works_search_builder.rb +1 -0
  42. data/app/services/sufia/actor_factory.rb +1 -0
  43. data/app/services/sufia/admin_set_create_service.rb +9 -9
  44. data/app/services/sufia/admin_set_service.rb +0 -28
  45. data/app/services/sufia/workflow/abstract_notification.rb +14 -1
  46. data/app/services/sufia/workflow/changes_required_notification.rb +2 -2
  47. data/app/services/sufia/workflow/deposited_notification.rb +1 -1
  48. data/app/services/sufia/workflow/pending_review_notification.rb +1 -1
  49. data/app/views/curation_concerns/base/_find_work_widget.html.erb +10 -16
  50. data/app/views/curation_concerns/base/_form.html.erb +5 -1
  51. data/app/views/curation_concerns/base/_form_child_work_relationships.html.erb +22 -32
  52. data/app/views/curation_concerns/base/_form_relationships.html.erb +4 -7
  53. data/app/views/curation_concerns/base/_guts4form.html.erb +7 -1
  54. data/app/views/sufia/admin/admin_sets/_form_participants.html.erb +3 -3
  55. data/app/views/sufia/admin/admin_sets/show.html.erb +10 -2
  56. data/config/initializers/monkey_patch_admin_set.rb +2 -0
  57. data/config/locales/sufia.en.yml +2 -0
  58. data/db/migrate/20170317141521_permission_template_change_column_workflow_name.rb +5 -0
  59. data/lib/generators/sufia/templates/workflow.json.erb +1 -0
  60. data/lib/sufia/version.rb +1 -1
  61. data/lib/tasks/migrate.rake +1 -1
  62. data/spec/actors/sufia/actors/attach_members_actor_spec.rb +68 -0
  63. data/spec/actors/sufia/apply_permission_template_actor_spec.rb +7 -3
  64. data/spec/actors/sufia/default_admin_set_actor_spec.rb +1 -1
  65. data/spec/controllers/sufia/admin/admin_sets_controller_spec.rb +21 -6
  66. data/spec/controllers/sufia/admin/permission_templates_controller_spec.rb +1 -1
  67. data/spec/controllers/sufia/batch_uploads_controller_spec.rb +24 -2
  68. data/spec/factories/permission_templates.rb +1 -0
  69. data/spec/factories/workflows.rb +1 -1
  70. data/spec/forms/curation_concerns/generic_work_form_spec.rb +5 -2
  71. data/spec/forms/sufia/forms/batch_edit_form_spec.rb +1 -1
  72. data/spec/forms/sufia/forms/work_form_spec.rb +32 -19
  73. data/spec/javascripts/autocomplete_spec.js.coffee +12 -33
  74. data/spec/javascripts/helpers/test_fixtures.js.coffee +10 -1
  75. data/spec/javascripts/relationships_control_spec.js.coffee +27 -0
  76. data/spec/javascripts/save_work_spec.js +9 -6
  77. data/spec/javascripts/visibility_component_spec.js +17 -8
  78. data/spec/models/admin_set_spec.rb +69 -0
  79. data/spec/presenters/sufia/admin_set_options_presenter_spec.rb +73 -0
  80. data/spec/presenters/sufia/admin_set_presenter_spec.rb +31 -2
  81. data/spec/services/sufia/actor_factory_spec.rb +2 -0
  82. data/spec/services/sufia/admin_set_create_service_spec.rb +4 -2
  83. data/spec/services/sufia/admin_set_service_spec.rb +0 -72
  84. data/spec/services/sufia/workflow/changes_required_notification_spec.rb +1 -1
  85. data/spec/services/sufia/workflow/deposited_notification_spec.rb +1 -1
  86. data/spec/services/sufia/workflow/pending_review_notification_spec.rb +1 -1
  87. data/spec/views/curation_concerns/base/_find_work_widget.html.erb_spec.rb +1 -2
  88. data/spec/views/curation_concerns/base/_form_child_work_relationships.html.erb_spec.rb +27 -62
  89. data/spec/views/curation_concerns/base/_form_relationships.html.erb_spec.rb +4 -2
  90. data/spec/views/sufia/admin/admin_sets/_form_participants.html.erb_spec.rb +1 -1
  91. data/spec/views/sufia/admin/admin_sets/_form_visibility.html.erb_spec.rb +3 -1
  92. data/spec/views/sufia/admin/admin_sets/show.html.erb_spec.rb +59 -0
  93. data/sufia.gemspec +3 -2
  94. data/template.rb +1 -1
  95. metadata +34 -19
  96. data/app/assets/javascripts/sufia/relationships/table.es6 +0 -206
  97. data/app/assets/javascripts/sufia/relationships/table_row.es6 +0 -79
  98. data/app/views/curation_concerns/base/_form_parent_work_relationships.html.erb +0 -43
  99. data/app/views/records/edit_fields/_in_works_ids.html.erb +0 -59
  100. data/spec/javascripts/helpers/test_responses.js +0 -13
  101. data/spec/javascripts/relationships_table_spec.js.coffee +0 -83
  102. data/spec/views/curation_concerns/base/_form_parent_work_relationships.html.erb_spec.rb +0 -114
  103. data/spec/views/records/edit_fields/_in_works_ids.html.erb_spec.rb +0 -113
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Sufia::AdminSetOptionsPresenter do
4
+ let(:service) { instance_double(Sufia::AdminSetService) }
5
+ let(:presenter) { described_class.new(service) }
6
+
7
+ describe "#select_options" do
8
+ subject { presenter.select_options }
9
+ before do
10
+ allow(service).to receive(:search_results)
11
+ .with(:deposit)
12
+ .and_return(results)
13
+ end
14
+
15
+ context "with permission_template visibility" do
16
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Public Set') }
17
+ let(:solr_doc2) { instance_double(SolrDocument, id: '345', to_s: 'Private Set') }
18
+ before do
19
+ allow(presenter).to receive(:workflow) { nil }
20
+ create(:permission_template, admin_set_id: '123', visibility: 'open')
21
+ create(:permission_template, admin_set_id: '345', visibility: 'restricted')
22
+ end
23
+ let(:results) { [solr_doc1, solr_doc2] }
24
+
25
+ it do
26
+ is_expected.to eq [['Public Set', '123', { 'data-sharing' => false, 'data-visibility' => 'open' }],
27
+ ['Private Set', '345', { 'data-sharing' => false, 'data-visibility' => 'restricted' }]]
28
+ end
29
+ end
30
+
31
+ context "with permission_template release_date" do
32
+ let(:today) { Time.zone.today }
33
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Fixed Release Date Set') }
34
+ let(:solr_doc2) { instance_double(SolrDocument, id: '345', to_s: 'No Delay Set') }
35
+ let(:solr_doc3) { instance_double(SolrDocument, id: '567', to_s: 'One Year Max Embargo Set') }
36
+ let(:solr_doc4) { instance_double(SolrDocument, id: '789', to_s: 'Release Before Date Set') }
37
+ let(:results) { [solr_doc1, solr_doc2, solr_doc3, solr_doc4] }
38
+
39
+ before do
40
+ allow(presenter).to receive(:workflow) { nil }
41
+ create(:permission_template, admin_set_id: '123', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_FIXED, release_date: today + 2.days)
42
+ create(:permission_template, admin_set_id: '345', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_NO_DELAY)
43
+ create(:permission_template, admin_set_id: '567', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_1_YEAR)
44
+ create(:permission_template, admin_set_id: '789', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_BEFORE_DATE, release_date: today + 1.month)
45
+ end
46
+
47
+ it do
48
+ is_expected.to eq [['Fixed Release Date Set', '123', { 'data-sharing' => false, 'data-release-date' => today + 2.days }],
49
+ ['No Delay Set', '345', { 'data-sharing' => false, 'data-release-date' => today }],
50
+ ['One Year Max Embargo Set', '567', { 'data-sharing' => false, 'data-release-date' => today + 1.year, 'data-release-before-date' => true }],
51
+ ['Release Before Date Set', '789', { 'data-sharing' => false, 'data-release-date' => today + 1.month, 'data-release-before-date' => true }]]
52
+ end
53
+ end
54
+
55
+ context "with empty permission_template" do
56
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Empty Template Set') }
57
+ let(:results) { [solr_doc1] }
58
+
59
+ before do
60
+ create(:permission_template, admin_set_id: '567')
61
+ end
62
+
63
+ it { is_expected.to eq [['Empty Template Set', '123', {}]] }
64
+ end
65
+
66
+ context "with no permission_template" do
67
+ let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'No Template Set') }
68
+ let(:results) { [solr_doc1] }
69
+
70
+ it { is_expected.to eq [['No Template Set', '123', {}]] }
71
+ end
72
+ end
73
+ end
@@ -7,22 +7,51 @@ describe Sufia::AdminSetPresenter do
7
7
  description: ['An example admin set.'],
8
8
  title: ['Example Admin Set Title'])
9
9
  end
10
- let(:work) { build(:work, title: ['Example Work Title'], admin_set_id: '123') }
10
+ let(:work) { build(:work, title: ['Example Work Title']) }
11
11
  let(:solr_document) { SolrDocument.new(admin_set.to_solr) }
12
12
  let(:ability) { double }
13
13
  let(:presenter) { described_class.new(solr_document, ability) }
14
14
 
15
15
  describe "total_items" do
16
16
  subject { presenter.total_items }
17
+
17
18
  context "empty admin set" do
18
19
  it { is_expected.to eq 0 }
19
20
  end
21
+
20
22
  context "admin set with work" do
21
23
  before do
24
+ admin_set.members = [work]
22
25
  admin_set.save!
23
- work.save!
24
26
  end
25
27
  it { is_expected.to eq 1 }
26
28
  end
27
29
  end
30
+
31
+ describe "disable_delete?" do
32
+ subject { presenter.disable_delete? }
33
+
34
+ context "empty admin set" do
35
+ before do
36
+ admin_set.members = []
37
+ admin_set.save!
38
+ end
39
+ it { is_expected.to be false }
40
+ end
41
+
42
+ context "non-empty admin set" do
43
+ before do
44
+ admin_set.members = [work]
45
+ admin_set.save!
46
+ end
47
+ it { is_expected.to be true }
48
+ end
49
+
50
+ context "default admin set" do
51
+ let(:admin_set) do
52
+ build(:admin_set, id: AdminSet::DEFAULT_ID)
53
+ end
54
+ it { is_expected.to be true }
55
+ end
56
+ end
28
57
  end
@@ -12,6 +12,7 @@ describe Sufia::ActorFactory, :no_clean do
12
12
  CurationConcerns::Actors::AddToWorkActor,
13
13
  CurationConcerns::Actors::AssignRepresentativeActor,
14
14
  CurationConcerns::Actors::AttachFilesActor,
15
+ Sufia::Actors::AttachMembersActor,
15
16
  CurationConcerns::Actors::ApplyOrderActor,
16
17
  Sufia::InterpretVisibilityActor,
17
18
  Sufia::DefaultAdminSetActor,
@@ -31,6 +32,7 @@ describe Sufia::ActorFactory, :no_clean do
31
32
  CurationConcerns::Actors::AddToWorkActor,
32
33
  CurationConcerns::Actors::AssignRepresentativeActor,
33
34
  CurationConcerns::Actors::AttachFilesActor,
35
+ Sufia::Actors::AttachMembersActor,
34
36
  CurationConcerns::Actors::ApplyOrderActor,
35
37
  Sufia::InterpretVisibilityActor,
36
38
  Sufia::DefaultAdminSetActor,
@@ -2,7 +2,8 @@ require 'spec_helper'
2
2
 
3
3
  RSpec.describe Sufia::AdminSetCreateService do
4
4
  let(:admin_set) { AdminSet.new(title: ['test']) }
5
- let(:service) { described_class.new(admin_set, user) }
5
+ let(:workflow_name) { AdminSet::DEFAULT_WORKFLOW_NAME }
6
+ let(:service) { described_class.new(admin_set, user, workflow_name) }
6
7
  let(:user) { create(:user) }
7
8
 
8
9
  describe "#create" do
@@ -30,7 +31,7 @@ RSpec.describe Sufia::AdminSetCreateService do
30
31
  end
31
32
 
32
33
  describe '.create_default!' do
33
- let(:default_admin_set_id) { 'admin_sets/default' }
34
+ let(:default_admin_set_id) { AdminSet::DEFAULT_ID }
34
35
  let(:permission_template) { Sufia::PermissionTemplate.find_by!(admin_set_id: default_admin_set_id) }
35
36
  # It is important to test the side-effects as a default admin set is a fundamental assumption for Sufia >= 7.3
36
37
  it 'creates AdminSet, PermissionTemplate' do
@@ -39,6 +40,7 @@ RSpec.describe Sufia::AdminSetCreateService do
39
40
  admin_set = AdminSet.find(default_admin_set_id)
40
41
  expect(admin_set).to be_persisted
41
42
  expect(permission_template).to be_persisted
43
+ expect(permission_template.workflow_name).to eq workflow_name
42
44
  end
43
45
  end
44
46
  end
@@ -39,76 +39,4 @@ RSpec.describe Sufia::AdminSetService, :no_clean do
39
39
  expect(subject).to eq [[doc1, 8], [doc2, 2], [doc3, nil]]
40
40
  end
41
41
  end
42
-
43
- describe "#select_options" do
44
- subject { service.select_options }
45
-
46
- context "with permission_template visibility" do
47
- let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Public Set') }
48
- let(:solr_doc2) { instance_double(SolrDocument, id: '345', to_s: 'Private Set') }
49
- let!(:permission_template1) { create(:permission_template, admin_set_id: '123', visibility: 'open') }
50
- let!(:permission_template2) { create(:permission_template, admin_set_id: '345', visibility: 'restricted') }
51
-
52
- before do
53
- allow(service).to receive(:search_results)
54
- .with(:read)
55
- .and_return([solr_doc1, solr_doc2])
56
- end
57
-
58
- it do
59
- is_expected.to eq [['Public Set', '123', { 'data-visibility' => 'open' }],
60
- ['Private Set', '345', { 'data-visibility' => 'restricted' }]]
61
- end
62
- end
63
-
64
- context "with permission_template release_date" do
65
- let(:today) { Time.zone.today }
66
- let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Fixed Release Date Set') }
67
- let(:solr_doc2) { instance_double(SolrDocument, id: '345', to_s: 'No Delay Set') }
68
- let(:solr_doc3) { instance_double(SolrDocument, id: '567', to_s: 'One Year Max Embargo Set') }
69
- let(:solr_doc4) { instance_double(SolrDocument, id: '789', to_s: 'Release Before Date Set') }
70
- let!(:permission_template1) { create(:permission_template, admin_set_id: '123', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_FIXED, release_date: today + 2.days) }
71
- let!(:permission_template2) { create(:permission_template, admin_set_id: '345', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_NO_DELAY) }
72
- let!(:permission_template3) { create(:permission_template, admin_set_id: '567', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_1_YEAR) }
73
- let!(:permission_template4) { create(:permission_template, admin_set_id: '789', release_period: Sufia::PermissionTemplate::RELEASE_TEXT_VALUE_BEFORE_DATE, release_date: today + 1.month) }
74
-
75
- before do
76
- allow(service).to receive(:search_results)
77
- .with(:read)
78
- .and_return([solr_doc1, solr_doc2, solr_doc3, solr_doc4])
79
- end
80
-
81
- it do
82
- is_expected.to eq [['Fixed Release Date Set', '123', { 'data-release-date' => today + 2.days }],
83
- ['No Delay Set', '345', { 'data-release-date' => today }],
84
- ['One Year Max Embargo Set', '567', { 'data-release-date' => today + 1.year, 'data-release-before-date' => true }],
85
- ['Release Before Date Set', '789', { 'data-release-date' => today + 1.month, 'data-release-before-date' => true }]]
86
- end
87
- end
88
-
89
- context "with empty permission_template" do
90
- let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'Empty Template Set') }
91
- let!(:permission_template1) { create(:permission_template, admin_set_id: '567') }
92
-
93
- before do
94
- allow(service).to receive(:search_results)
95
- .with(:read)
96
- .and_return([solr_doc1])
97
- end
98
-
99
- it { is_expected.to eq [['Empty Template Set', '123', {}]] }
100
- end
101
-
102
- context "with no permission_template" do
103
- let(:solr_doc1) { instance_double(SolrDocument, id: '123', to_s: 'No Template Set') }
104
-
105
- before do
106
- allow(service).to receive(:search_results)
107
- .with(:read)
108
- .and_return([solr_doc1])
109
- end
110
-
111
- it { is_expected.to eq [['No Template Set', '123', {}]] }
112
- end
113
- end
114
42
  end
@@ -12,7 +12,7 @@ RSpec.describe Sufia::Workflow::ChangesRequiredNotification do
12
12
 
13
13
  describe ".send_notification" do
14
14
  it 'sends a message to all users' do
15
- expect(approver).to receive(:send_message).once.and_call_original
15
+ expect(approver).to receive(:send_message).with(anything, "Test title (<a href=\"/concern/generic_works/#{work.id}\">#{work.id}</a>) requires additional changes before approval.\n\n 'A pleasant read'", anything).once.and_call_original
16
16
 
17
17
  expect { described_class.send_notification(entity: entity, user: approver, comment: comment, recipients: recipients) }
18
18
  .to change { depositor.mailbox.inbox.count }.by(1)
@@ -12,7 +12,7 @@ RSpec.describe Sufia::Workflow::DepositedNotification do
12
12
 
13
13
  describe ".send_notification" do
14
14
  it 'sends a message to all users' do
15
- expect(approver).to receive(:send_message).once.and_call_original
15
+ expect(approver).to receive(:send_message).with(anything, "Test title (<a href=\"/concern/generic_works/#{work.id}\">#{work.id}</a>) was approved by #{approver.user_key}. A pleasant read", anything).once.and_call_original
16
16
 
17
17
  expect { described_class.send_notification(entity: entity, user: approver, comment: comment, recipients: recipients) }
18
18
  .to change { depositor.mailbox.inbox.count }.by(1)
@@ -11,7 +11,7 @@ RSpec.describe Sufia::Workflow::PendingReviewNotification do
11
11
 
12
12
  describe ".send_notification" do
13
13
  it 'sends a message to all users except depositor' do
14
- expect(depositor).to receive(:send_message).once.and_call_original
14
+ expect(depositor).to receive(:send_message).with(anything, "Test title (<a href=\"/concern/generic_works/#{work.id}\">#{work.id}</a>) was deposited by #{depositor.user_key} and is awaiting approval A pleasant read", anything).once.and_call_original
15
15
 
16
16
  expect { described_class.send_notification(entity: entity, user: depositor, comment: comment, recipients: recipients) }
17
17
  .to change { depositor.mailbox.inbox.count }.by(1)
@@ -11,8 +11,7 @@ RSpec.describe 'curation_concerns/base/_find_work_widget.html.erb', type: :view
11
11
  allow(view).to receive(:current_user).and_return(stub_model(User))
12
12
  render 'curation_concerns/base/find_work_widget',
13
13
  f: form,
14
- id_name: 'work_child_members_ids',
15
- id_type: 'ordered_member_ids',
14
+ name: 'child_work',
16
15
  user_email: 'foo@bar.com',
17
16
  id: '999'
18
17
  end
@@ -1,21 +1,21 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "curation_concerns/base/_form_child_work_relationships.html.erb", type: :view do
3
+ RSpec.describe "curation_concerns/base/_form_child_work_relationships.html.erb", type: :view do
4
4
  let(:work) do
5
5
  stub_model(GenericWork, id: '456', title: ["MyWork"])
6
6
  end
7
7
 
8
- let(:work_2) do
9
- stub_model(GenericWork, id: '567', title: ["Child Work"])
10
- end
11
-
12
8
  let(:ability) { double }
13
9
 
14
10
  let(:form) do
15
11
  Sufia::Forms::WorkForm.new(work, ability)
16
12
  end
17
13
 
18
- let(:f) { double }
14
+ let(:f) do
15
+ view.simple_form_for(form, url: '/update') do |work_form|
16
+ return work_form
17
+ end
18
+ end
19
19
 
20
20
  let(:page) do
21
21
  render
@@ -29,84 +29,49 @@ describe "curation_concerns/base/_form_child_work_relationships.html.erb", type:
29
29
  allow(view).to receive(:f).and_return(f)
30
30
  allow(f).to receive(:object).and_return(form)
31
31
  allow(controller).to receive(:current_user).and_return(stub_model(User))
32
- stub_template '_find_work_widget.html.erb' => "<input value=''/>"
32
+ stub_template '_find_work_widget.html.erb' => "<input class='finder'/>"
33
33
  assign(:form, form)
34
34
  end
35
35
 
36
36
  context "When editing a work" do
37
37
  context "and no children works are present" do
38
38
  before do
39
- allow(work).to receive(:ordered_members).and_return([])
40
- end
41
- it "has 1 empty child work input" do
42
- expect(page).to have_selector("input[value='']", count: 1)
39
+ allow(form).to receive(:work_members).and_return([])
43
40
  end
44
41
 
45
- it "will not display the remove button in the actions" do
46
- expect(page).to have_selector(".btn-remove-row", visible: false)
47
- end
42
+ it "draws the page" do
43
+ # remove button is not present
44
+ expect(page).not_to have_selector("[data-behavior='remove-relationship']")
48
45
 
49
- it "will display the add button in the actions" do
50
- expect(page).to have_selector(".btn-add-row", visible: true, count: 1)
46
+ # input with add button
47
+ expect(page).to have_selector("input.finder")
48
+ expect(page).to have_selector("[data-behavior='add-relationship']")
51
49
  end
52
50
  end
53
- context "When 1 child work is present" do
51
+
52
+ context "and child works are present" do
54
53
  let(:work_2) do
55
54
  stub_model(GenericWork, id: '567', title: ["Test Child Work"])
56
55
  end
57
56
 
58
57
  before do
59
- allow(work).to receive(:ordered_members).and_return([work_2])
60
- end
61
- it "has 1 empty child work input with add button" do
62
- expect(page).to have_selector("input[value='']", count: 1)
63
- expect(page).to have_selector(".btn-add-row", visible: true, count: 1)
58
+ allow(form).to receive(:work_members).and_return([work_2])
64
59
  end
65
60
 
66
- it "has an input box that is filled in with the child id" do
67
- expect(page).to have_selector("input[value='#{work_2.id}']", count: 1)
68
- end
61
+ it "draws the page" do
62
+ # input with add button
63
+ expect(page).to have_selector("input.finder")
64
+ expect(page).to have_selector("[data-behavior='add-relationship']")
69
65
 
70
- it "generates a link for the childs first title" do
71
- expect(page).to have_link("Test Child Work")
72
- end
66
+ # an input box that is filled in with the child id
67
+ expect(page).to have_selector("input[value='#{work_2.id}']", visible: false)
73
68
 
74
- it "has an edit and remove button" do
75
- within ".old-row" do
76
- expect(page).to have_selector(".btn-remove-row", visible: true, count: 1)
77
- expect(page).to have_selector(".btn-edit-row", visible: true, count: 1)
78
- end
79
- end
80
- end
81
- context "When multiple child works are present" do
82
- let(:work_2) do
83
- stub_model(GenericWork, id: '567', title: ["Test Child Work"])
84
- end
85
- let(:work_3) do
86
- stub_model(GenericWork, id: '789', title: ["Test Child Work 2"])
87
- end
88
- before do
89
- allow(work).to receive(:ordered_members).and_return([work_2, work_3])
90
- end
91
- it "has 1 empty child work input with add button" do
92
- expect(page).to have_selector("input[value='']", count: 1)
93
- expect(page).to have_selector(".btn-add-row", visible: true, count: 1)
94
- end
95
-
96
- it "has an input box that is filled in with the child ids" do
97
- expect(page).to have_selector("input[value='#{work_2.id}']", count: 1)
98
- expect(page).to have_selector("input[value='#{work_3.id}']", count: 1)
99
- end
100
-
101
- it "generates a link for the childs first title" do
69
+ # generate a link for the child work's title
102
70
  expect(page).to have_link("Test Child Work")
103
- expect(page).to have_link("Test Child Work 2")
104
- end
105
71
 
106
- it "has an edit and remove button" do
107
- within ".old-row" do
108
- expect(page).to have_selector(".btn-remove-row", visible: true, count: 2)
109
- expect(page).to have_selector(".btn-edit-row", visible: true, count: 2)
72
+ # a remove button
73
+ within "tr" do
74
+ expect(page).to have_selector("[data-behavior='remove-relationship']")
110
75
  end
111
76
  end
112
77
  end
@@ -1,15 +1,17 @@
1
- describe 'curation_concerns/base/_form_relationships.html.erb', type: :view do
1
+ RSpec.describe 'curation_concerns/base/_form_relationships.html.erb', type: :view do
2
2
  let(:ability) { double }
3
3
  let(:work) { GenericWork.new }
4
4
  let(:form) do
5
5
  CurationConcerns::GenericWorkForm.new(work, ability)
6
6
  end
7
- let(:service) { instance_double CurationConcerns::AdminSetService, select_options: [] }
7
+ let(:service) { instance_double CurationConcerns::AdminSetService }
8
+ let(:presenter) { instance_double Sufia::AdminSetOptionsPresenter, select_options: [] }
8
9
 
9
10
  before do
10
11
  allow(view).to receive(:available_collections).and_return([])
11
12
  allow(view).to receive(:action_name).and_return('new')
12
13
  allow(CurationConcerns::AdminSetService).to receive(:new).with(controller).and_return(service)
14
+ allow(Sufia::AdminSetOptionsPresenter).to receive(:new).with(service).and_return(presenter)
13
15
  end
14
16
 
15
17
  let(:form_template) do
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  RSpec.describe 'sufia/admin/admin_sets/_form_participants.html.erb', type: :view do
4
4
  let(:admin_set) { create(:admin_set) }
5
- let(:permission_template) { Sufia::PermissionTemplate.find_or_create_by(admin_set_id: admin_set.id) }
5
+ let(:permission_template) { create(:permission_template, admin_set_id: admin_set.id) }
6
6
  before do
7
7
  @form = Sufia::Forms::AdminSetForm.new(admin_set, permission_template)
8
8
  render