active-fedora 6.4.2 → 6.4.3

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 (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