active-fedora 6.4.2 → 6.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.mailmap +15 -6
  3. data/active-fedora.gemspec +2 -2
  4. data/gemfiles/gemfile.rails4 +1 -1
  5. data/lib/active_fedora.rb +8 -12
  6. data/lib/active_fedora/digital_object.rb +1 -0
  7. data/lib/active_fedora/model.rb +6 -6
  8. data/lib/active_fedora/om_datastream.rb +14 -3
  9. data/lib/active_fedora/querying.rb +6 -5
  10. data/lib/active_fedora/solr_service.rb +15 -10
  11. data/lib/active_fedora/version.rb +1 -1
  12. data/lib/tasks/active_fedora_dev.rake +1 -17
  13. data/spec/config_helper.rb +1 -1
  14. data/spec/{unit → integration}/auditable_spec.rb +5 -7
  15. data/spec/integration/base_spec.rb +2 -1
  16. data/spec/integration/bug_spec.rb +6 -0
  17. data/spec/integration/complex_rdf_datastream_spec.rb +3 -3
  18. data/spec/integration/model_spec.rb +8 -7
  19. data/spec/integration/om_datastream_spec.rb +78 -73
  20. data/spec/integration/rdf_nested_attributes_spec.rb +2 -2
  21. data/spec/integration/solr_instance_loader_spec.rb +9 -4
  22. data/spec/integration/solr_service_spec.rb +2 -8
  23. data/spec/support/mock_fedora.rb +6 -6
  24. data/spec/unit/active_fedora_spec.rb +12 -1
  25. data/spec/unit/base_extra_spec.rb +10 -10
  26. data/spec/unit/base_spec.rb +18 -18
  27. data/spec/unit/content_model_spec.rb +6 -6
  28. data/spec/unit/datastream_spec.rb +1 -1
  29. data/spec/unit/datastreams_spec.rb +19 -19
  30. data/spec/unit/has_and_belongs_to_many_collection_spec.rb +6 -6
  31. data/spec/unit/has_many_collection_spec.rb +3 -3
  32. data/spec/unit/ntriples_datastream_spec.rb +2 -2
  33. data/spec/unit/om_datastream_spec.rb +6 -6
  34. data/spec/unit/query_spec.rb +11 -11
  35. data/spec/unit/rdf_list_spec.rb +2 -2
  36. data/spec/unit/rdfxml_rdf_datastream_spec.rb +2 -2
  37. data/spec/unit/rels_ext_datastream_spec.rb +6 -6
  38. data/spec/unit/semantic_node_spec.rb +5 -5
  39. data/spec/unit/solr_config_options_spec.rb +1 -1
  40. data/spec/unit/solr_service_spec.rb +42 -20
  41. metadata +10 -23
  42. data/spec/fixtures/auditable.foxml.xml +0 -110
  43. data/spec/fixtures/changeme155.xml +0 -255
  44. data/spec/fixtures/test_12.foxml.xml +0 -60
  45. data/spec/fixtures/test_fixture_mods_article1.foxml.xml +0 -234
  46. data/spec/fixtures/test_fixture_mods_article2.foxml.xml +0 -234
  47. data/spec/hydrangea_fixture_mods_article1.foxml.xml +0 -225
  48. data/spec/integration/mods_article_integration_spec.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3121b41531277d5c0351a7e657d063fb628ba733
4
- data.tar.gz: 48e5886abd01bc9afb4329004c8293401a89708d
3
+ metadata.gz: a9395c7f327612946bfc5d90b4f8cdcf93af0a49
4
+ data.tar.gz: 13f08cd89e3b35e3b3b437cc13d5db8df934b022
5
5
  SHA512:
6
- metadata.gz: 3757c8465f920bf90ce99c8319d58137c335929c8d5b115b157491e2f86a5df1a7686675f2e5c516ab434e28e55fa309afd0b0f4db02f58be10baf01684769e7
7
- data.tar.gz: 6e3b6a10c6bc56d075df2779e2cc18b3574dd254e18df6fda760c8478177cf191281e6dad210f74cc4cb52dcc522756da66a43cff215d6d1eb265965bb41c14b
6
+ metadata.gz: 036af5cc43ab70dcca4ca55da21f1961bb6e1047a96f48256019102adac6b43e35dacc6ed5b0776a44ff949c15c4c1144d1c54e6d8979dcbb6b51482cd0b66e7
7
+ data.tar.gz: 025ae1503457b5427a05d9bd408e84594d137fbb94bd2e7b8d98f433f505ee3988ccab442de9a5e67b421c30981a137024e18b3b513d2a30d0da54825b31982d
data/.mailmap CHANGED
@@ -1,9 +1,18 @@
1
- Mark Bussey <mark@curationexperts.com> mark-dce <mark@curationexperts.com>
2
1
  Andrew Myers <andrew_myers@wgbh.org> afred <afredmyers@gmail.com>
3
- Richard Johnson <rick.johnson@nd.edu> rjohns14@github.com <rjohns14@LIB-1224.library.nd.edu>
4
- Richard Johnson <rick.johnson@nd.edu> rjohns14 <rjohns14@LIB-1224.library.nd.edu>
5
- Richard Johnson <rick.johnson@nd.edu> rickjohnson <rick.johnson@nd.edu>
6
- Justin Coyne <justin@curationexperts.com> jcoyne <digger250@gmail.com>
2
+ Chris Beer <chris@cbeer.info> <cabeer@stanford.edu>
3
+ Chris Beer <chris@cbeer.info> <chris@cbeer.info>
4
+ Chris Beer <chris@cbeer.info> <chris_beer@wgbh.org>
7
5
  Chris Colvard <cjcolvar@indiana.edu> cjcolvar <cjcolvar@indiana.edu>
8
6
  David Chandek-Stark <dchandekstark@gmail.com> dchandekstark <dchandekstark@gmail.com>
9
- Matt Zumwalt <matt.zumwalt@yourmediashelf.com> flyingzumwalt <matt.zumwalt@gmail.com>
7
+ Justin Coyne <justin@curationexperts.com> <digger250@gmail.com>
8
+ Justin Coyne <justin@curationexperts.com> <justin.coyne@yourmediashelf.com>
9
+ Justin Coyne <justin@curationexperts.com> jcoyne <digger250@gmail.com>
10
+ Justin Coyne <justin@curationexperts.com> <jcoyne@justincoyne.com>
11
+ Jesse Keck <jessie.keck@gmail.com> <jkeck@stanford.edu>
12
+ Jesse Keck <jessie.keck@gmail.com> <jessie.keck@gmail.com>
13
+ Mark Bussey <mark@curationexperts.com> mark-dce <mark@curationexperts.com>
14
+ Matt Zumwalt <matt.zumwalt@yourmediashelf.com> flyingzumwalt <matt.zumwalt@gmail.com>
15
+ Richard Johnson <rick.johnson@nd.edu> rickjohnson <rick.johnson@nd.edu>
16
+ Richard Johnson <rick.johnson@nd.edu> rjohns14 <rjohns14@LIB-1224.library.nd.edu>
17
+ Richard Johnson <rick.johnson@nd.edu> rjohns14@github.com <rjohns14@LIB-1224.library.nd.edu>
18
+ Michael B. Klein <mbklein@gmail.com>
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.homepage = %q{https://github.com/projecthydra/active_fedora}
12
12
  s.summary = %q{A convenience libary for manipulating documents in the Fedora Repository.}
13
13
  s.description = %q{ActiveFedora provides for creating and managing objects in the Fedora Repository Architecture.}
14
-
14
+ s.license = "APACHE2"
15
15
  s.required_ruby_version = '>= 1.9.3'
16
16
 
17
17
  s.add_dependency('rsolr')
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency("mediashelf-loggable")
22
22
  s.add_dependency("rubydora", '~>1.6', '>= 1.6.5')
23
23
  s.add_dependency("rdf")
24
- s.add_dependency("rdf-rdfxml", '~>1.0.0')
24
+ s.add_dependency("rdf-rdfxml", '1.0.1')
25
25
  s.add_dependency("deprecation")
26
26
  s.add_development_dependency("rdoc")
27
27
  s.add_development_dependency("yard")
@@ -2,7 +2,7 @@ source "http://rubygems.org"
2
2
 
3
3
  gemspec :path=>"../"
4
4
 
5
- gem 'activemodel', '4.0.0.rc2'
5
+ gem 'activemodel', '~> 4.0.0'
6
6
 
7
7
  group :development, :test do
8
8
  gem 'simplecov', :platform => :mri_19
@@ -157,20 +157,16 @@ module ActiveFedora #:nodoc:
157
157
  # @example Search within ActiveFedora::RdfNode for a class called "TermProxy"
158
158
  # ActiveFedora.class_from_string("TermProxy", ActiveFedora::RdfNode)
159
159
  # => ActiveFedora::RdfNode::TermProxy
160
- def self.class_from_string(class_name, container_class=nil)
161
- if class_name.include?("::")
162
- # result = eval(class_name)
163
- class_name.split('::').inject(Object) do |mod, class_name|
160
+ def self.class_from_string(class_name, container_class=Kernel)
161
+ container_class = container_class.name if container_class.is_a? Module
162
+ container_parts = container_class.split('::')
163
+ (container_parts + class_name.split('::')).flatten.inject(Kernel) do |mod, class_name|
164
+ if mod.const_defined? class_name.to_sym
164
165
  mod.const_get(class_name)
166
+ else
167
+ container_parts.pop
168
+ class_from_string(class_name, container_parts.join('::'))
165
169
  end
166
- elsif !container_class.nil?
167
- begin
168
- container_class.const_get(class_name.to_sym)
169
- rescue NameError
170
- Kernel.const_get(class_name)
171
- end
172
- else
173
- Kernel.const_get(class_name)
174
170
  end
175
171
  end
176
172
 
@@ -31,6 +31,7 @@ module ActiveFedora
31
31
  include DatastreamBootstrap
32
32
 
33
33
  def self.find(original_class, pid)
34
+ raise ActiveFedora::ObjectNotFoundError.new("Unable to find #{pid.inspect} in fedora. ") unless pid.present?
34
35
  conn = original_class.connection_for_pid(pid)
35
36
  obj = begin
36
37
  super(pid, conn)
@@ -37,15 +37,15 @@ module ActiveFedora
37
37
  # Returns a suitable uri object for :has_model
38
38
  # Should reverse Model#from_class_uri
39
39
  def to_class_uri(attrs = {})
40
- unless self.respond_to? :pid_suffix
41
- pid_suffix = attrs.has_key?(:pid_suffix) ? attrs[:pid_suffix] : ContentModel::CMODEL_PID_SUFFIX
42
- else
40
+ if self.respond_to? :pid_suffix
43
41
  pid_suffix = self.pid_suffix
44
- end
45
- unless self.respond_to? :pid_namespace
46
- namespace = attrs.has_key?(:namespace) ? attrs[:namespace] : ContentModel::CMODEL_NAMESPACE
47
42
  else
43
+ pid_suffix = attrs.fetch(:pid_suffix, ContentModel::CMODEL_PID_SUFFIX)
44
+ end
45
+ if self.respond_to? :pid_namespace
48
46
  namespace = self.pid_namespace
47
+ else
48
+ namespace = attrs.fetch(:namespace, ContentModel::CMODEL_NAMESPACE)
49
49
  end
50
50
  "info:fedora/#{namespace}:#{ContentModel.sanitized_class_name(self)}#{pid_suffix}"
51
51
  end
@@ -108,9 +108,20 @@ module ActiveFedora
108
108
  end
109
109
 
110
110
  def content=(new_content)
111
- ng_xml_will_change! unless EquivalentXml.equivalent?(datastream_content, new_content)
112
- @ng_xml = Nokogiri::XML::Document.parse(new_content)
113
- super(@ng_xml.to_s)
111
+ if inline?
112
+ # inline datastreams may be transformed by fedora 3, so we test for equivalence instead of equality
113
+ if !EquivalentXml.equivalent?(datastream_content, new_content)
114
+ ng_xml_will_change!
115
+ @ng_xml = Nokogiri::XML::Document.parse(new_content)
116
+ super(@ng_xml.to_s)
117
+ end
118
+ else
119
+ if datastream_content != new_content
120
+ ng_xml_will_change!
121
+ @ng_xml = Nokogiri::XML::Document.parse(new_content)
122
+ super(@ng_xml.to_s)
123
+ end
124
+ end
114
125
  end
115
126
 
116
127
  def content_changed?
@@ -68,13 +68,14 @@ module ActiveFedora
68
68
  end
69
69
 
70
70
 
71
- # Returns true if the pid exists in the repository
72
- # @param[String] pid
73
- # @return[boolean]
71
+ # Returns true if the pid exists in the repository
72
+ # @param[String] pid
73
+ # @return[boolean]
74
74
  def exists?(pid)
75
75
  return false if pid.nil? || pid.empty?
76
- inner = DigitalObject.find_or_initialize(self, pid)
77
- !inner.new?
76
+ !!DigitalObject.find(self, pid)
77
+ rescue ActiveFedora::ObjectNotFoundError
78
+ false
78
79
  end
79
80
 
80
81
  # Returns a solr result matching the supplied conditions
@@ -32,18 +32,23 @@ module ActiveFedora
32
32
  raise SolrNotInitialized unless Thread.current[:solr_service]
33
33
  Thread.current[:solr_service]
34
34
  end
35
-
36
- def self.reify_solr_results(solr_result,opts={})
37
- results = []
38
- solr_result.each do |hit|
39
- classname = class_from_solr_document(hit)
40
- if opts[:load_from_solr]
41
- results << classname.load_instance_from_solr(hit[SOLR_DOCUMENT_ID])
42
- else
43
- results << classname.find(hit[SOLR_DOCUMENT_ID])
35
+
36
+ def self.lazy_reify_solr_results(solr_results, opts = {})
37
+ Enumerator.new do |yielder|
38
+ solr_results.each do |hit|
39
+ yielder.yield(reify_solr_result(hit, opts))
44
40
  end
45
41
  end
46
- return results
42
+ end
43
+
44
+ def self.reify_solr_results(solr_results, opts = {})
45
+ solr_results.collect {|hit| reify_solr_result(hit, opts)}
46
+ end
47
+
48
+ def self.reify_solr_result(hit, opts = {})
49
+ classname = class_from_solr_document(hit)
50
+ method = opts[:load_from_solr] ? :load_instance_from_solr : :find
51
+ classname.send(method, hit[SOLR_DOCUMENT_ID])
47
52
  end
48
53
 
49
54
  def self.class_from_solr_document(hit)
@@ -1,3 +1,3 @@
1
1
  module ActiveFedora
2
- VERSION = "6.4.2"
2
+ VERSION = "6.4.3"
3
3
  end
@@ -36,21 +36,6 @@ require 'rspec/core/rake_task'
36
36
  spec.rcov = true
37
37
  end
38
38
 
39
- desc "Loads or refreshes the fixtures needed to run the tests"
40
- task :fixtures => :environment do
41
- ENV["pid"] = "test:fixture_mods_article1"
42
- Rake::Task["repo:refresh"].invoke
43
- ENV["pid"] = nil
44
-
45
- Rake::Task["repo:delete"].reenable
46
- Rake::Task["repo:load"].reenable
47
- Rake::Task["repo:refresh"].reenable
48
-
49
- ENV["pid"] = "test:fixture_mods_article2"
50
- Rake::Task["repo:refresh"].invoke
51
- ENV["pid"] = nil
52
- end
53
-
54
39
  desc "Copies the default SOLR config for the bundled Testing Server"
55
40
  task :configure_jetty do
56
41
  FileList['lib/generators/active_fedora/config/solr/templates/solr_conf/conf/*'].each do |f|
@@ -79,9 +64,8 @@ task :coverage do
79
64
  ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
80
65
  ENV['COVERAGE'] = 'true' unless ruby_engine == 'jruby'
81
66
 
82
- Rake::Task["active_fedora:fixtures"].invoke
67
+ # Rake::Task["active_fedora:fixtures"].invoke
83
68
  Rake::Task["active_fedora:rspec"].invoke
84
69
  end
85
70
 
86
71
  end
87
-
@@ -1,5 +1,5 @@
1
1
  def mock_yaml(hash, path)
2
- mock_file = mock(path.split("/")[-1])
2
+ mock_file = double(path.split("/")[-1])
3
3
  File.stub(:exist?).with(path).and_return(true)
4
4
  File.stub(:open).with(path).and_return(mock_file)
5
5
  YAMLAdaptor.stub(:load).and_return(hash)
@@ -6,25 +6,23 @@ describe ActiveFedora::Auditable do
6
6
  class AuditableModel < ActiveFedora::Base
7
7
  include ActiveFedora::Auditable
8
8
  end
9
- path = File.join(File.dirname(__FILE__), '..', 'fixtures', 'auditable.foxml.xml')
10
- pid = ActiveFedora::FixtureLoader.import_to_fedora(path)
11
- ActiveFedora::FixtureLoader.index(pid)
12
- @test_object = AuditableModel.find(pid)
9
+ @test_object = AuditableModel.create
10
+ @test_object.reload
13
11
  end
14
12
  after(:all) do
15
13
  @test_object.delete
16
14
  end
17
15
  it "should have the correct number of audit records" do
18
- @test_object.audit_trail.records.length.should == 3
16
+ @test_object.audit_trail.records.length.should == 1
19
17
  end
20
18
  it "should return all the data from each audit record" do
21
- record = @test_object.audit_trail.records.first
19
+ record = @test_object.audit_trail.records.last
22
20
  record.id.should == "AUDREC1"
23
21
  record.process_type.should == "Fedora API-M"
24
22
  record.action.should == "addDatastream"
25
23
  record.component_id.should == "RELS-EXT"
26
24
  record.responsibility.should == "fedoraAdmin"
27
- record.date.should == "2013-02-25T16:43:06.219Z"
25
+ record.date.should == @test_object.modified_date
28
26
  record.justification.should == ""
29
27
  end
30
28
 
@@ -415,7 +415,8 @@ describe ActiveFedora::Base do
415
415
 
416
416
  describe "#exists?" do
417
417
  it "should return true for objects that exist" do
418
- ActiveFedora::Base.exists?('test:fixture_mods_article1').should be_true
418
+ @obj = ActiveFedora::Base.create
419
+ ActiveFedora::Base.exists?(@obj.pid).should be_true
419
420
  end
420
421
  it "should return false for objects that don't exist" do
421
422
  ActiveFedora::Base.exists?('test:missing_object').should be_false
@@ -20,6 +20,12 @@ describe 'bugs' do
20
20
  Object.send(:remove_const, :FooHistory)
21
21
  end
22
22
 
23
+ it 'should raise ActiveFedora::ObjectNotFoundError when find("")' do
24
+ expect {
25
+ FooHistory.find('')
26
+ }.to raise_error(ActiveFedora::ObjectNotFoundError)
27
+ end
28
+
23
29
  it "should not clobber everything when setting a value" do
24
30
  @test_object.someData.fubar=['initial']
25
31
  @test_object.save!
@@ -23,7 +23,7 @@ describe "Nested Rdf Objects" do
23
23
  end
24
24
 
25
25
  let (:ds) do
26
- mock_obj = stub(:mock_obj, :pid=>'test:124', :new? => true)
26
+ mock_obj = double(:mock_obj, :pid=>'test:124', :new? => true)
27
27
  ds = SpecDatastream.new(mock_obj)
28
28
  end
29
29
 
@@ -140,7 +140,7 @@ END
140
140
  end
141
141
 
142
142
  let (:ds) do
143
- mock_obj = stub(:mock_obj, :pid=>'test:124', :new? => true)
143
+ mock_obj = double(:mock_obj, :pid=>'test:124', :new? => true)
144
144
  ds = SpecDatastream.new(mock_obj)
145
145
  end
146
146
 
@@ -209,7 +209,7 @@ END
209
209
  end
210
210
 
211
211
  let (:ds) do
212
- mock_obj = stub(:mock_obj, :pid=>'test:124', :new? => true)
212
+ mock_obj = double(:mock_obj, :pid=>'test:124', :new? => true)
213
213
  ds = SpecDatastream.new(mock_obj)
214
214
  end
215
215
 
@@ -10,6 +10,7 @@ describe ActiveFedora::Model do
10
10
  def self.pid_namespace
11
11
  "foo"
12
12
  end
13
+ has_metadata :name => "properties", :type => ActiveFedora::SimpleDatastream, :autocreate => true
13
14
  end
14
15
  class Basic < Base
15
16
  end
@@ -38,28 +39,28 @@ describe ActiveFedora::Model do
38
39
  end
39
40
  end
40
41
  describe "#find with a valid pid with cast" do
41
- subject { ActiveFedora::Base.find('test:fixture_mods_article1', :cast=>true) }
42
- it { should be_instance_of ModsArticle}
42
+ subject { ActiveFedora::Base.find(@test_instance.pid, :cast=>true) }
43
+ it { should be_instance_of ModelIntegrationSpec::Basic}
43
44
  end
44
45
  describe "#find with a valid pid without cast" do
45
- subject { ActiveFedora::Base.find('test:fixture_mods_article1') }
46
+ subject { ActiveFedora::Base.find(@test_instance.pid) }
46
47
  it { should be_instance_of ActiveFedora::Base}
47
48
  end
48
49
  end
49
50
 
50
51
  describe "#load_instance_from_solr" do
51
52
  describe "with a valid pid" do
52
- subject { ActiveFedora::Base.load_instance_from_solr('test:fixture_mods_article1') }
53
- it { should be_instance_of ModsArticle}
53
+ subject { ActiveFedora::Base.load_instance_from_solr(@test_instance.pid) }
54
+ it { should be_instance_of ModelIntegrationSpec::Basic}
54
55
  end
55
56
  describe "with metadata datastream spec" do
56
- subject { ActiveFedora::Base.load_instance_from_solr('test:fixture_mods_article1') }
57
+ subject { ActiveFedora::Base.load_instance_from_solr(@test_instance.pid) }
57
58
  it "should create an xml datastream" do
58
59
  subject.datastreams['properties'].should be_kind_of ActiveFedora::SimpleDatastream
59
60
  end
60
61
 
61
62
  it "should know the datastreams properties" do
62
- subject.properties.dsSize.should == 19
63
+ subject.properties.dsSize.should == 9
63
64
  end
64
65
  end
65
66
  end
@@ -3,22 +3,32 @@ require "solrizer"
3
3
 
4
4
  describe ActiveFedora::OmDatastream do
5
5
 
6
- describe "an new instance with a inline datastream" do
7
- before do
6
+ describe "a new instance with an inline datastream" do
7
+ before(:all) do
8
8
  class ModsArticle3 < ActiveFedora::Base
9
9
  # Uses the Hydra MODS Article profile for tracking most of the descriptive metadata
10
- has_metadata :name => "descMetadata", :type => Hydra::ModsArticleDatastream, :control_group => 'X'
11
-
10
+ has_metadata :name => "descMetadata", :type => Hydra::ModsArticleDatastream, :control_group => 'X', :autocreate => true
12
11
  end
12
+ end
13
13
 
14
+ after(:all) do
15
+ Object.send(:remove_const, :ModsArticle3)
16
+ end
17
+
18
+ before(:each) do
14
19
  @obj = ModsArticle3.new
15
20
  @obj.save
16
- @obj.descMetadata.should be_inline
21
+ @obj.reload
17
22
  end
18
- after do
23
+
24
+ after(:each) do
19
25
  @obj.destroy
20
- Object.send(:remove_const, :ModsArticle3)
21
26
  end
27
+
28
+ it "should report being inline" do
29
+ @obj.descMetadata.should be_inline
30
+ end
31
+
22
32
  it "should not be changed when no fields have been set" do
23
33
  @obj.descMetadata.should_not be_content_changed
24
34
  end
@@ -28,30 +38,25 @@ describe ActiveFedora::OmDatastream do
28
38
  end
29
39
  describe "#changed?" do
30
40
  it "should not be changed if the new xml matches the old xml" do
31
- @pid = "test:fixture_mods_article2"
32
- @test_object = ModsArticle3.find(@pid)
33
-
34
- @test_object.descMetadata.ng_xml = @test_object.descMetadata.ng_xml
35
- @test_object.descMetadata.should_not be_changed
41
+ @obj.descMetadata.content = @obj.descMetadata.content
42
+ @obj.descMetadata.should_not be_changed
36
43
  end
37
44
 
38
45
  it "should not be changed if there are minor differences in whitespace" do
39
- obj = ModsArticle3.new
40
- obj.descMetadata.content = "<a>1</a>"
41
- obj.save
42
- obj.descMetadata.should_not be_changed
43
- obj.descMetadata.content = "<a>1</a>\n"
44
- obj.descMetadata.should_not be_changed
46
+ @obj.descMetadata.content = "<a><b>1</b></a>"
47
+ @obj.save
48
+ @obj.descMetadata.should_not be_changed
49
+ @obj.descMetadata.content = "<a>\n<b>1</b>\n</a>"
50
+ @obj.descMetadata.should_not be_changed
45
51
  end
46
52
  end
47
53
  end
48
54
 
49
-
50
55
  describe "an instance that is a managed datastream" do
51
56
  before(:all) do
52
57
  class ModsArticle2 < ActiveFedora::Base
53
58
  # Uses the Hydra MODS Article profile for tracking most of the descriptive metadata
54
- has_metadata :name => "descMetadata", :type => Hydra::ModsArticleDatastream
59
+ has_metadata :name => "descMetadata", :type => Hydra::ModsArticleDatastream, :autocreate => true
55
60
  end
56
61
  end
57
62
 
@@ -59,67 +64,71 @@ describe ActiveFedora::OmDatastream do
59
64
  Object.send(:remove_const, :ModsArticle2)
60
65
  end
61
66
 
67
+ before(:each) do
68
+ @obj = ModsArticle2.new
69
+ @obj.save
70
+ @obj.reload
71
+ end
72
+
73
+ after(:each) do
74
+ @obj.destroy
75
+ end
76
+
77
+ it "should not report being inline" do
78
+ @obj.descMetadata.should be_managed
79
+ end
80
+
62
81
  describe "#changed?" do
63
82
  it "should not be changed if the new xml matches the old xml" do
64
- @pid = "test:fixture_mods_article2"
65
- @test_object = ModsArticle2.find(@pid)
66
-
67
- @test_object.descMetadata.ng_xml = @test_object.descMetadata.ng_xml
68
- @test_object.descMetadata.should_not be_changed
83
+ @obj.descMetadata.content = @obj.descMetadata.content
84
+ @obj.descMetadata.should_not be_changed
69
85
  end
70
86
 
71
87
  it "should be changed if there are minor differences in whitespace" do
72
- obj = ModsArticle2.new
73
- obj.descMetadata.content = "<a>1</a>"
74
- obj.save
75
- obj.descMetadata.should_not be_changed
76
- obj.descMetadata.content = "<a>1</a>\n"
77
- obj.descMetadata.should be_changed
88
+ @obj.descMetadata.content = "<a><b>1</b></a>"
89
+ @obj.save
90
+ @obj.descMetadata.should_not be_changed
91
+ @obj.descMetadata.content = "<a>\n<b>1</b>\n</a>"
92
+ @obj.descMetadata.should be_changed
78
93
  end
79
94
  end
80
95
 
81
-
82
-
83
96
  describe "empty datastream content" do
84
97
  it "should not break when there is empty datastream content" do
85
- obj = ModsArticle2.new
86
- obj.descMetadata.content = ""
87
- obj.save
88
-
98
+ @obj.descMetadata.content = ""
99
+ @obj.save
89
100
  end
90
101
  end
91
102
 
92
103
  describe '.term_values' do
93
104
  before do
94
- @pid = "test:fixture_mods_article2"
95
- @test_object = ModsArticle2.find(@pid)
96
- @test_object.descMetadata.content = File.read(fixture('mods_articles/mods_article1.xml'))
97
- @test_object.save
98
- @test_object = ModsArticle2.find(@pid)
99
- @test_solr_object = ActiveFedora::Base.load_instance_from_solr(@pid)
105
+ @obj.descMetadata.content = File.read(fixture('mods_articles/mods_article1.xml'))
106
+ @obj.save
107
+ @obj.reload
108
+ @solr_obj = ActiveFedora::Base.load_instance_from_solr(@obj.pid)
100
109
  end
101
110
 
102
111
  it "should return the same values whether getting from solr or Fedora" do
103
- @test_solr_object.datastreams["descMetadata"].term_values(:name,:role,:text).should == ["Creator","Contributor","Funder","Host"]
104
- @test_solr_object.datastreams["descMetadata"].term_values({:name=>0},:role,:text).should == ["Creator"]
105
- @test_solr_object.datastreams["descMetadata"].term_values({:name=>1},:role,:text).should == ["Contributor"]
106
- @test_solr_object.datastreams["descMetadata"].term_values({:name=>0},{:role=>0},:text).should == ["Creator"]
107
- @test_solr_object.datastreams["descMetadata"].term_values({:name=>1},{:role=>0},:text).should == ["Contributor"]
108
- @test_solr_object.datastreams["descMetadata"].term_values({:name=>1},{:role=>1},:text).should == []
109
- ar = @test_solr_object.datastreams["descMetadata"].term_values(:name,{:role=>0},:text)
112
+ @solr_obj.datastreams["descMetadata"].term_values(:name,:role,:text).should == ["Creator","Contributor","Funder","Host"]
113
+ @solr_obj.datastreams["descMetadata"].term_values({:name=>0},:role,:text).should == ["Creator"]
114
+ @solr_obj.datastreams["descMetadata"].term_values({:name=>1},:role,:text).should == ["Contributor"]
115
+ @solr_obj.datastreams["descMetadata"].term_values({:name=>0},{:role=>0},:text).should == ["Creator"]
116
+ @solr_obj.datastreams["descMetadata"].term_values({:name=>1},{:role=>0},:text).should == ["Contributor"]
117
+ @solr_obj.datastreams["descMetadata"].term_values({:name=>1},{:role=>1},:text).should == []
118
+ ar = @solr_obj.datastreams["descMetadata"].term_values(:name,{:role=>0},:text)
110
119
  ar.length.should == 4
111
120
  ar.include?("Creator").should == true
112
121
  ar.include?("Contributor").should == true
113
122
  ar.include?("Funder").should == true
114
123
  ar.include?("Host").should == true
115
124
 
116
- @test_object.datastreams["descMetadata"].term_values(:name,:role,:text).should == ["Creator","Contributor","Funder","Host"]
117
- @test_object.datastreams["descMetadata"].term_values({:name=>0},:role,:text).should == ["Creator"]
118
- @test_object.datastreams["descMetadata"].term_values({:name=>1},:role,:text).should == ["Contributor"]
119
- @test_object.datastreams["descMetadata"].term_values({:name=>0},{:role=>0},:text).should == ["Creator"]
120
- @test_object.datastreams["descMetadata"].term_values({:name=>1},{:role=>0},:text).should == ["Contributor"]
121
- @test_object.datastreams["descMetadata"].term_values({:name=>1},{:role=>1},:text).should == []
122
- ar = @test_object.datastreams["descMetadata"].term_values(:name,{:role=>0},:text)
125
+ @obj.datastreams["descMetadata"].term_values(:name,:role,:text).should == ["Creator","Contributor","Funder","Host"]
126
+ @obj.datastreams["descMetadata"].term_values({:name=>0},:role,:text).should == ["Creator"]
127
+ @obj.datastreams["descMetadata"].term_values({:name=>1},:role,:text).should == ["Contributor"]
128
+ @obj.datastreams["descMetadata"].term_values({:name=>0},{:role=>0},:text).should == ["Creator"]
129
+ @obj.datastreams["descMetadata"].term_values({:name=>1},{:role=>0},:text).should == ["Contributor"]
130
+ @obj.datastreams["descMetadata"].term_values({:name=>1},{:role=>1},:text).should == []
131
+ ar = @obj.datastreams["descMetadata"].term_values(:name,{:role=>0},:text)
123
132
  ar.length.should == 4
124
133
  ar.include?("Creator").should == true
125
134
  ar.include?("Contributor").should == true
@@ -130,33 +139,29 @@ describe ActiveFedora::OmDatastream do
130
139
 
131
140
  describe '.update_values' do
132
141
  before do
133
- @pid = "test:fixture_mods_article2"
134
- @test_object = ModsArticle2.find(@pid)
135
- @test_object.descMetadata.content = File.read(fixture('mods_articles/mods_article1.xml'))
136
- @test_object.save
137
- @test_object = ModsArticle2.find(@pid)
142
+ @obj.descMetadata.content = File.read(fixture('mods_articles/mods_article1.xml'))
143
+ @obj.save
144
+ @obj.reload
138
145
  end
139
146
 
140
147
  it "should not be dirty after .update_values is saved" do
141
- @test_object.datastreams["descMetadata"].update_values([{:name=>0},{:role=>0},:text] =>"Funder")
142
- @test_object.datastreams["descMetadata"].should be_changed
143
- @test_object.save
144
- @test_object.datastreams["descMetadata"].should_not be_changed
145
- @test_object.datastreams["descMetadata"].term_values({:name=>0},{:role=>0},:text).should == ["Funder"]
148
+ @obj.datastreams["descMetadata"].update_values([{:name=>0},{:role=>0},:text] =>"Funder")
149
+ @obj.datastreams["descMetadata"].should be_changed
150
+ @obj.save
151
+ @obj.datastreams["descMetadata"].should_not be_changed
152
+ @obj.datastreams["descMetadata"].term_values({:name=>0},{:role=>0},:text).should == ["Funder"]
146
153
  end
147
154
  end
148
155
 
149
156
 
150
157
  describe ".to_solr" do
151
158
  before do
152
- object = ModsArticle2.new
153
- object.descMetadata.journal.issue.publication_date = Date.parse('2012-11-02')
154
- object.save!
155
- @test_object = ModsArticle2.find(object.pid)
156
-
159
+ @obj.descMetadata.journal.issue.publication_date = Date.parse('2012-11-02')
160
+ @obj.save!
161
+ @obj.reload
157
162
  end
158
163
  it "should solrize terms with :type=>'date' to *_dt solr terms" do
159
- @test_object.to_solr[ActiveFedora::SolrService.solr_name('mods_journal_issue_publication_date', type: :date)].should == ['2012-11-02T00:00:00Z']
164
+ @obj.to_solr[ActiveFedora::SolrService.solr_name('mods_journal_issue_publication_date', type: :date)].should == ['2012-11-02T00:00:00Z']
160
165
  end
161
166
  end
162
167
  end