sufia 6.0.0.beta1 → 6.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +12 -2
  3. data/Gemfile +10 -1
  4. data/History.md +21 -0
  5. data/SUFIA_VERSION +1 -1
  6. data/app/assets/images/orcid.png +0 -0
  7. data/app/assets/javascripts/sufia.js +1 -1
  8. data/app/assets/javascripts/sufia/batch_edit.js +36 -54
  9. data/app/assets/javascripts/sufia/edit_metadata.js +10 -11
  10. data/app/assets/javascripts/sufia/permissions.js +2 -26
  11. data/app/assets/stylesheets/sufia.css.scss +10 -2
  12. data/app/assets/stylesheets/sufia/_batch-edit.scss +8 -6
  13. data/app/assets/stylesheets/sufia/_dashboard.scss +10 -0
  14. data/app/assets/stylesheets/sufia/_settings.scss +1 -0
  15. data/app/assets/stylesheets/sufia/_styles.scss +5 -3
  16. data/app/controllers/batch_controller.rb +9 -6
  17. data/app/controllers/batch_edits_controller.rb +2 -2
  18. data/app/controllers/collections_controller.rb +19 -3
  19. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +30 -29
  20. data/app/controllers/concerns/sufia/breadcrumbs.rb +8 -3
  21. data/app/controllers/concerns/sufia/files_controller_behavior.rb +19 -7
  22. data/app/controllers/concerns/sufia/users_controller_behavior.rb +14 -2
  23. data/app/controllers/single_use_links_viewer_controller.rb +5 -1
  24. data/app/forms/sufia/forms/batch_edit_form.rb +6 -0
  25. data/app/forms/sufia/forms/collection_edit_form.rb +17 -0
  26. data/app/forms/sufia/forms/generic_file_edit_form.rb +16 -0
  27. data/app/helpers/generic_file_helper.rb +3 -47
  28. data/app/helpers/sufia/permissions_helper.rb +29 -0
  29. data/app/helpers/sufia/sufia_helper_behavior.rb +11 -0
  30. data/app/inputs/multi_value_with_help_input.rb +8 -0
  31. data/app/inputs/select_with_help_input.rb +3 -0
  32. data/app/inputs/select_with_modal_help_input.rb +36 -0
  33. data/app/inputs/with_help_icon.rb +32 -0
  34. data/app/models/concerns/sufia/solr_document_behavior.rb +1 -1
  35. data/app/presenters/sufia/collection_presenter.rb +29 -0
  36. data/app/presenters/sufia/generic_file_presenter.rb +14 -0
  37. data/app/presenters/sufia/presenter_renderer.rb +53 -0
  38. data/app/views/batch/_metadata.html.erb +10 -44
  39. data/app/views/batch/_more_metadata.html.erb +3 -2
  40. data/app/views/batch/edit.html.erb +2 -2
  41. data/app/views/batch_edits/edit.html.erb +13 -17
  42. data/app/views/collections/_form.html.erb +5 -5
  43. data/app/views/collections/_show_descriptions.html.erb +8 -10
  44. data/app/views/collections/edit.html.erb +8 -9
  45. data/app/views/collections/edit_fields/_description.html.erb +1 -2
  46. data/app/views/dashboard/_index_partials/_stats.html.erb +3 -3
  47. data/app/views/generic_files/_descriptions.html.erb +5 -8
  48. data/app/views/generic_files/_permission_form.html.erb +8 -17
  49. data/app/views/generic_files/_show_descriptions.html.erb +3 -4
  50. data/app/views/generic_files/edit.html.erb +1 -2
  51. data/app/views/generic_files/jq_upload.json.jbuilder +8 -0
  52. data/app/views/records/edit_fields/_default.html.erb +5 -10
  53. data/app/views/records/edit_fields/_description.html.erb +5 -10
  54. data/app/views/records/edit_fields/_resource_type.html.erb +2 -5
  55. data/app/views/records/edit_fields/_rights.html.erb +3 -9
  56. data/app/views/single_use_links_viewer/show.html.erb +10 -16
  57. data/app/views/users/_profile.html.erb +1 -2
  58. data/app/views/users/_user_info.html.erb +20 -3
  59. data/app/views/users/edit.html.erb +11 -2
  60. data/app/views/users/show.html.erb +1 -1
  61. data/config/locales/sufia.en.yml +46 -26
  62. data/config/routes.rb +1 -1
  63. data/lib/generators/sufia/install_generator.rb +4 -0
  64. data/lib/sufia.rb +4 -0
  65. data/lib/sufia/form_builder.rb +16 -0
  66. data/lib/sufia/version.rb +1 -1
  67. data/spec/actors/generic_file/actor_spec.rb +1 -2
  68. data/spec/controllers/batch_controller_spec.rb +16 -48
  69. data/spec/controllers/batch_edits_controller_spec.rb +27 -16
  70. data/spec/controllers/collections_controller_spec.rb +81 -61
  71. data/spec/controllers/generic_files_controller_spec.rb +17 -2
  72. data/spec/controllers/users_controller_spec.rb +13 -3
  73. data/spec/features/collection_spec.rb +93 -88
  74. data/spec/features/users_spec.rb +1 -1
  75. data/spec/forms/collection_edit_form_spec.rb +20 -0
  76. data/spec/forms/generic_file_edit_form_spec.rb +26 -0
  77. data/spec/helpers/generic_file_helper_spec.rb +33 -7
  78. data/spec/helpers/permissions_helper_spec.rb +21 -0
  79. data/spec/inputs/multi_value_with_help_input_spec.rb +25 -0
  80. data/spec/inputs/select_with_modal_help_input_spec.rb +21 -0
  81. data/spec/jobs/batch_update_job_spec.rb +11 -14
  82. data/spec/lib/sufia/breadcrumbs_spec.rb +46 -8
  83. data/spec/models/generic_file_spec.rb +0 -13
  84. data/spec/models/user_spec.rb +23 -0
  85. data/spec/presenters/presenter_renderer_spec.rb +19 -0
  86. data/spec/presenters/sufia/generic_file_presenter_spec.rb +12 -0
  87. data/spec/spec_helper.rb +5 -0
  88. data/spec/support/input_support.rb +12 -0
  89. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  90. data/spec/views/batch/edit.html.erb_spec.rb +13 -23
  91. data/spec/views/batch_edits/edit.html.erb_spec.rb +19 -0
  92. data/spec/views/collections/_form.html.erb_spec.rb +26 -28
  93. data/spec/views/collections/_show_descriptions.html.erb_spec.rb +15 -9
  94. data/spec/views/dashboard/index_spec.rb +2 -2
  95. data/spec/views/generic_file/_permission_form.html.erb_spec.rb +23 -0
  96. data/spec/views/generic_file/edit.html.erb_spec.rb +5 -0
  97. data/spec/views/generic_file/show.html.erb_spec.rb +5 -0
  98. data/sufia-models/app/actors/sufia/generic_file/actor.rb +1 -1
  99. data/sufia-models/app/jobs/batch_update_job.rb +5 -5
  100. data/sufia-models/app/models/batch.rb +7 -3
  101. data/sufia-models/app/models/concerns/sufia/collection.rb +7 -25
  102. data/sufia-models/app/models/concerns/sufia/generic_file.rb +0 -1
  103. data/sufia-models/app/models/concerns/sufia/generic_file/export.rb +2 -2
  104. data/sufia-models/app/models/concerns/sufia/generic_file/indexing.rb +4 -13
  105. data/sufia-models/app/models/concerns/sufia/generic_file/metadata.rb +1 -1
  106. data/sufia-models/app/models/concerns/sufia/user.rb +24 -17
  107. data/sufia-models/app/models/sufia/orcid_validator.rb +8 -0
  108. data/sufia-models/app/services/sufia/generic_file_indexing_service.rb +13 -0
  109. data/sufia-models/app/services/sufia/indexing_service.rb +15 -0
  110. data/sufia-models/lib/generators/sufia/models/abstract_migration_generator.rb +30 -0
  111. data/sufia-models/lib/generators/sufia/models/cached_stats_generator.rb +3 -47
  112. data/sufia-models/lib/generators/sufia/models/install_generator.rb +11 -31
  113. data/sufia-models/lib/generators/sufia/models/orcid_field_generator.rb +19 -0
  114. data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +2 -31
  115. data/sufia-models/lib/generators/sufia/models/templates/config/redis.yml +3 -0
  116. data/sufia-models/lib/generators/sufia/models/templates/config/sufia.rb +3 -0
  117. data/sufia-models/lib/generators/sufia/models/templates/migrations/add_orcid_to_users.rb +5 -0
  118. data/sufia-models/lib/generators/sufia/models/upgrade400_generator.rb +2 -33
  119. data/sufia-models/lib/generators/sufia/models/user_stats_generator.rb +31 -0
  120. data/sufia-models/lib/sufia/models/engine.rb +1 -0
  121. data/sufia-models/lib/sufia/models/version.rb +1 -1
  122. data/sufia-models/sufia-models.gemspec +5 -5
  123. data/sufia.gemspec +2 -3
  124. metadata +49 -39
  125. data/app/assets/javascripts/sufia/multiForm.js +0 -67
  126. data/app/helpers/records_helper.rb +0 -4
  127. data/app/helpers/sufia/records_helper_behavior.rb +0 -68
  128. data/app/views/batch_edits/update_edit.js.erb +0 -5
  129. data/app/views/collections/_edit_descriptions.html.erb +0 -18
  130. data/app/views/collections/edit_fields/_title.html.erb +0 -3
  131. data/app/views/generic_files/_field_form.html.erb +0 -20
  132. data/app/views/records/_edit_field.html.erb +0 -22
  133. data/app/views/records/edit_fields/_suffix.html.erb +0 -10
  134. data/app/views/records/edit_fields/_type.html.erb +0 -8
  135. data/app/views/users/_social_media_info.html.erb +0 -20
  136. data/spec/helpers/records_helper_spec.rb +0 -102
  137. data/spec/models/generic_file/web_form_spec.rb +0 -35
  138. data/sufia-models/app/models/concerns/sufia/generic_file/accessible_attributes.rb +0 -87
  139. data/sufia-models/app/models/concerns/sufia/generic_file/web_form.rb +0 -62
@@ -11,13 +11,12 @@ describe BatchController do
11
11
  let(:batch) { Batch.create }
12
12
  context "enquing a batch job" do
13
13
  before do
14
- allow(BatchUpdateJob).to receive(:new).with(user.user_key,
15
- hash_including('generic_file' => anything)).
16
- and_return(batch_update_message)
14
+ allow(BatchUpdateJob).to receive(:new).with(user.user_key, batch.id, {'1' => 'foo'},
15
+ { tag: [] }, 'open').and_return(batch_update_message)
17
16
  end
18
17
  it "should be successful" do
19
18
  expect(Sufia.queue).to receive(:push).with(batch_update_message).once
20
- post :update, id: batch.id, "generic_file" => {"read_groups_string" => "", "read_users_string" => "archivist1, archivist2", "tag" => [""]}
19
+ post :update, id: batch.id, title: {'1' => 'foo'}, visibility: 'open', generic_file: { tag: [""] }
21
20
  expect(response).to redirect_to routes.url_helpers.dashboard_files_path
22
21
  expect(flash[:notice]).to include("Your files are being processed")
23
22
  end
@@ -25,12 +24,7 @@ describe BatchController do
25
24
 
26
25
  describe "when user has edit permissions on a file" do
27
26
  # TODO all these tests could move to batch_update_job_spec.rb
28
- let!(:file) do
29
- GenericFile.new(batch: batch).tap do |f|
30
- f.apply_depositor_metadata(user)
31
- f.save!
32
- end
33
- end
27
+ let!(:file) { GenericFile.create(batch: batch) { |f| f.apply_depositor_metadata(user) } }
34
28
 
35
29
  it "should set the groups" do
36
30
  post :update, id: batch, "generic_file"=>{"permissions_attributes"=>[{"type" => "group", "name" => "public", "access" => "read"}]}
@@ -39,37 +33,13 @@ describe BatchController do
39
33
  expect(response).to redirect_to routes.url_helpers.dashboard_files_path
40
34
  end
41
35
 
42
- it "should set the users with read access" do
43
- post :update, id: batch, "generic_file"=>{"read_groups_string"=>"", "read_users_string"=>"archivist1, archivist2", "tag"=>[""]}
44
-
45
- expect(file.reload.read_users).to eq ['archivist1', 'archivist2']
46
- expect(response).to redirect_to routes.url_helpers.dashboard_files_path
47
- end
48
-
49
- it "should set the groups with read access" do
50
- post :update, id: batch, "generic_file"=>{"read_groups_string"=>"group1, group2", "read_users_string"=>"", "tag"=>[""]}
51
- expect(file.reload.read_groups).to eq ['group1', 'group2']
52
- end
53
-
54
36
  it "should set public read access" do
55
- post :update, id: batch, "visibility"=>"open", "generic_file"=>{"read_groups_string"=>"", "read_users_string"=>"", "tag"=>[""]}
37
+ post :update, id: batch, visibility: "open", generic_file: { tag: [""] }
56
38
  expect(file.reload.read_groups).to eq ['public']
57
39
  end
58
40
 
59
- it "should set public read access and groups at the same time" do
60
- post :update, id: batch, "visibility"=>"open", "generic_file"=>{"read_groups_string"=>"group1, group2", "read_users_string"=>"", "tag"=>[""]}
61
- expect(file.reload.read_groups).to eq ['group1', 'group2', 'public']
62
- end
63
-
64
- it "should set public discover access and groups at the same time" do
65
- post :update, id: batch, "permission"=>{"group"=>{"public"=>"none"}}, "generic_file"=>{"read_groups_string"=>"group1, group2", "read_users_string"=>"", "tag"=>[""]}
66
- file.reload
67
- expect(file.read_groups).to eq ['group1', 'group2']
68
- expect(file.discover_groups).to eq []
69
- end
70
-
71
41
  it "should set metadata like title" do
72
- post :update, id: batch, "generic_file"=>{"tag"=>["footag", "bartag"]}, "title"=>{file.id=>["New Title"]}
42
+ post :update, id: batch, generic_file: { tag: ["footag", "bartag"] }, title: { file.id => ["New Title"] }
73
43
  file.reload
74
44
  expect(file.title).to eq ["New Title"]
75
45
  # TODO is order important?
@@ -77,7 +47,7 @@ describe BatchController do
77
47
  end
78
48
 
79
49
  it "should not set any tags" do
80
- post :update, id: batch, "generic_file"=>{"read_groups_string"=>"", "read_users_string"=>"archivist1", "tag"=>[""]}
50
+ post :update, id: batch, generic_file: { tag: [""] }
81
51
  expect(file.reload.tag).to be_empty
82
52
  end
83
53
  end
@@ -99,22 +69,20 @@ describe BatchController do
99
69
  end
100
70
  end
101
71
  end
72
+
102
73
  describe "#edit" do
103
74
  before do
104
75
  allow_any_instance_of(User).to receive(:display_name).and_return("Jill Z. User")
105
- @b1 = Batch.new
106
- @b1.save
107
- @file = GenericFile.new(batch: @b1, label: 'f1')
108
- @file.apply_depositor_metadata(user)
109
- @file.save
110
- @file2 = GenericFile.new(batch: @b1, label: 'f2')
111
- @file2.apply_depositor_metadata(user)
112
- @file2.save
113
76
  end
77
+ let(:b1) { Batch.create }
78
+ let!(:file) { GenericFile.create(batch: b1, label: 'f1') { |f| f.apply_depositor_metadata(user) } }
79
+ let!(:file2) { GenericFile.create(batch: b1, label: 'f2') { |f| f.apply_depositor_metadata(user) } }
80
+
114
81
  it "should default creator" do
115
- get :edit, id: @b1.id
116
- expect(assigns[:generic_file].creator[0]).to eq user.display_name
117
- expect(assigns[:generic_file].title[0]).to eq 'f1'
82
+ get :edit, id: b1
83
+ expect(assigns[:form]).not_to be_persisted
84
+ expect(assigns[:form].creator[0]).to eq user.display_name
85
+ expect(assigns[:form].title[0]).to eq 'f1'
118
86
  end
119
87
  end
120
88
  end
@@ -34,38 +34,49 @@ describe BatchEditsController, :type => :controller do
34
34
 
35
35
  it "should set the breadcrumb trail" do
36
36
  expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.title'), Sufia::Engine.routes.url_helpers.dashboard_index_path)
37
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.my.files'), Sufia::Engine.routes.url_helpers.dashboard_files_path)
37
38
  get :edit
38
39
  end
39
40
  end
40
41
 
41
42
  describe "update" do
43
+ let!(:one) do
44
+ GenericFile.create(creator: ["Fred"], language: ['en']) do |file|
45
+ file.apply_depositor_metadata('mjg36')
46
+ end
47
+ end
48
+
49
+ let!(:two) do
50
+ GenericFile.create(creator: ["Fred"], language: ['en']) do |file|
51
+ file.apply_depositor_metadata('mjg36')
52
+ end
53
+ end
54
+
42
55
  before do
43
- @one = GenericFile.new(creator: ["Fred"], language: ['en'])
44
- @one.apply_depositor_metadata('mjg36')
45
- @two = GenericFile.new(creator: ["Wilma"], publisher: ['Rand McNally'], language: ['en'])
46
- @two.apply_depositor_metadata('mjg36')
47
- @one.save!
48
- @two.save!
49
- controller.batch = [@one.id, @two.id]
50
- expect(controller).to receive(:can?).with(:edit, @one.id).and_return(true)
51
- expect(controller).to receive(:can?).with(:edit, @two.id).and_return(true)
56
+ controller.batch = [one.id, two.id]
57
+ expect(controller).to receive(:can?).with(:edit, one.id).and_return(true)
58
+ expect(controller).to receive(:can?).with(:edit, two.id).and_return(true)
52
59
  end
60
+
53
61
  let(:mycontroller) { "my/files" }
62
+
54
63
  it "should be successful" do
55
- put :update , update_type: "delete_all"
64
+ put :update, update_type: "delete_all"
56
65
  expect(response).to redirect_to(Sufia::Engine.routes.url_for(controller: "dashboard", only_path: true))
57
- expect { GenericFile.find(@one.id) }.to raise_error(Ldp::Gone)
58
- expect { GenericFile.find(@two.id) }.to raise_error(Ldp::Gone)
66
+ expect { GenericFile.find(one.id) }.to raise_error(Ldp::Gone)
67
+ expect { GenericFile.find(two.id) }.to raise_error(Ldp::Gone)
59
68
  end
69
+
60
70
  it "should redirect to the return controller" do
61
- put :update , update_type: "delete_all", return_controller: mycontroller
71
+ put :update, update_type: "delete_all", return_controller: mycontroller
62
72
  expect(response).to redirect_to(Sufia::Engine.routes.url_for(controller: mycontroller, only_path: true))
63
73
  end
74
+
64
75
  it "should update the records" do
65
- put :update , update_type: "update", generic_file: { subject: ["zzz"] }
76
+ put :update, update_type: "update", generic_file: { subject: ["zzz"] }
66
77
  expect(response).to be_redirect
67
- expect(GenericFile.find(@one.id).subject).to eq ["zzz"]
68
- expect(GenericFile.find(@two.id).subject).to eq ["zzz"]
78
+ expect(GenericFile.find(one.id).subject).to eq ["zzz"]
79
+ expect(GenericFile.find(two.id).subject).to eq ["zzz"]
69
80
  end
70
81
  end
71
82
 
@@ -66,92 +66,112 @@ describe CollectionsController do
66
66
  end
67
67
 
68
68
  describe "#update" do
69
- before do
70
- @collection = Collection.create(title: "Collection Title") do |collection|
69
+ before { sign_in user }
70
+
71
+ let(:collection) do
72
+ Collection.create(title: "Collection Title") do |collection|
71
73
  collection.apply_depositor_metadata(user.user_key)
72
74
  end
73
- @asset1 = GenericFile.new(title: ["First of the Assets"])
74
- @asset1.apply_depositor_metadata(user.user_key)
75
- @asset1.save
76
- @asset2 = GenericFile.new(title: ["Second of the Assets"], depositor: user.user_key)
77
- @asset2.apply_depositor_metadata(user.user_key)
78
- @asset2.save
79
- @asset3 = GenericFile.new(title: ["Third of the Assets"], depositor:'abc')
80
- @asset3.apply_depositor_metadata(user.user_key)
81
- @asset3.save
82
- sign_in user
83
75
  end
84
76
 
85
- it "should set collection on members" do
86
- put :update, id: @collection, collection: {members:"add"}, batch_document_ids: [@asset3.id, @asset1.id, @asset2.id]
87
- expect(response).to redirect_to routes.url_helpers.collection_path(@collection.noid)
88
- expect(assigns[:collection].members).to match_array [@asset2, @asset3, @asset1]
89
- asset_results = ActiveFedora::SolrService.instance.conn.get "select", params:{fq:["id:\"#{@asset2.id}\""],fl:['id',Solrizer.solr_name(:collection)]}
90
- expect(asset_results["response"]["numFound"]).to eq 1
91
- doc = asset_results["response"]["docs"].first
92
- expect(doc["id"]).to eq @asset2.id
93
- afterupdate = GenericFile.find(@asset2.id)
94
- expect(doc[Solrizer.solr_name(:collection)]).to eq afterupdate.to_solr[Solrizer.solr_name(:collection)]
95
- put :update, id: @collection, collection: {members:"remove"}, batch_document_ids: [@asset2]
96
- asset_results = ActiveFedora::SolrService.instance.conn.get "select", params:{fq:["id:\"#{@asset2.id}\""],fl:['id',Solrizer.solr_name(:collection)]}
97
- expect(asset_results["response"]["numFound"]).to eq 1
98
- doc = asset_results["response"]["docs"].first
99
- expect(doc["id"]).to eq @asset2.id
100
- afterupdate = GenericFile.find(@asset2.id)
101
- expect(doc[Solrizer.solr_name(:collection)]).to be_nil
77
+ context "a collections members" do
78
+ before do
79
+ @asset1 = GenericFile.new(title: ["First of the Assets"])
80
+ @asset1.apply_depositor_metadata(user.user_key)
81
+ @asset1.save
82
+ @asset2 = GenericFile.new(title: ["Second of the Assets"], depositor: user.user_key)
83
+ @asset2.apply_depositor_metadata(user.user_key)
84
+ @asset2.save
85
+ @asset3 = GenericFile.new(title: ["Third of the Assets"], depositor:'abc')
86
+ @asset3.apply_depositor_metadata(user.user_key)
87
+ @asset3.save
88
+ end
89
+
90
+ it "should set collection on members" do
91
+ put :update, id: collection, collection: {members:"add"}, batch_document_ids: [@asset3.id, @asset1.id, @asset2.id]
92
+ expect(response).to redirect_to routes.url_helpers.collection_path(collection.noid)
93
+ expect(assigns[:collection].members).to match_array [@asset2, @asset3, @asset1]
94
+ asset_results = ActiveFedora::SolrService.instance.conn.get "select", params:{fq:["id:\"#{@asset2.id}\""],fl:['id',Solrizer.solr_name(:collection)]}
95
+ expect(asset_results["response"]["numFound"]).to eq 1
96
+ doc = asset_results["response"]["docs"].first
97
+ expect(doc["id"]).to eq @asset2.id
98
+ afterupdate = GenericFile.find(@asset2.id)
99
+ expect(doc[Solrizer.solr_name(:collection)]).to eq afterupdate.to_solr[Solrizer.solr_name(:collection)]
100
+ put :update, id: collection, collection: {members:"remove"}, batch_document_ids: [@asset2]
101
+ asset_results = ActiveFedora::SolrService.instance.conn.get "select", params:{fq:["id:\"#{@asset2.id}\""],fl:['id',Solrizer.solr_name(:collection)]}
102
+ expect(asset_results["response"]["numFound"]).to eq 1
103
+ doc = asset_results["response"]["docs"].first
104
+ expect(doc["id"]).to eq @asset2.id
105
+ afterupdate = GenericFile.find(@asset2.id)
106
+ expect(doc[Solrizer.solr_name(:collection)]).to be_nil
107
+ end
108
+ end
109
+
110
+ context "updating a collections metadata" do
111
+ it "should save the metadata" do
112
+ put :update, id: collection, collection: { creator: ['Emily'] }
113
+ collection.reload
114
+ expect(collection.creator).to eq ['Emily']
115
+ end
102
116
  end
103
117
  end
104
118
 
105
119
  describe "#show" do
106
- before do
107
- @asset1 = GenericFile.new(title: ["First of the Assets"])
108
- @asset1.apply_depositor_metadata(user.user_key)
109
- @asset2 = GenericFile.new(title: ["Second of the Assets"], depositor:user.user_key)
110
- @asset2.apply_depositor_metadata(user.user_key)
111
- @asset3 = GenericFile.new(title: ["Third of the Assets"], depositor:user.user_key)
112
- @asset3.apply_depositor_metadata(user.user_key)
113
- @asset4 = GenericFile.new(title: ["Third of the Assets"], depositor:user.user_key)
114
- @asset4.apply_depositor_metadata(user.user_key)
115
- @collection = Collection.create(title: "My collection",
116
- description: "My incredibly detailed description of the collection",
117
- members: [@asset1,@asset2,@asset3]) do |collection|
118
- collection.apply_depositor_metadata(user)
119
- end
120
- allow(controller).to receive(:authorize!).and_return(true)
120
+ let(:asset1) do
121
+ GenericFile.new(title: ["First of the Assets"]) { |a| a.apply_depositor_metadata(user) }
122
+ end
123
+
124
+ let(:asset2) do
125
+ GenericFile.new(title: ["Second of the Assets"]) { |a| a.apply_depositor_metadata(user) }
126
+ end
127
+
128
+ let(:asset3) do
129
+ GenericFile.new(title: ["Third of the Assets"]) { |a| a.apply_depositor_metadata(user) }
130
+ end
131
+
132
+ let!(:asset4) do
133
+ GenericFile.create(title: ["Fourth of the Assets"]) { |a| a.apply_depositor_metadata(user) }
134
+ end
135
+
136
+ let(:collection) do
137
+ Collection.create(title: "My collection",
138
+ description: "My incredibly detailed description of the collection",
139
+ members: [asset1, asset2, asset3]) { |c| c.apply_depositor_metadata(user) }
121
140
  end
141
+
122
142
  context "when signed in" do
123
- before do
124
- sign_in user
125
- end
143
+ before { sign_in user }
126
144
 
127
145
  it "should return the collection and its members" do
128
- get :show, id: @collection
129
- expect(response).to be_successful
130
- expect(assigns[:collection].title).to eq @collection.title
131
- expect(assigns[:member_docs].map(&:id)).to match_array [@asset1, @asset2, @asset3].map(&:id)
132
- end
133
- it "should set the breadcrumb trail" do
134
146
  expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.title'), Sufia::Engine.routes.url_helpers.dashboard_index_path)
135
- get :show, id: @collection
147
+ get :show, id: collection
148
+ expect(response).to be_successful
149
+ expect(assigns[:presenter]).to be_kind_of Sufia::CollectionPresenter
150
+ expect(assigns[:collection].title).to eq collection.title
151
+ expect(assigns[:member_docs].map(&:id)).to match_array [asset1, asset2, asset3].map(&:id)
136
152
  end
137
153
  end
154
+
138
155
  context "not signed in" do
139
156
  it "should not show me files in the collection" do
140
- get :show, id: @collection
157
+ get :show, id: collection
141
158
  expect(assigns[:member_docs].count).to eq 0
142
159
  end
143
160
  end
144
161
  end
145
162
 
146
163
  describe "#edit" do
147
- before do
148
- @collection = Collection.new(title: "My collection", description: "My incredibly detailed description of the collection")
149
- @collection.apply_depositor_metadata(user.user_key)
150
- @collection.save
151
- sign_in user
164
+ let(:collection) do
165
+ Collection.create(title: "My collection",
166
+ description: "My incredibly detailed description of the collection") do |c|
167
+ c.apply_depositor_metadata(user)
168
+ end
152
169
  end
170
+
171
+ before { sign_in user }
172
+
153
173
  it "should not show flash" do
154
- get :edit, id: @collection
174
+ get :edit, id: collection
155
175
  expect(flash[:notice]).to be_nil
156
176
  end
157
177
  end
@@ -40,9 +40,11 @@ describe GenericFilesController do
40
40
  end
41
41
 
42
42
  context "when everything is perfect" do
43
+ render_views
43
44
  it "spawns a content deposit event job" do
44
45
  expect_any_instance_of(Sufia::GenericFile::Actor).to receive(:create_content).with(file, 'world.png', 'content').and_return(true)
45
46
  xhr :post, :create, files: [file], 'Filename' => 'The world', batch_id: batch_id, permission: {group: { public: 'read' } }, terms_of_service: '1'
47
+ expect(response.body).to eq '[{"name":null,"size":"","url":"/files/test123","thumbnail_url":"test123","delete_url":"deleteme","delete_type":"DELETE"}]'
46
48
  expect(flash[:error]).to be_nil
47
49
  end
48
50
 
@@ -288,6 +290,10 @@ describe GenericFilesController do
288
290
  end
289
291
 
290
292
  it 'renders the stats view' do
293
+ allow(controller.request).to receive(:referer).and_return('foo')
294
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.title'), Sufia::Engine.routes.url_helpers.dashboard_index_path)
295
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.my.files'), Sufia::Engine.routes.url_helpers.dashboard_files_path)
296
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.generic_file.browse_view'), Sufia::Engine.routes.url_helpers.generic_file_path(generic_file.noid))
291
297
  get :stats, id: generic_file
292
298
  expect(response).to be_success
293
299
  expect(response).to render_template(:stats)
@@ -326,14 +332,19 @@ describe GenericFilesController do
326
332
  end
327
333
  end
328
334
 
329
- it "should set the versions presenter" do
335
+ it "should set the breadcrumbs and versions presenter" do
336
+ allow(controller.request).to receive(:referer).and_return('foo')
337
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.title'), Sufia::Engine.routes.url_helpers.dashboard_index_path)
338
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.my.files'), Sufia::Engine.routes.url_helpers.dashboard_files_path)
339
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.generic_file.browse_view'), Sufia::Engine.routes.url_helpers.generic_file_path(generic_file.noid))
330
340
  get :edit, id: generic_file
331
341
 
332
342
  expect(response).to be_success
333
343
  expect(assigns[:generic_file]).to eq generic_file
344
+ expect(assigns[:form]).to be_kind_of Sufia::Forms::GenericFileEditForm
334
345
  expect(assigns[:version_list]).to be_kind_of Sufia::VersionListPresenter
346
+ expect(response).to render_template(:edit)
335
347
  end
336
-
337
348
  end
338
349
 
339
350
  describe "update" do
@@ -521,6 +532,10 @@ describe GenericFilesController do
521
532
  expect(assigns[:generic_file]).to eq generic_file
522
533
  expect(assigns[:audit_status]).to eq 'Audits have not yet been run on this file.'
523
534
  end
535
+ it 'renders an endnote file' do
536
+ get :show, id: generic_file, format: 'endnote'
537
+ expect(response).to be_successful
538
+ end
524
539
  end
525
540
  end
526
541
 
@@ -173,7 +173,7 @@ describe UsersController, :type => :controller do
173
173
  s1 = double('one')
174
174
  expect(UserEditProfileEventJob).to receive(:new).with(user.user_key).and_return(s1)
175
175
  expect(Sufia.queue).to receive(:push).with(s1).once
176
- post :update, id: user.user_key, user: { remove_avatar: true }
176
+ post :update, id: user.user_key, user: { remove_avatar: 'true' }
177
177
  expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
178
178
  expect(flash[:notice]).to include("Your profile has been updated")
179
179
  expect(User.find_by_user_key(user.user_key).avatar?).to be false
@@ -185,16 +185,18 @@ describe UsersController, :type => :controller do
185
185
  expect(UserEditProfileEventJob).to receive(:new).with(user.user_key).and_return(s1)
186
186
  expect(Sufia.queue).to receive(:push).with(s1).once
187
187
  expect_any_instance_of(User).to receive(:populate_attributes).once
188
- post :update, id: user.user_key, user: { update_directory: true }
188
+ post :update, id: user.user_key, user: { update_directory: 'true' }
189
189
  expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
190
190
  expect(flash[:notice]).to include("Your profile has been updated")
191
191
  end
192
+
192
193
  it "should set an social handles" do
193
194
  expect(user.twitter_handle).to be_blank
194
195
  expect(user.facebook_handle).to be_blank
195
196
  expect(user.googleplus_handle).to be_blank
196
197
  expect(user.linkedin_handle).to be_blank
197
- post :update, id: user.user_key, user: { twitter_handle: 'twit', facebook_handle: 'face', googleplus_handle: 'goo', linkedin_handle:"link" }
198
+ expect(user.orcid).to be_blank
199
+ post :update, id: user.user_key, user: { twitter_handle: 'twit', facebook_handle: 'face', googleplus_handle: 'goo', linkedin_handle:"link", orcid: '0000-0000-1111-2222' }
198
200
  expect(response).to redirect_to(@routes.url_helpers.profile_path(user.to_param))
199
201
  expect(flash[:notice]).to include("Your profile has been updated")
200
202
  u = User.find_by_user_key(user.user_key)
@@ -202,6 +204,14 @@ describe UsersController, :type => :controller do
202
204
  expect(u.facebook_handle).to eq 'face'
203
205
  expect(u.googleplus_handle).to eq 'goo'
204
206
  expect(u.linkedin_handle).to eq 'link'
207
+ expect(u.orcid).to eq 'http://orcid.org/0000-0000-1111-2222'
208
+ end
209
+
210
+ it 'displays a flash when invalid ORCID is entered' do
211
+ expect(user.orcid).to be_blank
212
+ post :update, id: user.user_key, user: { orcid: 'foobar' }
213
+ expect(response).to redirect_to(@routes.url_helpers.edit_profile_path(user.to_param))
214
+ expect(flash[:alert]).to include('Orcid must be a string of 19 characters, e.g., "0000-0000-0000-0000"')
205
215
  end
206
216
 
207
217
  context "when removing a trophy" do