active-fedora 2.3.8 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.rvmrc +1 -1
  2. data/Gemfile.lock +16 -10
  3. data/History.txt +4 -5
  4. data/README.textile +1 -1
  5. data/active-fedora.gemspec +2 -2
  6. data/lib/active_fedora.rb +36 -19
  7. data/lib/active_fedora/associations.rb +157 -0
  8. data/lib/active_fedora/associations/association_collection.rb +180 -0
  9. data/lib/active_fedora/associations/association_proxy.rb +177 -0
  10. data/lib/active_fedora/associations/belongs_to_association.rb +36 -0
  11. data/lib/active_fedora/associations/has_many_association.rb +52 -0
  12. data/lib/active_fedora/attribute_methods.rb +8 -0
  13. data/lib/active_fedora/base.rb +76 -80
  14. data/lib/active_fedora/datastream.rb +0 -1
  15. data/lib/active_fedora/delegating.rb +53 -0
  16. data/lib/active_fedora/model.rb +4 -2
  17. data/lib/active_fedora/nested_attributes.rb +153 -0
  18. data/lib/active_fedora/nokogiri_datastream.rb +17 -18
  19. data/lib/active_fedora/reflection.rb +140 -0
  20. data/lib/active_fedora/relationships_helper.rb +10 -5
  21. data/lib/active_fedora/semantic_node.rb +146 -57
  22. data/lib/active_fedora/solr_service.rb +0 -7
  23. data/lib/active_fedora/version.rb +1 -1
  24. data/lib/fedora/connection.rb +75 -111
  25. data/lib/fedora/repository.rb +14 -28
  26. data/lib/ruby-fedora.rb +1 -1
  27. data/spec/integration/associations_spec.rb +139 -0
  28. data/spec/integration/nested_attribute_spec.rb +40 -0
  29. data/spec/integration/repository_spec.rb +9 -14
  30. data/spec/integration/semantic_node_spec.rb +2 -0
  31. data/spec/spec_helper.rb +1 -3
  32. data/spec/unit/active_fedora_spec.rb +2 -1
  33. data/spec/unit/association_proxy_spec.rb +13 -0
  34. data/spec/unit/base_active_model_spec.rb +61 -0
  35. data/spec/unit/base_delegate_spec.rb +59 -0
  36. data/spec/unit/base_spec.rb +45 -58
  37. data/spec/unit/connection_spec.rb +21 -21
  38. data/spec/unit/datastream_spec.rb +0 -11
  39. data/spec/unit/has_many_collection_spec.rb +27 -0
  40. data/spec/unit/model_spec.rb +1 -1
  41. data/spec/unit/nokogiri_datastream_spec.rb +3 -29
  42. data/spec/unit/repository_spec.rb +2 -2
  43. data/spec/unit/semantic_node_spec.rb +2 -0
  44. data/spec/unit/solr_service_spec.rb +0 -7
  45. metadata +36 -15
  46. data/lib/active_fedora/active_fedora_configuration_exception.rb +0 -2
  47. data/lib/util/class_level_inheritable_attributes.rb +0 -23
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ describe "NestedAttribute behavior" do
4
+ before do
5
+ class Bar < ActiveFedora::Base
6
+ belongs_to :car, :property=>:has_member
7
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"someData" do |m|
8
+ m.field "uno", :string
9
+ m.field "dos", :string
10
+ end
11
+ delegate :uno, :to=>'someData', :unique=>true
12
+ delegate :dos, :to=>'someData', :unique=>true
13
+ end
14
+ class Car < ActiveFedora::Base
15
+ has_many :bars, :property=>:has_member
16
+ accepts_nested_attributes_for :bars#, :allow_destroy=>true
17
+ end
18
+
19
+ @car = Car.new
20
+ @car.save
21
+ @bar1 = Bar.new(:car=>@car)
22
+ @bar1.save
23
+
24
+ @bar2 = Bar.new(:car=>@car)
25
+ @bar2.save
26
+
27
+ end
28
+
29
+ it "should update the child objects" do
30
+ @car.attributes = {:bars_attributes=>[{:id=>@bar1.pid, :uno=>"bar1 uno"}, {:uno=>"newbar uno"}, {:id=>@bar2.pid, :_destroy=>'1', :uno=>'bar2 uno'}]}
31
+ Bar.find(@bar1.pid).uno.should == 'bar1 uno'
32
+ # pending the fix of nested_attributes_options
33
+ #Bar.find(@bar2.pid).should be_nil
34
+
35
+ end
36
+
37
+
38
+
39
+
40
+ end
@@ -140,8 +140,6 @@ end
140
140
  describe Fedora::Repository, "find_objects" do
141
141
  before(:all) do
142
142
  Fedora::Repository.register(ActiveFedora.fedora_config[:url])
143
- @mock_response = mock("Response")
144
- @mock_response.stubs(:body).returns(sample_response_xml)
145
143
  end
146
144
 
147
145
  def fields_to_s(fields)
@@ -158,33 +156,31 @@ describe Fedora::Repository, "find_objects" do
158
156
 
159
157
  it "should include all fields by default" do
160
158
  when_find_objects('label~Image*') { |conn|
161
- conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS)).returns(@mock_response)
159
+ conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS))
162
160
  }
163
161
  end
164
162
 
165
163
  it "should include all fields when :include => :all " do
166
164
  when_find_objects('label~Image*', :include => :all) { |conn|
167
- conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS)).returns(@mock_response)
165
+ conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS))
168
166
  }
169
167
  end
170
168
 
171
169
  it "should fetch results with limit" do
172
170
  when_find_objects('label~Image*', :limit => 10) { |conn|
173
- conn.expects(:get).with('/fedora/objects?maxResults=10&query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS)).returns(@mock_response)
171
+ conn.expects(:get).with('/fedora/objects?maxResults=10&query=label%7EImage%2A&resultFormat=xml' + fields_to_s(Fedora::ALL_FIELDS))
174
172
  }
175
173
  end
176
174
 
177
175
  it "should fetch results with some fields but not :pid" do
178
176
  when_find_objects('label~Image*', :select => [:label, :mDate]) { |conn|
179
- conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).returns(@mock_response)
180
-
177
+ conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate]))
181
178
  }
182
179
  end
183
180
 
184
181
  it "should fetch results with some fields with :pid" do
185
182
  when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
186
- conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).returns(@mock_response)
187
-
183
+ conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate]))
188
184
  }
189
185
  end
190
186
 
@@ -207,7 +203,7 @@ describe Fedora::Repository, "find_objects" do
207
203
  it "should convert xml response with 0 objectFields into array of FedoraObject" do
208
204
  objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
209
205
  conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
210
- returns(@mock_response)
206
+ returns(Fedora::XmlFormat.decode(sample_response_xml))
211
207
  }
212
208
 
213
209
  objects.session_token.should == 'aToken'
@@ -217,7 +213,7 @@ describe Fedora::Repository, "find_objects" do
217
213
  it "should return FedoraObjects with new_object set to false" do
218
214
  objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
219
215
  conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
220
- returns(@mock_response)
216
+ returns(Fedora::XmlFormat.decode(sample_response_xml))
221
217
  }
222
218
  objects.each do |obj|
223
219
  obj.should_not be_new_object
@@ -228,7 +224,7 @@ describe Fedora::Repository, "find_objects" do
228
224
  it "should convert xml response with single objectFields into array of FedoraObject" do
229
225
  objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
230
226
  conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
231
- returns(@mock_response)
227
+ returns(Fedora::XmlFormat.decode(sample_response_xml(1)))
232
228
  }
233
229
 
234
230
  objects.session_token.should == 'aToken'
@@ -238,10 +234,9 @@ describe Fedora::Repository, "find_objects" do
238
234
  end
239
235
 
240
236
  it "should convert xml response 2 objectFields into array of FedoraObject" do
241
- @mock_response.stubs(:body).returns(sample_response_xml(2))
242
237
  objects = when_find_objects('label~Image*', :select => [:pid, :label, :mDate]) { |conn|
243
238
  conn.expects(:get).with('/fedora/objects?query=label%7EImage%2A&resultFormat=xml' + fields_to_s([:pid, :label, :mDate])).
244
- returns(@mock_response)
239
+ returns(Fedora::XmlFormat.decode(sample_response_xml(2)))
245
240
  }
246
241
 
247
242
  objects.session_token.should == 'aToken'
@@ -6,6 +6,7 @@ describe ActiveFedora::SemanticNode do
6
6
 
7
7
  before(:all) do
8
8
  class SpecNode
9
+ include ActiveFedora::RelationshipsHelper
9
10
  include ActiveFedora::SemanticNode
10
11
  has_relationship "collection_members", :has_collection_member
11
12
  end
@@ -430,6 +431,7 @@ describe ActiveFedora::SemanticNode do
430
431
  #putting this test here instead of relationships_helper because testing that relationships_by_name hash gets refreshed if the relationships hash is changed
431
432
  describe "relationships_by_name" do
432
433
  class MockSemNamedRelationships
434
+ include ActiveFedora::RelationshipsHelper
433
435
  include ActiveFedora::SemanticNode
434
436
  has_relationship "testing", :has_part
435
437
  has_relationship "testing2", :has_member
@@ -14,10 +14,8 @@ end
14
14
  ENV["RAILS_ENV"] ||= 'test'
15
15
  RAILS_ENV = ENV["RAILS_ENV"]
16
16
 
17
- logger.level = Logger::WARN if logger.respond_to? :level ###MediaShelf StubLogger doesn't have a level= method
18
-
19
17
  $:.unshift(File.dirname(__FILE__) + '/../lib')
20
- Dir[File.join(File.dirname(__FILE__)+'/../lib/')+'**/*.rb'].each{|x| require x unless x.match(/railtie.rb$/)}
18
+ #Dir[File.join(File.dirname(__FILE__)+'/../lib/')+'**/*.rb'].each{|x| require x unless x.match(/railtie.rb$/)}
21
19
  $VERBOSE=nil
22
20
 
23
21
  # This loads the Fedora and Solr config info from /config/fedora.yml
@@ -26,6 +26,7 @@ describe ActiveFedora do
26
26
  it "should use config_options[:environment] if set" do
27
27
  ActiveFedora.expects(:config_options).at_least_once.returns(:environment=>"ballyhoo")
28
28
  ActiveFedora.environment.should eql("ballyhoo")
29
+ ENV['environment']='test'
29
30
  end
30
31
 
31
32
  it "should use Rails.env if no config_options and Rails.env is set" do
@@ -243,7 +244,7 @@ describe ActiveFedora do
243
244
  #ActiveFedora.config_path.should eql("#{@fake_rails_root}/config/fake_fedora.yml")
244
245
  end
245
246
  it "raises an error if you pass in a non-existant config file" do
246
- lambda{ ActiveFedora.init("really_fake_fedora.yml") }.should raise_exception(ActiveFedoraConfigurationException)
247
+ lambda{ ActiveFedora.init("really_fake_fedora.yml") }.should raise_exception(ActiveFedora::ActiveFedoraConfigurationException)
247
248
  end
248
249
 
249
250
  describe "within Rails" do
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe ActiveFedora::Associations::AssociationProxy do
4
+ it "should delegate to_param" do
5
+ @owner = stub(:new_record? => false)
6
+ @assoc = ActiveFedora::Associations::AssociationProxy.new(@owner, @reflection)
7
+ @assoc.expects(:find_target).returns(stub(:to_param => '1234'))
8
+ @assoc.send(:load_target)
9
+ @assoc.to_param.should == '1234'
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,61 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ describe ActiveFedora::Base do
4
+
5
+ describe "active model methods" do
6
+ class BarStream < ActiveFedora::NokogiriDatastream
7
+ set_terminology do |t|
8
+ t.root(:path=>"first", :xmlns=>"urn:foobar")
9
+ t.duck()
10
+ end
11
+
12
+ def self.xml_template
13
+ Nokogiri::XML::Document.parse '<first xmlns="urn:foobar">
14
+ <duck></duck>
15
+ </first>'
16
+ end
17
+ end
18
+
19
+ class BarHistory < ActiveFedora::Base
20
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"someData" do |m|
21
+ m.field "fubar", :string
22
+ m.field "swank", :text
23
+ end
24
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText" do |m|
25
+ m.field "fubar", :text
26
+ end
27
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText2", :label=>"withLabel" do |m|
28
+ m.field "fubar", :text
29
+ end
30
+
31
+ has_metadata :type=>BarStream, :name=>"xmlish"
32
+ delegate :fubar, :to=>'withText', :unique=>true
33
+ delegate :duck, :to=>'xmlish', :unique=>true
34
+ end
35
+ before :each do
36
+ @n = BarHistory.new(:pid=>"monkey:99")
37
+ end
38
+ describe "attributes=" do
39
+ it "should set attributes" do
40
+ @n.attributes = {:fubar=>"baz", :duck=>"Quack"}
41
+ @n.fubar.should == "baz"
42
+ @n.withText.get_values(:fubar).first.should == 'baz'
43
+ @n.duck.should == "Quack"
44
+ @n.xmlish.term_values(:duck).first.should == 'Quack'
45
+ end
46
+ end
47
+ describe "update_attributes" do
48
+ it "should set attributes and save " do
49
+ @n.update_attributes(:fubar=>"baz", :duck=>"Quack")
50
+ @q = BarHistory.find('monkey:99')
51
+ @q.fubar.should == "baz"
52
+ @q.duck.should == "Quack"
53
+ end
54
+ after do
55
+ @n.delete
56
+ end
57
+ end
58
+
59
+ end
60
+ end
61
+
@@ -0,0 +1,59 @@
1
+ require File.join( File.dirname(__FILE__), "../spec_helper" )
2
+
3
+ describe ActiveFedora::Base do
4
+
5
+ describe "first level delegation" do
6
+ class BarStream2 < ActiveFedora::NokogiriDatastream
7
+ set_terminology do |t|
8
+ t.root(:path=>"first", :xmlns=>"urn:foobar")
9
+ t.duck()
10
+ t.cow()
11
+ end
12
+
13
+ def self.xml_template
14
+ Nokogiri::XML::Document.parse '<first xmlns="urn:foobar">
15
+ <duck></duck>
16
+ <cow></cow>
17
+ </first>'
18
+ end
19
+ end
20
+
21
+ class BarHistory2 < ActiveFedora::Base
22
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"someData" do |m|
23
+ m.field "fubar", :string
24
+ m.field "bandana", :string
25
+ m.field "swank", :text
26
+ end
27
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText" do |m|
28
+ m.field "fubar", :text
29
+ end
30
+ has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"withText2", :label=>"withLabel" do |m|
31
+ m.field "fubar", :text
32
+ end
33
+
34
+ has_metadata :type=>BarStream2, :name=>"xmlish"
35
+ delegate :fubar, :to=>'withText', :unique=>true
36
+ delegate :duck, :to=>'xmlish', :unique=>true
37
+ delegate :cow, :to=>'xmlish'
38
+ end
39
+ before :each do
40
+ @n = BarHistory2.new(:pid=>"monkey:99")
41
+ end
42
+ it "should save a delegated property uniquely" do
43
+ @n.fubar="Quack"
44
+ @n.fubar.should == "Quack"
45
+ @n.withText.get_values(:fubar).first.should == 'Quack'
46
+ @n.duck="Quack"
47
+ @n.duck.should == "Quack"
48
+ @n.xmlish.term_values(:duck).first.should == 'Quack'
49
+ end
50
+ it "should return an array if not marked as unique" do
51
+ ### Metadata datastream does not appear to support multiple value setting
52
+ @n.cow=["one", "two"]
53
+ @n.cow.should == ["one", "two"]
54
+ end
55
+
56
+ end
57
+ end
58
+
59
+
@@ -5,7 +5,6 @@ require 'active_fedora/base'
5
5
  require 'active_fedora/metadata_datastream'
6
6
  require 'time'
7
7
  require 'date'
8
-
9
8
  class FooHistory < ActiveFedora::Base
10
9
  has_metadata :type=>ActiveFedora::MetadataDatastream, :name=>"someData" do |m|
11
10
  m.field "fubar", :string
@@ -49,6 +48,13 @@ describe ActiveFedora::Base do
49
48
  result.inner_object.should be_kind_of(Fedora::FedoraObject)
50
49
  end
51
50
 
51
+ it "should allow initialization with nil" do
52
+ # for doing AFObject.new(params[:foo]) when nothing is in params[:foo]
53
+ Fedora::Repository.instance.expects(:save).never
54
+ result = ActiveFedora::Base.new(nil)
55
+ result.inner_object.should be_kind_of(Fedora::FedoraObject)
56
+ end
57
+
52
58
  end
53
59
 
54
60
  describe ".internal_uri" do
@@ -57,10 +63,35 @@ describe ActiveFedora::Base do
57
63
  end
58
64
  end
59
65
 
60
- it "should have to_param" do
66
+ ### Methods for ActiveModel::Conversions
67
+ it "should have to_param once it's saved" do
68
+ @test_object.to_param.should be_nil
69
+ @test_object.expects(:create).returns(true)
70
+ @test_object.save
61
71
  @test_object.to_param.should == @test_object.pid
62
72
  end
63
73
 
74
+ it "should have to_key once it's saved" do
75
+ @test_object.to_key.should be_nil
76
+ @test_object.expects(:create).returns(true)
77
+ @test_object.save
78
+ @test_object.to_key.should == [@test_object.pid]
79
+ end
80
+
81
+ it "should have to_model" do
82
+ @test_object.to_model.should be @test_object
83
+ end
84
+ ### end ActiveModel::Conversions
85
+
86
+ ### Methods for ActiveModel::Naming
87
+ it "Should know the model_name" do
88
+ FooHistory.model_name.should == 'FooHistory'
89
+ FooHistory.model_name.human.should == 'Foo history'
90
+ end
91
+ ### End ActiveModel::Naming
92
+
93
+
94
+
64
95
  it "should respond_to has_metadata" do
65
96
  ActiveFedora::Base.respond_to?(:has_metadata).should be_true
66
97
  end
@@ -87,6 +118,8 @@ describe ActiveFedora::Base do
87
118
 
88
119
  end
89
120
 
121
+
122
+
90
123
  describe ".fields" do
91
124
  it "should provide fields" do
92
125
  @test_object.should respond_to(:fields)
@@ -234,10 +267,13 @@ describe ActiveFedora::Base do
234
267
  describe '.save' do
235
268
 
236
269
 
237
- it "should return true if object and datastreams all save successfully" do
270
+ it "should return true and set persisted if object and datastreams all save successfully" do
271
+ @test_object.persisted?.should be false
238
272
  @test_object.expects(:create).returns(true)
239
273
  @test_object.save.should == true
274
+ @test_object.persisted?.should be true
240
275
  end
276
+
241
277
 
242
278
  it "should raise an exception if object fails to save" do
243
279
  server_response = mock("Server Error")
@@ -436,6 +472,7 @@ describe ActiveFedora::Base do
436
472
  end
437
473
 
438
474
  end
475
+
439
476
 
440
477
  describe ".update_index" do
441
478
  it "should provide .update_index" do
@@ -509,65 +546,15 @@ describe ActiveFedora::Base do
509
546
 
510
547
  describe "update_attributes" do
511
548
 
512
- it "should call .update_attributes on all metadata datastreams & nokogiri datastreams" do
549
+ it "should set the attributes and save" do
513
550
  m = FooHistory.new
514
- att= {"fubar"=>{"-1"=>"mork", "0"=>"york", "1"=>"mangle"}}
551
+ att= {"fubar"=> '1234', "baz" =>'stuff'}
515
552
 
516
- m.metadata_streams.each {|ds| ds.expects(:update_attributes)}
553
+ m.expects(:fubar=).with('1234')
554
+ m.expects(:baz=).with('stuff')
555
+ m.expects(:save)
517
556
  m.update_attributes(att)
518
557
  end
519
-
520
- it "should be able to update attr on text fields" do
521
- m = FooHistory.new
522
- m.should_not be_nil
523
- m.datastreams['someData'].swank_values.should == []
524
- m.update_attributes(:swank=>'baz')
525
- m.should_not be_nil
526
- m.datastreams['someData'].swank_values.should == ['baz']
527
- end
528
-
529
- it "should have update_attributes" do
530
- n = FooHistory.new
531
- n.update_attributes(:fubar=>'baz')
532
- n.datastreams["someData"].fubar_values.should == ['baz']
533
- n.update_attributes('fubar'=>'bak')
534
- n.datastreams["someData"].fubar_values.should == ['bak']
535
- #really? should it hit all matching datastreams?
536
- n.datastreams["withText"].fubar_values.should == ['bak']
537
- end
538
-
539
- it "should allow deleting of values" do
540
- n = FooHistory.new
541
- n.datastreams["someData"].fubar_values.should == []
542
- n.update_attributes(:fubar=>'baz')
543
- n.datastreams["someData"].fubar_values.should == ['baz']
544
- n.update_attributes(:fubar=>:delete)
545
- n.datastreams["someData"].fubar_values.should == []
546
- n.update_attributes(:fubar=>'baz')
547
- n.datastreams["someData"].fubar_values.should == ['baz']
548
- n.update_attributes(:fubar=>"")
549
- n.datastreams["someData"].fubar_values.should == []
550
- end
551
-
552
- it "should take a :datastreams argument" do
553
- m = FooHistory.new
554
- m.should_not be_nil
555
- m.datastreams['someData'].fubar_values.should == []
556
- m.datastreams['withText'].fubar_values.should == []
557
- m.datastreams['withText2'].fubar_values.should == []
558
-
559
- m.update_attributes({:fubar=>'baz'}, :datastreams=>"someData")
560
- m.should_not be_nil
561
- m.datastreams['someData'].fubar_values.should == ['baz']
562
- m.datastreams["withText"].fubar_values.should == []
563
- m.datastreams['withText2'].fubar_values.should == []
564
-
565
- m.update_attributes({:fubar=>'baz'}, :datastreams=>["someData", "withText2"])
566
- m.should_not be_nil
567
- m.datastreams['someData'].fubar_values.should == ['baz']
568
- m.datastreams["withText"].fubar_values.should == []
569
- m.datastreams['withText2'].fubar_values.should == ['baz']
570
- end
571
558
  end
572
559
 
573
560
  describe "update_indexed_attributes" do