hydra-collections 4.0.0.beta1 → 4.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c7e16cee43a7fdaf1ef7f112ae42f8eb1ddb684
4
- data.tar.gz: d99f69ce5988cf2023a811344fa461bf3b859e2f
3
+ metadata.gz: 878b10998101cbd6d3b1420408215b6605180517
4
+ data.tar.gz: 015496e71bfabd20eb28668f4dd1d42ed3a83b48
5
5
  SHA512:
6
- metadata.gz: fe6f6ae745110afbf7fa17e8139a075124421e9f39796b79eb6ede511e80cfdd75238469262be83dd929b941f6d43f66f03e1af5dc23096ce9d53b7e9a2cc533
7
- data.tar.gz: b1a372ad7bfa3419d0fddc0350e11b6966b41dac9a30e53e996b05f494164af66e79afc06fc2325181889aa1477ed5945938b8d6976a2ad976e0d6e8c1939af6
6
+ metadata.gz: 374d069be8e10287435c0544a8c571da379cfd8e86d05176f327a4340cba7c95df59005ef599106a516d4f33b1ba0763d1ecded7a9b61546886f229e75c8c64d
7
+ data.tar.gz: ed325dd51ed6abbfd585702f9a6f796f9d66b088767b4230100669e4116cdcd0678d91a687f0cda705fe3a68f03dce186a3941ba97cf4370f082a1c355e56a6f
@@ -5,7 +5,8 @@ module CollectionsSearchHelper
5
5
  # @return [String] the title of the collection if available, otherwise its pid
6
6
  def collection_name(collection_pid)
7
7
  #TODO this can be loaded from solr
8
- Collection.find(collection_pid).title || collection_pid
8
+ # the .result is due to ActiveTriples/ActiveTripes#74
9
+ Collection.find(collection_pid).title.result || collection_pid
9
10
  end
10
11
 
11
12
  end
@@ -9,7 +9,7 @@ module Hydra
9
9
  included do
10
10
  has_and_belongs_to_many :members, predicate: ActiveFedora::RDF::Fcrepo::RelsExt.hasCollectionMember, class_name: "ActiveFedora::Base" , after_remove: :update_member
11
11
 
12
- property :depositor, predicate: RDF::URI.new("http://id.loc.gov/vocabulary/relators/dpt")
12
+ property :depositor, predicate: RDF::URI.new("http://id.loc.gov/vocabulary/relators/dpt"), multiple: false
13
13
 
14
14
  property :part_of, predicate: RDF::DC.isPartOf
15
15
  property :contributor, predicate: RDF::DC.contributor do |index|
@@ -18,10 +18,10 @@ module Hydra
18
18
  property :creator, predicate: RDF::DC.creator do |index|
19
19
  index.as :stored_searchable, :facetable
20
20
  end
21
- property :title, predicate: RDF::DC.title do |index|
21
+ property :title, predicate: RDF::DC.title, multiple: false do |index|
22
22
  index.as :stored_searchable
23
23
  end
24
- property :description, predicate: RDF::DC.description do |index|
24
+ property :description, predicate: RDF::DC.description, multiple: false do |index|
25
25
  index.type :text
26
26
  index.as :stored_searchable
27
27
  end
@@ -31,11 +31,11 @@ module Hydra
31
31
  property :date_created, predicate: RDF::DC.created do |index|
32
32
  index.as :stored_searchable
33
33
  end
34
- property :date_uploaded, predicate: RDF::DC.dateSubmitted do |index|
34
+ property :date_uploaded, predicate: RDF::DC.dateSubmitted, multiple: false do |index|
35
35
  index.type :date
36
36
  index.as :stored_sortable
37
37
  end
38
- property :date_modified, predicate: RDF::DC.modified do |index|
38
+ property :date_modified, predicate: RDF::DC.modified, multiple: false do |index|
39
39
  index.type :date
40
40
  index.as :stored_sortable
41
41
  end
@@ -62,27 +62,6 @@ module Hydra
62
62
  end
63
63
  property :related_url, predicate: RDF::RDFS.seeAlso
64
64
 
65
- # Single-valued properties
66
- def depositor
67
- super.first
68
- end
69
-
70
- def title
71
- super.first
72
- end
73
-
74
- def date_uploaded
75
- super.first
76
- end
77
-
78
- def date_modified
79
- super.first
80
- end
81
-
82
- def description
83
- super.first
84
- end
85
-
86
65
  before_create :set_date_uploaded
87
66
  before_save :set_date_modified
88
67
  before_destroy :update_all_members
@@ -96,8 +75,8 @@ module Hydra
96
75
 
97
76
  def terms_for_display
98
77
  [
99
- :part_of, :contributor, :creator, :title, :description, :publisher,
100
- :date_created, :date_uploaded, :date_modified, :subject, :language, :rights,
78
+ :part_of, :contributor, :creator, :title, :description, :publisher,
79
+ :date_created, :date_uploaded, :date_modified, :subject, :language, :rights,
101
80
  :resource_type, :identifier, :based_near, :tag, :related_url
102
81
  ]
103
82
  end
@@ -1,5 +1,5 @@
1
1
  module Hydra
2
2
  module Collections
3
- VERSION = "4.0.0.beta1"
3
+ VERSION = "4.0.0.beta2"
4
4
  end
5
5
  end
@@ -11,18 +11,7 @@ describe CollectionsController, :type => :controller do
11
11
  class GenericFile < ActiveFedora::Base
12
12
  include Hydra::Collections::Collectible
13
13
 
14
- property :title, predicate: ::RDF::DC.title
15
-
16
- # Hack until https://github.com/no-reply/ActiveTriples/pull/37 is merged
17
- def title_with_first
18
- title_without_first.first
19
- end
20
- alias_method_chain :title, :first
21
-
22
- # use this until https://github.com/projecthydra/active_fedora/issues/457 is resolved
23
- def to_param
24
- id
25
- end
14
+ property :title, predicate: ::RDF::DC.title, multiple: false
26
15
 
27
16
  def to_solr(solr_doc={})
28
17
  super.tap do |solr_doc|
@@ -293,7 +282,7 @@ describe CollectionsController, :type => :controller do
293
282
  context "When there are search matches that are not in the collection" do
294
283
  before do
295
284
  GenericFile.create!(title: "#{@asset1.id} #{@asset1.title}")
296
- GenericFile.create!(title: @asset1.title)
285
+ GenericFile.create!(title: @asset1.title.to_s)
297
286
  end
298
287
  # NOTE: This test depends on title_tesim being in the qf in solrconfig.xml
299
288
  it "should query the collections and show only the collection assets" do
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe CollectionsSearchHelper, :type => :helper do
4
4
  describe "collection_name" do
5
- let (:collection_without_title) { Collection.create() }
5
+ let (:collection_without_title) { Collection.create!() }
6
6
  let (:collection_with_title) { Collection.create(title: "Title of Collection 2") }
7
7
 
8
8
  it "should return the pid if no title available" do
@@ -19,94 +19,153 @@ describe Collection, :type => :model do
19
19
  Object.send(:remove_const, :GenericFile)
20
20
  end
21
21
 
22
- before do
23
- @collection = Collection.new
24
- @collection.apply_depositor_metadata(@user.user_key)
25
- @collection.save!
26
- @gf1 = GenericFile.create
27
- @gf2 = GenericFile.create
28
- end
22
+ let(:gf1) { GenericFile.create }
23
+ let(:gf2) { GenericFile.create }
29
24
 
30
- it "should have a depositor" do
31
- expect(@collection.depositor).to eq(@user.user_key)
32
- end
25
+ let(:user) { @user }
26
+
27
+ describe "#to_solr" do
28
+ let(:collection) { Collection.new(title: "A good title") }
33
29
 
34
- it "should allow the depositor to edit and read" do
35
- ability = Ability.new(@user)
36
- expect(ability.can?(:read, @collection)).to be true
37
- expect(ability.can?(:edit, @collection)).to be true
30
+ subject { collection.to_solr }
31
+
32
+ it "should have title" do
33
+ expect(subject['title_tesim']).to eq ['A good title']
34
+ end
38
35
  end
39
36
 
40
- it "should be empty by default" do
41
- expect(@collection.members).to be_empty
37
+ describe "#depositor" do
38
+ before do
39
+ subject.apply_depositor_metadata(user)
40
+ end
41
+
42
+ it "should have a depositor" do
43
+ expect(subject.depositor).to eq(user.user_key)
44
+ end
42
45
  end
43
46
 
44
- it "should have many files" do
45
- @collection.members = [@gf1, @gf2]
46
- @collection.save
47
- expect(@collection.reload.members).to match_array [@gf1, @gf2]
47
+ describe "the ability" do
48
+ let(:collection) do
49
+ Collection.new.tap do |collection|
50
+ collection.apply_depositor_metadata(user)
51
+ collection.save
52
+ end
53
+ end
54
+ subject { Ability.new(user) }
55
+
56
+ it "should allow the depositor to edit and read" do
57
+ expect(subject.can?(:read, collection)).to be true
58
+ expect(subject.can?(:edit, collection)).to be true
59
+ end
48
60
  end
49
61
 
50
- it "should allow new files to be added" do
51
- @collection.members = [@gf1]
52
- @collection.save
53
- @collection.reload
54
- @collection.members << @gf2
55
- @collection.save
56
- expect(@collection.reload.members).to match_array [@gf1, @gf2]
62
+ describe "#members" do
63
+ it "should be empty by default" do
64
+ expect(subject.members).to be_empty
65
+ end
66
+
67
+ context "adding members" do
68
+ context "using assignment" do
69
+ subject { Collection.create(members: [gf1, gf2]) }
70
+
71
+ it "should have many files" do
72
+ expect(subject.reload.members).to eq [gf1, gf2]
73
+ end
74
+ end
75
+
76
+ context "using append" do
77
+ before do
78
+ subject.members = [gf1]
79
+ subject.save
80
+ end
81
+ it "should allow new files to be added" do
82
+ subject.reload
83
+ subject.members << gf2
84
+ subject.save
85
+ expect(subject.reload.members).to eq [gf1, gf2]
86
+ end
87
+ end
88
+ end
89
+
90
+
91
+ context "removing members" do
92
+ before do
93
+ subject.members = [gf1, gf2]
94
+ subject.save
95
+ end
96
+
97
+ it "should allow files to be removed" do
98
+ expect(gf1.collections).to eq [subject] # This line forces the "collections" to be cached.
99
+ # We need to ensure that deleting causes the collection to be flushed.
100
+ solr_doc_before_remove = ActiveFedora::SolrInstanceLoader.new(ActiveFedora::Base, gf1.id).send(:solr_doc)
101
+ expect(solr_doc_before_remove["collection_tesim"]).to eq [subject.id]
102
+ subject.reload.members.delete(gf1)
103
+ subject.save
104
+ expect(subject.reload.members).to eq [gf2]
105
+ solr_doc_after_remove = ActiveFedora::SolrInstanceLoader.new(ActiveFedora::Base, gf1.id).send(:solr_doc)
106
+ expect(solr_doc_after_remove["collection_tesim"]).to be_nil
107
+ end
108
+ end
57
109
  end
58
110
 
59
111
  it "should set the date uploaded on create" do
60
- @collection.save
61
- expect(@collection.date_uploaded).to be_kind_of(Date)
62
- end
63
- it "should update the date modified on update" do
64
- uploaded_date = Date.today
65
- modified_date = Date.tomorrow
66
- expect(Date).to receive(:today).twice.and_return(uploaded_date, modified_date)
67
- @collection.save
68
- expect(@collection.date_modified).to eq(uploaded_date)
69
- @collection.members = [@gf1]
70
- @collection.save
71
- expect(@collection.date_modified).to eq(modified_date)
72
- @gf1 = @gf1.reload
73
- expect(@gf1.collections).to include(@collection)
74
- expect(@gf1.to_solr[Solrizer.solr_name(:collection)]).to eq([@collection.id])
112
+ subject.save
113
+ expect(subject.date_uploaded).to be_kind_of(Date)
114
+ end
115
+
116
+ describe "when updating" do
117
+ let(:gf1) { GenericFile.create }
118
+
119
+ it "should update the date modified on update" do
120
+ uploaded_date = Date.today
121
+ modified_date = Date.tomorrow
122
+ subject.save
123
+ allow(Date).to receive(:today).and_return(uploaded_date, modified_date)
124
+ subject.save
125
+ expect(subject.date_modified).to eq uploaded_date
126
+ subject.members = [gf1]
127
+ subject.save
128
+ expect(subject.date_modified).to eq modified_date
129
+ expect(gf1.reload.collections).to include(subject)
130
+ expect(gf1.to_solr[Solrizer.solr_name(:collection)]).to eq [subject.id]
131
+ end
75
132
  end
133
+
76
134
  it "should have a title" do
77
- @collection.title = "title"
78
- @collection.save
79
- expect(Collection.find(@collection.id).title).to eq(@collection.title)
135
+ subject.title = "title"
136
+ subject.save
137
+ expect(subject.title).to eq "title"
80
138
  end
139
+
81
140
  it "should have a description" do
82
- @collection.description = "description"
83
- @collection.save
84
- expect(Collection.find(@collection.id).description).to eq(@collection.description)
141
+ subject.description = "description"
142
+ subject.save
143
+ expect(subject.reload.description).to eq "description"
85
144
  end
86
145
 
87
146
  it "should have the expected display terms" do
88
- expect(@collection.terms_for_display).to include(
89
- :part_of, :contributor, :creator, :title, :description, :publisher,
90
- :date_created, :date_uploaded, :date_modified, :subject, :language, :rights,
91
- :resource_type, :identifier, :based_near, :tag, :related_url
92
- )
147
+ expect(subject.terms_for_display).to eq([:part_of, :contributor, :creator, :title, :description, :publisher, :date_created, :date_uploaded, :date_modified, :subject, :language, :rights, :resource_type, :identifier, :based_near, :tag, :related_url])
93
148
  end
149
+
94
150
  it "should have the expected edit terms" do
95
- expect(@collection.terms_for_editing).to include(
96
- :part_of, :contributor, :creator, :title, :description, :publisher, :date_created,
97
- :subject, :language, :rights, :resource_type, :identifier, :based_near, :tag, :related_url
98
- )
151
+ expect(subject.terms_for_editing).to eq([:part_of, :contributor, :creator, :title, :description, :publisher, :date_created, :subject, :language, :rights, :resource_type, :identifier, :based_near, :tag, :related_url])
99
152
  end
100
- it "should not delete member files when deleted" do
101
- @collection.members = [@gf1, @gf2]
102
- @collection.save
103
- @collection.destroy
104
- expect(GenericFile).to exist(@gf1.id)
105
- expect(GenericFile).to exist(@gf2.id)
153
+
154
+ describe "#destroy" do
155
+ before do
156
+ subject.members = [gf1, gf2]
157
+ subject.save
158
+ subject.destroy
159
+ end
160
+
161
+ it "should not delete member files when deleted" do
162
+ expect(GenericFile.exists?(gf1.id)).to be true
163
+ expect(GenericFile.exists?(gf2.id)).to be true
164
+ end
106
165
  end
107
166
 
108
167
  describe "Collection by another name" do
109
- before (:all) do
168
+ before do
110
169
  class OtherCollection < ActiveFedora::Base
111
170
  include Hydra::Collection
112
171
  end
@@ -115,7 +174,7 @@ describe Collection, :type => :model do
115
174
  include Hydra::Collections::Collectible
116
175
  end
117
176
  end
118
- after(:all) do
177
+ after do
119
178
  Object.send(:remove_const, :OtherCollection)
120
179
  Object.send(:remove_const, :Member)
121
180
  end
@@ -133,5 +192,4 @@ describe Collection, :type => :model do
133
192
  expect(member.collections).to eq [collection]
134
193
  end
135
194
  end
136
-
137
195
  end
data/spec/spec_helper.rb CHANGED
@@ -9,11 +9,10 @@ require 'hydra-collections'
9
9
  FactoryGirl.definition_file_paths = [File.expand_path("../factories", __FILE__)]
10
10
  FactoryGirl.find_definitions
11
11
 
12
+ # require 'http_logger'
12
13
  # HttpLogger.logger = Logger.new(STDOUT)
13
14
  # HttpLogger.ignore = [/localhost:8983\/solr/]
14
15
  # HttpLogger.colorize = false
15
- # # Patch for https://github.com/railsware/http_logger/issues/13
16
- # HttpLogger::HTTP_METHODS_WITH_BODY = Set.new(%w(POST PUT GET PATCH))
17
16
 
18
17
  module EngineRoutes
19
18
  def self.included(base)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hydra-collections
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.beta1
4
+ version: 4.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carolyn Cole
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-04 00:00:00.000000000 Z
11
+ date: 2014-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: blacklight