hydra-head 4.0.3 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. data/.gitignore +1 -0
  2. data/HISTORY.textile +17 -2
  3. data/app/assets/stylesheets/hydra/html_refactor.css +3 -30
  4. data/app/assets/stylesheets/hydra/styles.css +6 -64
  5. data/app/controllers/downloads_controller.rb +1 -1
  6. data/app/controllers/hydra/assets_controller.rb +10 -1
  7. data/app/controllers/hydra/contributors_controller.rb +15 -1
  8. data/app/controllers/hydra/file_assets_controller.rb +1 -1
  9. data/app/controllers/hydra/permissions_controller.rb +14 -0
  10. data/app/helpers/hydra/article_metadata_helper_behavior.rb +14 -1
  11. data/app/helpers/hydra/downloads_helper_behavior.rb +6 -0
  12. data/app/helpers/hydra/facets_helper_behavior.rb +7 -0
  13. data/app/helpers/hydra/generic_content_objects_helper_behavior.rb +6 -0
  14. data/app/helpers/hydra/hydra_assets_helper_behavior.rb +10 -0
  15. data/app/helpers/hydra/hydra_fedora_metadata_helper_behavior.rb +31 -0
  16. data/app/helpers/hydra/hydra_helper_behavior.rb +18 -7
  17. data/app/helpers/hydra/hydra_uploader_helper_behavior.rb +5 -0
  18. data/app/helpers/hydra/inline_editable_metadata_helper_behavior.rb +6 -0
  19. data/app/helpers/hydra/javascript_includes_helper_behavior.rb +7 -0
  20. data/app/helpers/hydra/personalization_helper_behavior.rb +5 -0
  21. data/app/helpers/hydra/release_process_helper_behavior.rb +5 -0
  22. data/app/models/generic_content.rb +3 -0
  23. data/app/models/generic_image.rb +3 -0
  24. data/app/models/superuser.rb +4 -2
  25. data/app/models/user_attribute.rb +7 -2
  26. data/app/views/_add_assets_links.html.erb +4 -4
  27. data/app/views/catalog/_index_partials/_default.html.erb +2 -2
  28. data/app/views/catalog/show.html.erb +1 -1
  29. data/app/views/generic_contents/_index.html.erb +2 -2
  30. data/app/views/generic_images/_edit.html.erb +1 -1
  31. data/app/views/generic_images/_index.html.erb +2 -2
  32. data/app/views/hydra/file_assets/_file_assets_form.html.erb +1 -1
  33. data/app/views/hydra/file_assets/_index.html.erb +2 -2
  34. data/app/views/hydra/file_assets/_result.html.erb +1 -1
  35. data/app/views/layouts/hydra-head.html.erb +4 -1
  36. data/app/views/mods_assets/_index_list.html.erb +1 -1
  37. data/app/views/mods_assets/_index_table.html.erb +2 -2
  38. data/app/views/mods_assets/_show.html.erb +1 -1
  39. data/app/views/mods_assets/_show_file_assets.html.erb +1 -1
  40. data/config/jetty.yml +1 -1
  41. data/config/locales/hydra.en.yml +7 -0
  42. data/config/solr.yml +1 -1
  43. data/config/solr_mappings.yml +2 -2
  44. data/hydra-head.gemspec +5 -4
  45. data/lib/generators/hydra/head_generator.rb +6 -5
  46. data/lib/generators/hydra/templates/config/fedora.yml +1 -1
  47. data/lib/generators/hydra/templates/config/solr.yml +1 -1
  48. data/lib/hydra-head/version.rb +1 -1
  49. data/lib/hydra.rb +13 -11
  50. data/lib/hydra/assets.rb +5 -135
  51. data/lib/hydra/catalog.rb +6 -44
  52. data/lib/hydra/controller.rb +10 -27
  53. data/lib/hydra/controller/assets_controller_behavior.rb +142 -0
  54. data/lib/hydra/controller/catalog_controller_behavior.rb +56 -0
  55. data/lib/hydra/controller/controller_behavior.rb +59 -0
  56. data/lib/hydra/controller/file_assets_behavior.rb +142 -0
  57. data/lib/hydra/controller/repository_controller_behavior.rb +119 -0
  58. data/lib/hydra/controller/upload_behavior.rb +139 -0
  59. data/lib/hydra/file_assets.rb +3 -138
  60. data/lib/hydra/file_assets_helper.rb +6 -133
  61. data/lib/hydra/generic_content.rb +15 -0
  62. data/lib/hydra/generic_image.rb +10 -0
  63. data/lib/hydra/global_configurable.rb +46 -0
  64. data/lib/hydra/model_methods.rb +3 -3
  65. data/lib/hydra/model_mixins.rb +1 -1
  66. data/lib/hydra/model_mixins/solr_document_extension.rb +24 -0
  67. data/lib/hydra/repository_controller.rb +4 -95
  68. data/lib/hydra/ui/controller.rb +1 -2
  69. data/lib/hydra/user.rb +13 -1
  70. data/lib/railties/hydra-fixtures.rake +1 -1
  71. data/tasks/hydra-head.rake +2 -0
  72. data/{app/models → test_support/etc}/common_metadata_asset.rb +1 -2
  73. data/test_support/features/mods_asset_show.feature +1 -1
  74. data/test_support/features/support/env.rb +2 -0
  75. data/test_support/features/support/paths.rb +2 -0
  76. data/test_support/spec/controllers/catalog_controller_spec.rb +8 -0
  77. data/test_support/spec/controllers/catalog_controller_viewing_context_spec.rb +10 -1
  78. data/test_support/spec/controllers/catalog_valid_html_spec.rb +8 -0
  79. data/test_support/spec/controllers/contributors_controller_spec.rb +10 -0
  80. data/test_support/spec/controllers/file_assets_controller_spec.rb +15 -3
  81. data/test_support/spec/controllers/hydra-assets_controller_spec.rb +11 -1
  82. data/test_support/spec/controllers/hydra_controller_spec.rb +15 -4
  83. data/test_support/spec/controllers/permissions_controller_spec.rb +8 -0
  84. data/test_support/spec/helpers/access_controls_enforcement_spec.rb +1 -2
  85. data/test_support/spec/helpers/file_assets_helper_spec.rb +1 -1
  86. data/test_support/spec/helpers/generic_content_objects_helper_spec.rb +10 -1
  87. data/test_support/spec/helpers/hydra-repository_controller_spec.rb +1 -1
  88. data/test_support/spec/helpers/hydra_assets_helper_spec.rb +8 -0
  89. data/test_support/spec/helpers/hydra_fedora_metadata_helper_spec.rb +11 -0
  90. data/test_support/spec/helpers/hydra_helper_spec.rb +18 -0
  91. data/test_support/spec/helpers/hydra_model_methods_spec.rb +0 -12
  92. data/test_support/spec/helpers/hydra_uploader_helper_spec.rb +8 -0
  93. data/test_support/spec/helpers/javascript_includes_helper_spec.rb +9 -1
  94. data/test_support/spec/lib/catalog_spec.rb +10 -3
  95. data/test_support/spec/lib/global_configurable_spec.rb +98 -0
  96. data/test_support/spec/lib/model_methods_spec.rb +29 -0
  97. data/test_support/spec/models/generic_content_spec.rb +11 -0
  98. data/test_support/spec/models/generic_image_spec.rb +15 -0
  99. data/test_support/spec/models/user_spec.rb +25 -0
  100. metadata +39 -37
  101. data/app/models/ability.rb +0 -5
  102. data/app/models/hydra/ability.rb +0 -137
  103. data/app/models/hydra/datastream/common_mods_index_methods.rb +0 -47
  104. data/app/models/hydra/datastream/mods_article.rb +0 -530
  105. data/app/models/hydra/datastream/mods_dataset.rb +0 -173
  106. data/app/models/hydra/datastream/mods_generic_content.rb +0 -498
  107. data/app/models/hydra/datastream/mods_image.rb +0 -497
  108. data/app/models/hydra/datastream/rights_metadata.rb +0 -191
  109. data/app/models/hydra/role_mapper_behavior.rb +0 -33
  110. data/app/models/role_mapper.rb +0 -6
  111. data/lib/hydra/access_controls_enforcement.rb +0 -237
  112. data/lib/hydra/access_controls_evaluation.rb +0 -38
  113. data/lib/hydra/common_mods_index_methods.rb +0 -46
  114. data/lib/hydra/model_mixins/mods_object.rb +0 -17
  115. data/lib/hydra/model_mixins/rights_metadata.rb +0 -357
  116. data/lib/hydra/mods_article.rb +0 -535
  117. data/lib/hydra/mods_dataset.rb +0 -177
  118. data/lib/hydra/mods_generic_content.rb +0 -500
  119. data/lib/hydra/mods_image.rb +0 -500
  120. data/lib/uva/mods_index_methods.rb +0 -30
  121. data/test_support/spec/lib/common_mods_index_methods_spec.rb +0 -26
  122. data/test_support/spec/models/ability_spec.rb +0 -40
  123. data/test_support/spec/models/hydra_rights_metadata_spec.rb +0 -175
  124. data/test_support/spec/models/role_mapper_spec.rb +0 -22
  125. data/test_support/spec/unit/rights_metadata_spec.rb +0 -80
@@ -1,30 +0,0 @@
1
- # @deprecated Leftover from Hydrangea; will be removed in release 5.x
2
- module Uva
3
- module ModsIndexMethods
4
-
5
- def self.included(base)
6
- ActiveSupport::Deprecation.warn("Uva::ModsIndexMethods has been deprecated and its functionality has been encorporated into Hydra::Datastream::ModsArticle")
7
- end
8
-
9
- # extracts the last_name##full_name##computing_id to be used by home view
10
- def extract_person_full_names_and_computing_ids
11
- names = {}
12
- self.find_by_terms(:person).each do |person|
13
- name_parts = person.children.inject({}) do |hash,child|
14
- hash[child.get_attribute(:type)] = child.text if ["family","given"].include? child.get_attribute(:type)
15
- hash["computing_id"] = child.text if child.name == 'computing_id'
16
- hash
17
- end
18
- if name_parts.length == 3 and person.search(:roleTerm).children.text.include?("Author")
19
- if name_parts["family"].blank? && name_parts["given"].blank? && name_parts["computing_id"].blank?
20
- value = "Unknown Author"
21
- else
22
- value = "#{name_parts["family"]}, #{name_parts["given"]} (#{name_parts["computing_id"]})"
23
- end
24
- ::Solrizer::Extractor.insert_solr_field_value(names, "person_full_name_cid_facet", value) if name_parts.length == 3
25
- end
26
- end
27
- names
28
- end
29
- end
30
- end
@@ -1,26 +0,0 @@
1
- # Need way to find way to stub current_user and RoleMapper in order to run these tests
2
- require File.expand_path( File.join( File.dirname(__FILE__),'..','spec_helper') )
3
-
4
-
5
- describe Hydra::Datastream::CommonModsIndexMethods do
6
- describe "extract_person_full_names" do
7
- it "should return an array of Solr::Field objects for :person_full_name_facet" do
8
- ma = ModsAsset.find("hydrangea:fixture_mods_article1")
9
- full_names = ma.datastreams["descMetadata"].extract_person_full_names
10
- full_names.should be_kind_of Hash
11
- full_names["person_full_name_facet"].should == ["FAMILY NAME, GIVEN NAMES", "Lacks, Henrietta"]
12
- end
13
- end
14
- describe "extract_person_organizations" do
15
- it "should return an array of Solr::Field objects for :mods_organization_facet" do
16
- orgs = ModsAsset.find("hydrangea:fixture_mods_article1").datastreams["descMetadata"].extract_person_organizations
17
- orgs.should be_kind_of Hash
18
- orgs["mods_organization_facet"].should be_kind_of Array
19
- orgs["mods_organization_facet"].length.should == 2
20
- orgs["mods_organization_facet"].first.should == "FACULTY, UNIVERSITY"
21
- orgs["mods_organization_facet"].last.should == "Baltimore"
22
- end
23
- end
24
- end
25
-
26
-
@@ -1,40 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Ability do
4
- it "should call custom_permissions" do
5
- Ability.any_instance.expects(:custom_permissions)
6
- subject = Ability.new(nil)
7
- subject.can?(:delete, 7)
8
- end
9
-
10
- context "for a not-signed in user" do
11
- subject { Ability.new(nil) }
12
- it "should be able to read objects that are public" do
13
- public_object = ModsAsset.new
14
- public_object.rightsMetadata.update_permissions("group"=>{'public'=>'read'})
15
- public_object.save
16
- subject.can?(:read, public_object).should be_true
17
- end
18
- it "should not be able to read objects that are registered" do
19
- registered_object = ModsAsset.new
20
- registered_object.rightsMetadata.update_permissions("group"=>{'registered'=>'read'})
21
- registered_object.save
22
- subject.can?(:read, registered_object).should_not be_true
23
- end
24
- end
25
- context "for a signed in user" do
26
- subject { Ability.new(FactoryGirl.create(:user)) }
27
- it "should be able to read objects that are public" do
28
- public_object = ModsAsset.new
29
- public_object.rightsMetadata.update_permissions("group"=>{'public'=>'read'})
30
- public_object.save
31
- subject.can?(:read, public_object).should be_true
32
- end
33
- it "should be able to read objects that are registered" do
34
- registered_object = ModsAsset.new
35
- registered_object.rightsMetadata.update_permissions("group"=>{'registered'=>'read'})
36
- registered_object.save
37
- subject.can?(:read, registered_object).should be_true
38
- end
39
- end
40
- end
@@ -1,175 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- require "nokogiri"
3
-
4
- describe Hydra::Datastream::RightsMetadata do
5
-
6
- before(:each) do
7
- # The way RubyDora loads objects prevents us from stubbing the fedora connection :(
8
- # ActiveFedora::RubydoraConnection.stubs(:instance).returns(stub_everything())
9
- obj = ActiveFedora::Base.new
10
- @sample = Hydra::Datastream::RightsMetadata.new(obj.inner_object, nil)
11
- @sample.stubs(:content).returns('')
12
- end
13
-
14
- describe "permissions" do
15
- describe "setter" do
16
- it "should create/update/delete permissions for the given user/group" do
17
- @sample.class.terminology.xpath_for(:access, :person, "person_123").should == '//oxns:access/oxns:machine/oxns:person[contains(., "person_123")]'
18
-
19
- person_123_perms_xpath = @sample.class.terminology.xpath_for(:access, :person, "person_123")
20
- group_zzz_perms_xpath = @sample.class.terminology.xpath_for(:access, :group, "group_zzz")
21
-
22
- @sample.find_by_terms(person_123_perms_xpath).should be_empty
23
- @sample.permissions({"person"=>"person_123"}, "edit").should == "edit"
24
- @sample.permissions({"group"=>"group_zzz"}, "edit").should == "edit"
25
-
26
- @sample.find_by_terms(person_123_perms_xpath).first.ancestors("access").first.attributes["type"].text.should == "edit"
27
- @sample.find_by_terms(group_zzz_perms_xpath).first.ancestors("access").first.attributes["type"].text.should == "edit"
28
-
29
- @sample.permissions({"person"=>"person_123"}, "read")
30
- @sample.permissions({"group"=>"group_zzz"}, "read")
31
- @sample.find_by_terms(person_123_perms_xpath).length.should == 1
32
-
33
- @sample.find_by_terms(person_123_perms_xpath).first.ancestors("access").first.attributes["type"].text.should == "read"
34
- @sample.find_by_terms(group_zzz_perms_xpath).first.ancestors("access").first.attributes["type"].text.should == "read"
35
-
36
- @sample.permissions({"person"=>"person_123"}, "none").should == "none"
37
- @sample.permissions({"group"=>"group_zzz"}, "none").should == "none"
38
- @sample.find_by_terms(person_123_perms_xpath).should be_empty
39
- @sample.find_by_terms(person_123_perms_xpath).should be_empty
40
- end
41
- it "should remove existing permissions (leaving only one permission level per user/group)" do
42
- person_123_perms_xpath = @sample.class.terminology.xpath_for(:access, :person, "person_123")
43
- group_zzz_perms_xpath = @sample.class.terminology.xpath_for(:access, :group, "group_zzz")
44
-
45
- @sample.find_by_terms(person_123_perms_xpath).length.should == 0
46
- @sample.find_by_terms(group_zzz_perms_xpath).length.should == 0
47
- @sample.permissions({"person"=>"person_123"}, "read")
48
- @sample.permissions({"group"=>"group_zzz"}, "read")
49
- @sample.find_by_terms(person_123_perms_xpath).length.should == 1
50
- @sample.find_by_terms(group_zzz_perms_xpath).length.should == 1
51
-
52
- @sample.permissions({"person"=>"person_123"}, "edit")
53
- @sample.permissions({"group"=>"group_zzz"}, "edit")
54
- @sample.find_by_terms(person_123_perms_xpath).length.should == 1
55
- @sample.find_by_terms(group_zzz_perms_xpath).length.should == 1
56
- end
57
- it "should not impact other users permissions" do
58
- @sample.permissions({"person"=>"person_123"}, "read")
59
- @sample.permissions({"person"=>"person_789"}, "edit")
60
-
61
- @sample.permissions({"person"=>"person_123"}).should == "read"
62
- @sample.permissions({"person"=>"person_456"}, "read")
63
- @sample.permissions({"person"=>"person_123"}).should == "read"
64
- @sample.permissions({"person"=>"person_456"}).should == "read"
65
- @sample.permissions({"person"=>"person_789"}).should == "edit"
66
-
67
-
68
- end
69
- end
70
- describe "getter" do
71
- it "should return permissions level for the given user/group" do
72
- @sample.permissions({"person"=>"person_123"}, "edit")
73
- @sample.permissions({"group"=>"group_zzz"}, "discover")
74
- @sample.permissions({"person"=>"person_123"}).should == "edit"
75
- @sample.permissions({"group"=>"group_zzz"}).should == "discover"
76
- @sample.permissions({"group"=>"foo_people"}).should == "none"
77
- end
78
- end
79
- end
80
- describe "groups" do
81
- it "should return a hash of all groups with permissions set, along with their permission levels" do
82
- @sample.permissions({"group"=>"group_zzz"}, "edit")
83
- @sample.permissions({"group"=>"public"}, "discover")
84
-
85
- #@sample.groups.should == {"group_zzz"=>"edit", "public"=>"discover"}
86
- @sample.groups.should == {"public"=>"discover", "group_zzz"=>"edit"}
87
- end
88
- end
89
- describe "individuals" do
90
- it "should return a hash of all individuals with permissions set, along with their permission levels" do
91
- @sample.permissions({"person"=>"person_123"}, "read")
92
- @sample.permissions({"person"=>"person_456"}, "edit")
93
- @sample.individuals.should == {"person_123"=>"read", "person_456"=>"edit"}
94
- end
95
- end
96
-
97
- describe "update_permissions" do
98
- it "should accept a hash of groups and persons, updating their permissions accordingly" do
99
- @sample.expects(:permissions).with({"group" => "group1"}, "discover")
100
- @sample.expects(:permissions).with({"group" => "group2"}, "edit")
101
- @sample.expects(:permissions).with({"person" => "person1"}, "read")
102
- @sample.expects(:permissions).with({"person" => "person2"}, "discover")
103
-
104
- @sample.update_permissions( {"group"=>{"group1"=>"discover","group2"=>"edit"}, "person"=>{"person1"=>"read","person2"=>"discover"}} )
105
- end
106
- end
107
-
108
- describe "update_indexed_attributes" do
109
- it "should update the declared properties" do
110
- @sample.find_by_terms(*[:edit_access, :person]).length.should == 0
111
- @sample.update_values([:edit_access, :person]=>"user id").should == {"edit_access_person"=>{"0"=>"user id"}}
112
- @sample.find_by_terms(*[:edit_access, :person]).length.should == 1
113
- @sample.find_by_terms(*[:edit_access, :person]).first.text.should == "user id"
114
- end
115
- end
116
- describe "to_solr" do
117
- it "should populate solr doc with the correct fields" do
118
- params = {[:edit_access, :person]=>"Lil Kim", [:edit_access, :group]=>["group1","group2"], [:discover_access, :group]=>["public"],[:discover_access, :person]=>["Joe Schmoe"]}
119
- @sample.update_values(params)
120
- solr_doc = @sample.to_solr
121
-
122
- solr_doc["edit_access_person_t"].should == ["Lil Kim"]
123
- solr_doc["edit_access_group_t"].sort.should == ["group1", "group2"]
124
- solr_doc["discover_access_person_t"].should == ["Joe Schmoe"]
125
- solr_doc["discover_access_group_t"].should == ["public"]
126
- end
127
- it "should solrize fixture content correctly" do
128
- fixture_xml = Nokogiri::XML::Document.parse( File.new(File.join( File.dirname(__FILE__), "../../fixtures/hydrangea_fixture_mods_article1.foxml.xml") ))
129
- fixture_rights = fixture_xml.xpath("//foxml:datastream[@ID='rightsMetadata']/foxml:datastreamVersion[last()]/foxml:xmlContent", {'foxml'=>"info:fedora/fedora-system:def/foxml#"}).first.to_xml
130
- lsample = Hydra::Datastream::RightsMetadata.new(nil, nil)
131
- lsample.content = fixture_rights
132
- # lsample.expects(:content).returns('')
133
- lsample = Hydra::Datastream::RightsMetadata.from_xml(fixture_rights, lsample)
134
- solr_doc = lsample.to_solr
135
- solr_doc["edit_access_person_t"].should == ["researcher1"]
136
- solr_doc["edit_access_group_t"].should == ["archivist"]
137
- solr_doc["read_access_group_t"].should == ["public"]
138
- solr_doc["discover_access_group_t"].should == ["public"]
139
- end
140
- end
141
- describe "embargo_release_date=" do
142
- it "should update the appropriate node with the value passed" do
143
- @sample.embargo_release_date=("2010-12-01")
144
- @sample.embargo_release_date.should == "2010-12-01"
145
- end
146
- it "should only accept valid date values" do
147
-
148
- end
149
- end
150
- describe "embargo_release_date" do
151
- it "should return solr formatted date" do
152
- @sample.embargo_release_date=("2010-12-01")
153
- @sample.embargo_release_date(:format=>:solr_date).should == "2010-12-01T23:59:59Z"
154
- end
155
-
156
- # this test was returning '' under 1.9 and returning nil under ree and 1.8.7
157
- it "should not return anything if the date is empty string" do
158
- @sample.update_values({[:embargo,:machine,:date]=>''})
159
- @sample.embargo_release_date(:format=>:solr_date).should be_blank
160
- end
161
- end
162
- describe "under_embargo?" do
163
- it "should return true if the current date is before the embargo release date" do
164
- @sample.embargo_release_date=Date.today+1.month
165
- @sample.under_embargo?.should be_true
166
- end
167
- it "should return false if the current date is after the embargo release date" do
168
- @sample.embargo_release_date=Date.today-1.month
169
- @sample.under_embargo?.should be_false
170
- end
171
- it "should return false if there is no embargo date" do
172
- @sample.under_embargo?.should be_false
173
- end
174
- end
175
- end
@@ -1,22 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe RoleMapper do
4
-
5
- it "should define the 4 roles" do
6
- RoleMapper.role_names.sort.should == %w(admin_policy_object_editor archivist donor patron researcher)
7
- end
8
- it "should quer[iy]able for roles for a given user" do
9
- RoleMapper.roles('leland_himself@example.com').sort.should == ['archivist', 'donor', 'patron']
10
- RoleMapper.roles('archivist2@example.com').should == ['archivist']
11
- end
12
-
13
- it "should return an empty array if there are no roles" do
14
- RoleMapper.roles('zeus@olympus.mt').empty?.should == true
15
- end
16
- it "should know who is what" do
17
- RoleMapper.whois('archivist').sort.should == %w(archivist1@example.com archivist2@example.com leland_himself@example.com)
18
- RoleMapper.whois('salesman').empty?.should == true
19
- RoleMapper.whois('admin_policy_object_editor').sort.should == %w(archivist1@example.com)
20
- end
21
-
22
- end
@@ -1,80 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Hydra::ModelMixins::RightsMetadata do
4
- subject { ModsAsset.new }
5
- it "should have a set of permissions" do
6
- subject.discover_groups=['group1', 'group2']
7
- subject.edit_users=['user1']
8
- subject.read_users=['user2', 'user3']
9
- subject.permissions.should include({:type=>"group", :access=>"discover", :name=>"group1"},
10
- {:type=>"group", :access=>"discover", :name=>"group2"},
11
- {:type=>"user", :access=>"read", :name=>"user2"},
12
- {:type=>"user", :access=>"read", :name=>"user3"},
13
- {:type=>"user", :access=>"edit", :name=>"user1"})
14
- end
15
-
16
- describe "updating permissions" do
17
- it "should create new group permissions" do
18
- subject.permissions = [{:name=>'group1', :access=>'discover', :type=>'group'}]
19
- subject.permissions.should == [{:type=>'group', :access=>'discover', :name=>'group1'}]
20
- end
21
- it "should create new user permissions" do
22
- subject.permissions = [{:name=>'user1', :access=>'discover', :type=>'user'}]
23
- subject.permissions.should == [{:type=>'user', :access=>'discover', :name=>'user1'}]
24
- end
25
- it "should not replace existing groups" do
26
- subject.permissions = [{:name=>'group1', :access=>'discover', :type=>'group'}]
27
- subject.permissions = [{:name=>'group2', :access=>'discover', :type=>'group'}]
28
- subject.permissions.should == [{:type=>'group', :access=>'discover', :name=>'group1'},
29
- {:type=>'group', :access=>'discover', :name=>'group2'}]
30
- end
31
- it "should not replace existing users" do
32
- subject.permissions = [{:name=>'user1', :access=>'discover', :type=>'user'}]
33
- subject.permissions = [{:name=>'user2', :access=>'discover', :type=>'user'}]
34
- subject.permissions.should == [{:type=>'user', :access=>'discover', :name=>'user1'},
35
- {:type=>'user', :access=>'discover', :name=>'user2'}]
36
- end
37
- it "should update permissions on existing users" do
38
- subject.permissions = [{:name=>'user1', :access=>'discover', :type=>'user'}]
39
- subject.permissions = [{:name=>'user1', :access=>'edit', :type=>'user'}]
40
- subject.permissions.should == [{:type=>'user', :access=>'edit', :name=>'user1'}]
41
- end
42
- it "should update permissions on existing groups" do
43
- subject.permissions = [{:name=>'group1', :access=>'discover', :type=>'group'}]
44
- subject.permissions = [{:name=>'group1', :access=>'edit', :type=>'group'}]
45
- subject.permissions.should == [{:type=>'group', :access=>'edit', :name=>'group1'}]
46
- end
47
-
48
- end
49
-
50
- context "with rightsMetadata" do
51
- before do
52
- subject.rightsMetadata.update_permissions("person"=>{"person1"=>"read","person2"=>"discover"}, "group"=>{'group-6' => 'read', "group-7"=>'read', 'group-8'=>'edit'})
53
- subject.save
54
- end
55
- it "should have read groups accessor" do
56
- subject.read_groups.should == ['group-6', 'group-7']
57
- end
58
- it "should have read groups string accessor" do
59
- subject.read_groups_string.should == 'group-6, group-7'
60
- end
61
- it "should have read groups writer" do
62
- subject.read_groups = ['group-2', 'group-3']
63
- subject.rightsMetadata.groups.should == {'group-2' => 'read', 'group-3'=>'read', 'group-8' => 'edit'}
64
- subject.rightsMetadata.individuals.should == {"person1"=>"read","person2"=>"discover"}
65
- end
66
-
67
- it "should have read groups string writer" do
68
- subject.read_groups_string = 'umg/up.dlt.staff, group-3'
69
- subject.rightsMetadata.groups.should == {'umg/up.dlt.staff' => 'read', 'group-3'=>'read', 'group-8' => 'edit'}
70
- subject.rightsMetadata.individuals.should == {"person1"=>"read","person2"=>"discover"}
71
- end
72
- it "should only revoke eligible groups" do
73
- subject.set_read_groups(['group-2', 'group-3'], ['group-6'])
74
- # 'group-7' is not eligible to be revoked
75
- subject.rightsMetadata.groups.should == {'group-2' => 'read', 'group-3'=>'read', 'group-7' => 'read', 'group-8' => 'edit'}
76
- subject.rightsMetadata.individuals.should == {"person1"=>"read","person2"=>"discover"}
77
- end
78
- end
79
-
80
- end