hydra-pbcore 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.gitignore +1 -0
  2. data/Rakefile +6 -0
  3. data/lib/hydra-pbcore.rb +60 -1
  4. data/lib/hydra-pbcore/behaviors.rb +4 -2
  5. data/lib/hydra-pbcore/conversions.rb +88 -0
  6. data/lib/hydra-pbcore/datastream/{digital_document.rb → deprecated/digital_document.rb} +3 -2
  7. data/lib/hydra-pbcore/datastream/deprecated/document.rb +310 -0
  8. data/lib/hydra-pbcore/datastream/deprecated/instantiation.rb +261 -0
  9. data/lib/hydra-pbcore/datastream/document.rb +37 -139
  10. data/lib/hydra-pbcore/datastream/instantiation.rb +184 -223
  11. data/lib/hydra-pbcore/methods.rb +23 -2
  12. data/lib/hydra-pbcore/templates.rb +116 -0
  13. data/lib/hydra-pbcore/version.rb +1 -1
  14. data/spec/{digital_document_spec.rb → deprecated/digital_document_spec.rb} +6 -26
  15. data/spec/deprecated/document_spec.rb +282 -0
  16. data/spec/deprecated/instantiation_spec.rb +214 -0
  17. data/spec/document_spec.rb +71 -194
  18. data/spec/fixtures/converted_digital_document_rrhof_1904.xml +53 -0
  19. data/spec/fixtures/converted_digital_document_rrhof_2405.xml +46 -0
  20. data/spec/fixtures/converted_document_rrhof_2439.xml +19 -0
  21. data/spec/fixtures/converted_document_rrhof_524.xml +45 -0
  22. data/spec/fixtures/converted_instantiation_rrhof_1184.xml +39 -0
  23. data/spec/fixtures/converted_rrhof_524.xml +45 -0
  24. data/spec/fixtures/converted_rrhof_524_instantiation.xml +18 -0
  25. data/spec/fixtures/{pbcore_digital_document_template.xml → deprecated/pbcore_digital_document_template.xml} +0 -0
  26. data/spec/fixtures/{pbcore_document_template.xml → deprecated/pbcore_document_template.xml} +0 -0
  27. data/spec/fixtures/{pbcore_instantiation_template.xml → deprecated/pbcore_instantiation_template.xml} +0 -0
  28. data/spec/fixtures/{pbcore_solr_digital_document_template.xml → deprecated/pbcore_solr_digital_document_template.xml} +0 -0
  29. data/spec/fixtures/{pbcore_solr_document_template.xml → deprecated/pbcore_solr_document_template.xml} +0 -0
  30. data/spec/fixtures/{pbcore_solr_instantiation_template.xml → deprecated/pbcore_solr_instantiation_template.xml} +0 -0
  31. data/spec/fixtures/digital_instantiation.xml +56 -0
  32. data/spec/fixtures/digital_instantiation_solr.xml +1913 -0
  33. data/spec/fixtures/digital_instantiation_template.xml +33 -0
  34. data/spec/fixtures/document.xml +72 -0
  35. data/spec/fixtures/document_solr.xml +582 -0
  36. data/spec/fixtures/document_template.xml +30 -0
  37. data/spec/fixtures/integration/digital_document_rrhof_1904.xml +63 -0
  38. data/spec/fixtures/integration/digital_document_rrhof_2405.xml +62 -0
  39. data/spec/fixtures/integration/document_rrhof_2439.xml +54 -0
  40. data/spec/fixtures/integration/document_rrhof_524.xml +80 -0
  41. data/spec/fixtures/integration/instantiation_rrhof_1184.xml +44 -0
  42. data/spec/fixtures/physical_instantiation.xml +20 -0
  43. data/spec/fixtures/physical_instantiation_solr.xml +441 -0
  44. data/spec/fixtures/physical_instantiation_template.xml +18 -0
  45. data/spec/instantiation_spec.rb +180 -132
  46. data/spec/integration/conversions_spec.rb +73 -0
  47. data/spec/spec_helper.rb +37 -9
  48. data/spec/templates_spec.rb +31 -0
  49. metadata +68 -17
@@ -0,0 +1,214 @@
1
+ require "spec_helper"
2
+
3
+ describe HydraPbcore::Datastream::Deprecated::Instantiation do
4
+
5
+ before(:each) do
6
+ @object_ds = HydraPbcore::Datastream::Deprecated::Instantiation.new(nil, nil)
7
+ end
8
+
9
+ describe ".update_indexed_attributes" do
10
+ it "should update all of the fields in #xml_template and fields not requiring additional inserted nodes" do
11
+ [
12
+ [:name],
13
+ [:location],
14
+ [:date],
15
+ [:generation],
16
+ [:media_type],
17
+ [:file_format],
18
+ [:size],
19
+ [:size_units],
20
+ [:colors],
21
+ [:duration],
22
+ [:rights_summary],
23
+ [:note],
24
+ [:checksum_type],
25
+ [:checksum_value],
26
+ [:device],
27
+ [:capture_soft],
28
+ [:trans_soft],
29
+ [:operator],
30
+ [:trans_note],
31
+ [:vendor],
32
+ [:condition],
33
+ [:cleaning],
34
+ [:color_space],
35
+ [:chroma],
36
+ [:video_standard],
37
+ [:video_encoding],
38
+ [:video_bit_rate],
39
+ [:video_bit_rate_units],
40
+ [:frame_rate],
41
+ [:frame_size],
42
+ [:video_bit_depth],
43
+ [:aspect_ratio],
44
+ [:audio_standard],
45
+ [:audio_encoding],
46
+ [:audio_bit_rate],
47
+ [:audio_bit_rate_units],
48
+ [:audio_sample_rate],
49
+ [:audio_sample_rate_units],
50
+ [:audio_bit_depth],
51
+ [:audio_channels],
52
+ ].each do |pointer|
53
+ test_val = "#{pointer.last.to_s} value"
54
+ @object_ds.update_indexed_attributes( {pointer=>{"0"=>test_val}} )
55
+ @object_ds.get_values(pointer).first.should == test_val
56
+ @object_ds.get_values(pointer).length.should == 1
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "default fields" do
62
+
63
+ it "like media type should be 'Moving image'" do
64
+ @object_ds.get_values([:media_type]).first.should == "Moving image"
65
+ end
66
+
67
+ it "like colors should be 'Color'" do
68
+ @object_ds.get_values([:colors]).first.should == "Color"
69
+ end
70
+
71
+ end
72
+
73
+ describe "#xml_template" do
74
+ it "should return an empty xml document matching an exmplar" do
75
+
76
+ # insert optional fields
77
+ @object_ds.update_indexed_attributes({ [:checksum_type] => { 0 => "inserted" }} )
78
+ @object_ds.update_indexed_attributes({ [:note] => { 0 => "inserted" }} )
79
+ @object_ds.update_indexed_attributes({ [:checksum_value] => { 0 => "inserted" }} )
80
+ @object_ds.update_indexed_attributes({ [:device] => { 0 => "inserted" }} )
81
+ @object_ds.update_indexed_attributes({ [:capture_soft] => { 0 => "inserted" }} )
82
+ @object_ds.update_indexed_attributes({ [:trans_soft] => { 0 => "inserted" }} )
83
+ @object_ds.update_indexed_attributes({ [:operator] => { 0 => "inserted" }} )
84
+ @object_ds.update_indexed_attributes({ [:trans_note] => { 0 => "inserted" }} )
85
+ @object_ds.update_indexed_attributes({ [:vendor] => { 0 => "inserted" }} )
86
+ @object_ds.update_indexed_attributes({ [:condition] => { 0 => "inserted" }} )
87
+ @object_ds.update_indexed_attributes({ [:cleaning] => { 0 => "inserted" }} )
88
+ @object_ds.update_indexed_attributes({ [:color_space] => { 0 => "inserted" }} )
89
+ @object_ds.update_indexed_attributes({ [:chroma] => { 0 => "inserted" }} )
90
+ @object_ds.update_indexed_attributes({ [:standard] => { 0 => "inserted" }} )
91
+ @object_ds.update_indexed_attributes({ [:language] => { 0 => "inserted" }} )
92
+
93
+ # insert optional nodes using sample values
94
+ @object_ds.insert_next("inserted")
95
+ @object_ds.insert_previous("inserted")
96
+
97
+ # Load example deprecated_fixture
98
+ f = deprecated_fixture "pbcore_instantiation_template.xml"
99
+ ref_node = Nokogiri::XML(f)
100
+ f.close
101
+
102
+ # Nokogiri-fy our sample document and add in namespace
103
+ sample_node = Nokogiri::XML(@object_ds.to_xml)
104
+ with_namespace = HydraPbcore::Behaviors.insert_pbcore_namespace(sample_node)
105
+
106
+ # Save this for later...
107
+ out = File.new("tmp/pbcore_instantiation_sample.xml", "w")
108
+ out.write(with_namespace.to_s)
109
+ out.close
110
+
111
+ EquivalentXml.equivalent?(ref_node, with_namespace, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
112
+
113
+ # TODO: reorder nodes on the instantiaion
114
+ #Rockhall::Pbcore.validate(with_namespace).should be_empty
115
+ end
116
+ end
117
+
118
+ describe "essence fields" do
119
+
120
+ it "shoud have different essenceTrackStandard nodes" do
121
+
122
+ # Standard
123
+ @object_ds.update_indexed_attributes({ [:video_standard] => { 0 => "video standard" }} )
124
+ @object_ds.update_indexed_attributes({ [:audio_standard] => { 0 => "audio standard" }} )
125
+ @object_ds.get_values([{:pbcoreInstantiation=>0}, {:instantiationEssenceTrack=>0}, :essenceTrackStandard]).first.should == "video standard"
126
+ @object_ds.get_values([{:pbcoreInstantiation=>0}, {:instantiationEssenceTrack=>1}, :essenceTrackStandard]).first.should == "audio standard"
127
+
128
+ end
129
+
130
+ end
131
+
132
+ describe ".to_solr" do
133
+
134
+ before(:each) do
135
+ [
136
+ "name",
137
+ "location",
138
+ "generation",
139
+ "media_type",
140
+ "file_format",
141
+ "size",
142
+ "size_units",
143
+ "colors",
144
+ "duration",
145
+ "rights_summary",
146
+ "note",
147
+ "checksum_type",
148
+ "checksum_value",
149
+ "device",
150
+ "capture_soft",
151
+ "trans_soft",
152
+ "operator",
153
+ "trans_note",
154
+ "vendor",
155
+ "condition",
156
+ "cleaning",
157
+ "color_space",
158
+ "chroma",
159
+ "video_standard",
160
+ "video_encoding",
161
+ "video_bit_rate",
162
+ "video_bit_rate_units",
163
+ "frame_rate",
164
+ "frame_size",
165
+ "video_bit_depth",
166
+ "aspect_ratio",
167
+ "audio_standard",
168
+ "audio_encoding",
169
+ "audio_bit_rate",
170
+ "audio_bit_rate_units",
171
+ "audio_sample_rate",
172
+ "audio_sample_rate_units",
173
+ "audio_bit_depth",
174
+ "audio_channels"
175
+ ].each do |field|
176
+ @object_ds.send("#{field}=".to_sym, field)
177
+ end
178
+
179
+ # Use a real date
180
+ @object_ds.date = "2012-11"
181
+ end
182
+
183
+ it "should match an exmplar" do
184
+ # Load example deprecated_fixture
185
+ f = deprecated_fixture "pbcore_solr_instantiation_template.xml"
186
+ ref_node = Nokogiri::XML(f)
187
+ f.close
188
+
189
+ # Nokogiri-fy our sample document
190
+ sample_node = Nokogiri::XML(@object_ds.to_solr.to_xml)
191
+
192
+ # Save this for later...
193
+ out = File.new("tmp/pbcore_solr_instantation_sample.xml", "w")
194
+ out.write(sample_node.to_s)
195
+ out.close
196
+
197
+ EquivalentXml.equivalent?(ref_node, sample_node, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
198
+ end
199
+
200
+ it "should display dates as they were entered" do
201
+ @object_ds.to_solr["date_display"].should == ["2012-11"]
202
+ end
203
+
204
+ it "should have dates converted to ISO 8601" do
205
+ @object_ds.to_solr["date_dt"].should == ["2012-11-01T00:00:00Z"]
206
+ end
207
+
208
+ it "should not index dates as text" do
209
+ @object_ds.to_solr["date_t"].should be_nil
210
+ end
211
+
212
+ end
213
+
214
+ end
@@ -6,8 +6,15 @@ describe HydraPbcore::Datastream::Document do
6
6
  @object_ds = HydraPbcore::Datastream::Document.new(nil, nil)
7
7
  end
8
8
 
9
- describe ".update_indexed_attributes" do
10
- it "should update all of the fields in #xml_template and fields not requiring additional inserted nodes" do
9
+ describe "::xml_template" do
10
+ it "should match an exmplar" do
11
+ save_template @object_ds.to_xml, "document_template.xml"
12
+ equivalent_xml_files("document_template.xml").should be_true
13
+ end
14
+ end
15
+
16
+ describe "#update_indexed_attributes" do
17
+ it "should update the intitial fields" do
11
18
  [
12
19
  [:pbc_id],
13
20
  [:main_title],
@@ -28,36 +35,25 @@ describe HydraPbcore::Datastream::Document do
28
35
  [:lc_genre],
29
36
  [:lc_subject_genre],
30
37
  [:event_series],
31
- [:event_place],
32
38
  [:contributor_name],
33
39
  [:contributor_role],
34
40
  [:publisher_name],
35
41
  [:publisher_role],
36
42
  [:note],
37
- [:barcode],
38
- [:repository],
39
- [:format],
40
- [:standard],
41
- [:media_type],
42
- [:generation],
43
- [:language],
44
- [:colors],
43
+ [:rights_summary],
45
44
  [:archival_collection],
46
45
  [:archival_series],
47
46
  [:collection_number],
48
47
  [:accession_number],
49
- [:usage],
50
- [:condition_note],
51
- [:cleaning_note]
52
48
  ].each do |pointer|
53
- test_val = "#{pointer.last.to_s} value"
49
+ test_val = random_string
54
50
  @object_ds.update_values( {pointer=>{"0"=>test_val}} )
55
51
  @object_ds.get_values(pointer).first.should == test_val
56
52
  @object_ds.get_values(pointer).length.should == 1
57
53
  end
58
54
  end
59
55
 
60
- it "should work for fields that require added xml nodes" do
56
+ it "should update fields requiring inserted nodes" do
61
57
  @object_ds.insert_publisher
62
58
  @object_ds.insert_contributor
63
59
  [
@@ -86,74 +82,9 @@ describe HydraPbcore::Datastream::Document do
86
82
  @object_ds.get_values(:contributor_role)[0].should == "first contributor role"
87
83
  @object_ds.get_values(:contributor_role)[1].should == "second contributor role"
88
84
  end
89
-
90
- end
91
-
92
- describe "#xml_template" do
93
- it "should return an empty xml document matching a valid exmplar" do
94
- # insert additional nodes
95
- @object_ds.insert_publisher("inserted", "inserted")
96
- @object_ds.insert_contributor("inserted", "inserted")
97
- @object_ds.insert_publisher("inserted")
98
- @object_ds.insert_contributor("inserted")
99
- @object_ds.insert_contributor
100
-
101
- # update additional nodes that OM will insert automatically
102
- @object_ds.update_indexed_attributes({ [:alternative_title] => { 0 => "inserted" }} )
103
- @object_ds.update_indexed_attributes({ [:chapter] => { 0 => "inserted" }} )
104
- @object_ds.update_indexed_attributes({ [:episode] => { 0 => "inserted" }} )
105
- @object_ds.update_indexed_attributes({ [:label] => { 0 => "inserted" }} )
106
- @object_ds.update_indexed_attributes({ [:segment] => { 0 => "inserted" }} )
107
- @object_ds.update_indexed_attributes({ [:subtitle] => { 0 => "inserted" }} )
108
- @object_ds.update_indexed_attributes({ [:track] => { 0 => "inserted" }} )
109
- @object_ds.update_indexed_attributes({ [:translation] => { 0 => "inserted" }} )
110
- @object_ds.update_indexed_attributes({ [:lc_subject] => { 0 => "inserted" }} )
111
- @object_ds.update_indexed_attributes({ [:lc_name] => { 0 => "inserted" }} )
112
- @object_ds.update_indexed_attributes({ [:rh_subject] => { 0 => "inserted" }} )
113
- @object_ds.update_indexed_attributes({ [:getty_genre] => { 0 => "inserted" }} )
114
- @object_ds.update_indexed_attributes({ [:lc_genre] => { 0 => "inserted" }} )
115
- @object_ds.update_indexed_attributes({ [:lc_subject_genre] => { 0 => "inserted" }} )
116
- @object_ds.update_indexed_attributes({ [:subject] => { 0 => "inserted" }} )
117
- @object_ds.update_indexed_attributes({ [:genre] => { 0 => "inserted" }} )
118
- @object_ds.update_indexed_attributes({ [:condition_note] => { 0 => "inserted" }} )
119
- @object_ds.update_indexed_attributes({ [:cleaning_note] => { 0 => "inserted" }} )
120
-
121
- # Load example fixture
122
- f = fixture "pbcore_document_template.xml"
123
- ref_node = Nokogiri::XML(f)
124
- f.close
125
-
126
- # Nokogiri-fy our sample document and reorder nodes
127
- sample_node = Nokogiri::XML(@object_ds.to_xml)
128
- reordered = HydraPbcore::Behaviors.reorder_document(sample_node)
129
-
130
- # Save this for later...
131
- out = File.new("tmp/pbcore_document_sample.xml", "w")
132
- out.write(reordered.to_s)
133
- out.close
134
-
135
- EquivalentXml.equivalent?(ref_node, reordered, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
136
- HydraPbcore::Behaviors.validate(reordered).should be_empty
137
-
138
- end
139
- end
140
-
141
- describe ".insert_node" do
142
-
143
- it "should return a node and index for a given template type" do
144
- pending "Don't need?"
145
- ["publisher", "contributor"].each do |type|
146
- node, index = @object_ds.insert_node(type.to_s)
147
- index.should == 0
148
- @object_ds.dirty?.should be_true
149
- node, index = @object_ds.insert_node(type.to_s)
150
- index.should == 1
151
- end
152
- end
153
-
154
85
  end
155
86
 
156
- describe ".remove_node" do
87
+ describe "#remove_node" do
157
88
  it "should remove a node a given type and index" do
158
89
  ["publisher", "contributor"].each do |type|
159
90
  @object_ds.send("insert_"+type)
@@ -165,133 +96,79 @@ describe HydraPbcore::Datastream::Document do
165
96
  @object_ds.find_by_terms(type.to_sym).count.should == 0
166
97
  end
167
98
  end
168
-
169
- end
170
-
171
- describe "default fields" do
172
-
173
- it "such as media type should be 'Moving image'" do
174
- @object_ds.get_values([:media_type]).first.should == "Moving image"
175
- end
176
-
177
- it "such as colors should be 'Color'" do
178
- @object_ds.get_values([:colors]).first.should == "Color"
179
- end
180
-
181
- it "such as generation should be 'Original'" do
182
- @object_ds.get_values([:generation]).first.should == "Original"
183
- end
184
-
185
99
  end
186
100
 
187
- describe ".to_solr" do
101
+ describe "sample" do
188
102
 
189
103
  before(:each) do
190
104
  # insert additional nodes
191
- @object_ds.insert_publisher
105
+ @object_ds.insert_publisher("inserted", "inserted")
106
+ @object_ds.insert_contributor("inserted", "inserted")
107
+ @object_ds.insert_publisher("inserted")
108
+ @object_ds.insert_contributor("inserted")
192
109
  @object_ds.insert_contributor
193
- [
194
- "main_title",
195
- "alternative_title",
196
- "chapter",
197
- "episode",
198
- "label",
199
- "segment",
200
- "subtitle",
201
- "track",
202
- "translation",
203
- "summary",
204
- "parts_list",
205
- "lc_subject",
206
- "lc_name",
207
- "rh_subject",
208
- "getty_genre",
209
- "lc_genre",
210
- "lc_subject_genre",
211
- "event_series",
212
- "event_place",
213
- "event_date",
214
- "contributor_name",
215
- "contributor_role",
216
- "publisher_name",
217
- "publisher_role",
218
- "note",
219
- "creation_date",
220
- "barcode",
221
- "repository",
222
- "format",
223
- "standard",
224
- "media_type",
225
- "generation",
226
- "language",
227
- "colors",
228
- "archival_collection",
229
- "archival_series",
230
- "collection_number",
231
- "accession_number",
232
- "usage",
233
- "condition_note",
234
- "cleaning_note"
235
- ].each do |field|
236
- @object_ds.send("#{field}=".to_sym, field)
237
- end
238
- # update additional nodes that OM will insert automatically
239
- @object_ds.update_indexed_attributes({ [:alternative_title] => { 0 => "inserted" }} )
240
- @object_ds.update_indexed_attributes({ [:chapter] => { 0 => "inserted" }} )
241
- @object_ds.update_indexed_attributes({ [:episode] => { 0 => "inserted" }} )
242
- @object_ds.update_indexed_attributes({ [:label] => { 0 => "inserted" }} )
243
- @object_ds.update_indexed_attributes({ [:segment] => { 0 => "inserted" }} )
244
- @object_ds.update_indexed_attributes({ [:subtitle] => { 0 => "inserted" }} )
245
- @object_ds.update_indexed_attributes({ [:track] => { 0 => "inserted" }} )
246
- @object_ds.update_indexed_attributes({ [:translation] => { 0 => "inserted" }} )
247
- @object_ds.update_indexed_attributes({ [:lc_subject] => { 0 => "inserted" }} )
248
- @object_ds.update_indexed_attributes({ [:lc_name] => { 0 => "inserted" }} )
249
- @object_ds.update_indexed_attributes({ [:rh_subject] => { 0 => "inserted" }} )
250
- @object_ds.update_indexed_attributes({ [:getty_genre] => { 0 => "inserted" }} )
251
- @object_ds.update_indexed_attributes({ [:lc_genre] => { 0 => "inserted" }} )
252
- @object_ds.update_indexed_attributes({ [:lc_subject_genre] => { 0 => "inserted" }} )
253
- @object_ds.update_indexed_attributes({ [:subject] => { 0 => "inserted" }} )
254
- @object_ds.update_indexed_attributes({ [:genre] => { 0 => "inserted" }} )
255
- @object_ds.update_indexed_attributes({ [:condition_note] => { 0 => "inserted" }} )
256
- @object_ds.update_indexed_attributes({ [:cleaning_note] => { 0 => "inserted" }} )
257
-
258
- # Use ISO 8601 dates
259
- @object_ds.event_date = "2012-11-11"
260
- @object_ds.creation_date = "2012"
110
+ @object_ds.insert_place("inserted")
111
+ @object_ds.insert_date("2012-11-11")
112
+
113
+ @object_ds.pbc_id = "inserted"
114
+ @object_ds.main_title = "inserted"
115
+ @object_ds.alternative_title = "inserted"
116
+ @object_ds.chapter = "inserted"
117
+ @object_ds.episode = "inserted"
118
+ @object_ds.label = "inserted"
119
+ @object_ds.segment = "inserted"
120
+ @object_ds.subtitle = "inserted"
121
+ @object_ds.track = "inserted"
122
+ @object_ds.translation = "inserted"
123
+ @object_ds.summary = "inserted"
124
+ @object_ds.parts_list = "inserted"
125
+ @object_ds.lc_subject = "inserted"
126
+ @object_ds.lc_name = "inserted"
127
+ @object_ds.rh_subject = "inserted"
128
+ @object_ds.getty_genre = "inserted"
129
+ @object_ds.lc_genre = "inserted"
130
+ @object_ds.lc_subject_genre = "inserted"
131
+ @object_ds.event_series = "inserted"
132
+ @object_ds.contributor_name = "inserted"
133
+ @object_ds.contributor_role = "inserted"
134
+ @object_ds.publisher_name = "inserted"
135
+ @object_ds.publisher_role = "inserted"
136
+ @object_ds.note = "inserted"
137
+ @object_ds.rights_summary = "inserted"
138
+ @object_ds.archival_collection = "inserted"
139
+ @object_ds.archival_series = "inserted"
140
+ @object_ds.collection_number = "inserted"
141
+ @object_ds.accession_number = "inserted"
261
142
  end
262
143
 
263
- it "should match an exmplar" do
264
- # Load example fixture
265
- f = fixture "pbcore_solr_document_template.xml"
266
- ref_node = Nokogiri::XML(f)
267
- f.close
268
-
269
- # Nokogiri-fy our sample document
270
- sample_node = Nokogiri::XML(@object_ds.to_solr.to_xml)
144
+ it "solr document should match an exmplar" do
145
+ save_template @object_ds.to_solr.to_xml, "document_solr.xml"
146
+ equivalent_xml_files("document_solr.xml").should be_true
147
+ end
271
148
 
272
- # Save this for later...
273
- out = File.new("tmp/pbcore_solr_document_sample.xml", "w")
274
- out.write(sample_node.to_s)
275
- out.close
149
+ describe "solr dates" do
150
+ it "should be indexed for display" do
151
+ @object_ds.to_solr["event_date_display"].should == ["2012-11-11"]
152
+ end
276
153
 
277
- EquivalentXml.equivalent?(ref_node, sample_node, opts = { :element_order => false, :normalize_whitespace => true }).should be_true
278
- end
154
+ it "should be converted to ISO 8601" do
155
+ @object_ds.to_solr["event_date_dt"].should == ["2012-11-11T00:00:00Z"]
156
+ end
279
157
 
280
- it "should display dates as they were entered" do
281
- @object_ds.to_solr["creation_date_display"].should == ["2012"]
282
- @object_ds.to_solr["event_date_display"].should == ["2012-11-11"]
158
+ it "should not be searchable as strings" do
159
+ @object_ds.to_solr["event_date_t"].should be_nil
160
+ end
283
161
  end
284
162
 
285
- it "should have dates converted to ISO 8601" do
286
- @object_ds.to_solr["creation_date_dt"].should == ["2012-01-01T00:00:00Z"]
287
- @object_ds.to_solr["event_date_dt"].should == ["2012-11-11T00:00:00Z"]
163
+ it "xml document should match an exmplar" do
164
+ save_template @object_ds.to_xml, "document.xml"
165
+ equivalent_xml_files("document.xml").should be_true
288
166
  end
289
167
 
290
- it "should not index dates as text" do
291
- @object_ds.to_solr["creation_date_t"].should be_nil
292
- @object_ds.to_solr["event_date_t"].should be_nil
168
+ it "xml document should validate against the PBCore schema" do
169
+ save_template @object_ds.to_pbcore_xml, "document_valid.xml"
170
+ @object_ds.valid?.should == []
293
171
  end
294
-
295
- end
172
+ end
296
173
 
297
174
  end