blacklight_marc 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,28 +6,11 @@ module BlacklightMarc
6
6
  source_root File.expand_path('../templates', __FILE__)
7
7
 
8
8
  desc """
9
- 1. Adds additional mime types to you application in the file '/config/initializers/mime_types.rb'
10
- 2. Creates config/SolrMarc/... with settings for SolrMarc
11
- 3. Creates a CatalogController with some some demo fields for MARC-like data
12
- 4. Injects MARC-specific behaviors into the SolrDocument
9
+ 1. Creates config/SolrMarc/... with settings for SolrMarc
10
+ 2. Creates a CatalogController with some some demo fields for MARC-like data
11
+ 3. Injects MARC-specific behaviors into the SolrDocument
12
+ 4. Injects MARC-specific behaviors into the CatalogController
13
13
  """
14
-
15
- # Content types used by Marc Document extension, possibly among others.
16
- # Registering a unique content type with 'register' (rather than
17
- # register_alias) will allow content-negotiation for the format.
18
- def add_mime_types
19
- puts "Updating Mime Types"
20
- insert_into_file "config/initializers/mime_types.rb", :after => "# Be sure to restart your server when you modify this file." do <<EOF
21
- Mime::Type.register_alias "text/plain", :refworks_marc_txt
22
- Mime::Type.register_alias "text/plain", :openurl_kev
23
- Mime::Type.register "application/x-endnote-refer", :endnote
24
- Mime::Type.register "application/marc", :marc
25
- Mime::Type.register "application/marcxml+xml", :marcxml,
26
- ["application/x-marc+xml", "application/x-marcxml+xml",
27
- "application/marc+xml"]
28
- EOF
29
- end
30
- end
31
14
 
32
15
  # Copy all files in templates/config directory to host config
33
16
  def create_configuration_files
@@ -57,5 +40,18 @@ EOF
57
40
  end
58
41
  end
59
42
 
43
+ # Add MARC behaviors to the catalog controller
44
+ def inject_blacklight_controller_behavior
45
+ # prepend_file("app/controllers/application_controller.rb", "require 'blacklight/controller'\n\n")
46
+ inject_into_class "app/controllers/catalog_controller.rb", "CatalogController", :after => "include Blacklight::Catalog" do
47
+ " include BlacklightMarc::Catalog\n"
48
+ end
49
+ end
50
+
51
+
52
+ def inject_blacklight_marc_routes
53
+ route('BlacklightMarc.add_routes(self)')
54
+ end
55
+
60
56
  end
61
57
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Librarian view" do
4
+ it "should show marc fields" do
5
+ visit catalog_path('2009373513')
6
+ click_link "Librarian View"
7
+ expect(page).to have_content "Librarian View"
8
+ expect(page).to have_content "LEADER 01213nam a22003614a 4500"
9
+ expect(page).to have_content "100"
10
+ expect(page).to have_content "Lin, Xingzhi."
11
+ expect(page).to have_content "6|"
12
+ end
13
+ end
@@ -0,0 +1,59 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+
5
+ # WARNING!!!
6
+ # If you set any values in Blacklight here, you must reset them to the original
7
+ # values in an after() block so other tests get expected results.
8
+ # Blacklight is a Singleton for application configuration.
9
+
10
+ ## TODO: ALL these specs probably really ought to be on the modules
11
+ # being tested, not on the bare SolrDocument class that has no logic
12
+ # of it's own, it just includes modules. No? jrochkind 29 Mar 2010
13
+
14
+ def get_hash_with_marcxml
15
+ {'responseHeader'=>{'status'=>0,'QTime'=>0,'params'=>{'q'=>'id:00282214','wt'=>'ruby'}},'response'=>{'numFound'=>1,'start'=>0,'docs'=>[{'id'=>'00282214', "marc_display" =>'<record xmlns=\'http://www.loc.gov/MARC21/slim\'><leader>00799cam a2200241 a 4500</leader><controlfield tag=\'001\'> 00282214 </controlfield><controlfield tag=\'003\'>DLC</controlfield><controlfield tag=\'005\'>20090120022042.0</controlfield><controlfield tag=\'008\'>000417s1998 pk 000 0 urdo </controlfield><datafield tag=\'010\' ind1=\' \' ind2=\' \'><subfield code=\'a\'> 00282214 </subfield></datafield><datafield tag=\'025\' ind1=\' \' ind2=\' \'><subfield code=\'a\'>P-U-00282214; 05; 06</subfield></datafield><datafield tag=\'040\' ind1=\' \' ind2=\' \'><subfield code=\'a\'>DLC</subfield><subfield code=\'c\'>DLC</subfield><subfield code=\'d\'>DLC</subfield></datafield><datafield tag=\'041\' ind1=\'1\' ind2=\' \'><subfield code=\'a\'>urd</subfield><subfield code=\'h\'>snd</subfield></datafield><datafield tag=\'042\' ind1=\' \' ind2=\' \'><subfield code=\'a\'>lcode</subfield></datafield><datafield tag=\'050\' ind1=\'0\' ind2=\'0\'><subfield code=\'a\'>PK2788.9.A9</subfield><subfield code=\'b\'>F55 1998</subfield></datafield><datafield tag=\'100\' ind1=\'1\' ind2=\' \'><subfield code=\'a\'>Ayaz, Shaikh,</subfield><subfield code=\'d\'>1923-1997.</subfield></datafield><datafield tag=\'245\' ind1=\'1\' ind2=\'0\'><subfield code=\'a\'>Fikr-i Ayāz /</subfield><subfield code=\'c\'>murattibīn, Āṣif Farruk̲h̲ī, Shāh Muḥammad Pīrzādah.</subfield></datafield><datafield tag=\'260\' ind1=\' \' ind2=\' \'><subfield code=\'a\'>Karācī :</subfield><subfield code=\'b\'>Dāniyāl,</subfield><subfield code=\'c\'>[1998]</subfield></datafield><datafield tag=\'300\' ind1=\' \' ind2=\' \'><subfield code=\'a\'>375 p. ;</subfield><subfield code=\'c\'>23 cm.</subfield></datafield><datafield tag=\'546\' ind1=\' \' ind2=\' \'><subfield code=\'a\'>In Urdu.</subfield></datafield><datafield tag=\'520\' ind1=\' \' ind2=\' \'><subfield code=\'a\'>Selected poems and articles from the works of renowned Sindhi poet; chiefly translated from Sindhi.</subfield></datafield><datafield tag=\'700\' ind1=\'1\' ind2=\' \'><subfield code=\'a\'>Farruk̲h̲ī, Āṣif,</subfield><subfield code=\'d\'>1959-</subfield></datafield><datafield tag=\'700\' ind1=\'1\' ind2=\' \'><subfield code=\'a\'>Pīrzādah, Shāh Muḥammad.</subfield></datafield></record>','timestamp'=>'2009-03-26T18:15:31.074Z','material_type_display'=>['375 p'],'title_display'=>['Fikr-i Ayāz'],'author_display'=>['Farruk̲h̲ī, Āṣif','Pīrzādah, Shāh Muḥammad'],'language_facet'=>['Urdu'],'format'=>['Book'],'published_display'=>['Karācī']}]}}
16
+ end
17
+
18
+ def get_hash_without_marcxml
19
+ {'responseHeader'=>{'status'=>0,'QTime'=>0,'params'=>{'q'=>'id:00282214','wt'=>'ruby'}},'response'=>{'numFound'=>1,'start'=>0,'docs'=>[{'id'=>'00282214','timestamp'=>'2009-03-26T18:15:31.074Z','material_type_display'=>['375 p'],'title_display'=>['Fikr-i Ayāz'],'author_display'=>['Farruk̲h̲ī, Āṣif','Pīrzādah, Shāh Muḥammad'],'language_facet'=>['Urdu'],'format'=>['Book'],'published_display'=>['Karācī']}]}}
20
+ end
21
+
22
+ describe SolrDocument do
23
+
24
+ before(:each) do
25
+ @hash_with_marcxml = get_hash_with_marcxml['response']['docs'][0]
26
+ SolrDocument.extension_parameters[:marc_source_field] = :marc_display
27
+ SolrDocument.extension_parameters[:marc_format_type] = :marcxml
28
+
29
+ # rsolr seems to reload SolrDocument from time to time, so we can't
30
+ # count on the initializer to register the extension, need to re-register
31
+ # it.
32
+ SolrDocument.registered_extensions = nil
33
+ SolrDocument.use_extension( Blacklight::Solr::Document::Marc ) { |document| document.has_key?(:marc_display)}
34
+
35
+ @solrdoc = SolrDocument.new(@hash_with_marcxml)
36
+
37
+ end
38
+
39
+ describe "ruby marc creation" do
40
+
41
+ it "should have a valid to_marc" do
42
+ @solrdoc = SolrDocument.new(@hash_with_marcxml)
43
+
44
+ @solrdoc.should respond_to(:to_marc)
45
+ @solrdoc.to_marc.should be_kind_of(MARC::Record)
46
+ end
47
+
48
+ it "should not try to create marc for objects w/out stored marc (marcxml test only at this time)" do
49
+ # TODO: Create another double object that does not have marc-xml in it and make
50
+ # sure everything fails gracefully
51
+ @hash_without_marcxml = get_hash_without_marcxml['response']['docs'][0]
52
+ @solrdoc_without_marc = SolrDocument.new(@hash_without_marcxml)
53
+ @solrdoc_without_marc.should_not respond_to(:to_marc)
54
+ # legacy check
55
+ # @solrdoc_without_marc.should respond_to(:marc)
56
+ # @solrdoc_without_marc.marc.should == nil
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,89 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+ require 'active_model'
4
+
5
+ describe "Blacklight::Solr::Document::Marc" do
6
+ before(:all) do
7
+ @mock_class = Class.new do
8
+ include Blacklight::Solr::Document
9
+ end
10
+ @mock_class.use_extension( Blacklight::Solr::Document::Marc )
11
+ @mock_class.extension_parameters[:marc_source_field] = :marc
12
+ end
13
+
14
+ describe "marc binary mode" do
15
+ before(:each) do
16
+ @mock_class.extension_parameters[:marc_format_type] = :marc21
17
+ end
18
+ it "should read and parse a marc binary file" do
19
+ document = @mock_class.new(:marc => sample_marc_binary )
20
+ document.to_marc.should == marc_from_string(:binary => sample_marc_binary )
21
+ end
22
+ end
23
+
24
+ describe "marcxml mode" do
25
+ before(:each) do
26
+ @mock_class.extension_parameters[:marc_format_type] = :marcxml
27
+ end
28
+ it "should read and parse a marc xml file" do
29
+ document = @mock_class.new(:marc => sample_marc_xml)
30
+ document.to_marc.should == marc_from_string(:xml => sample_marc_xml)
31
+ end
32
+ end
33
+
34
+ it "should register all its export formats" do
35
+ document = @mock_class.new
36
+ Set.new(document.export_formats.keys).should be_superset(Set.new([:marc, :marcxml, :openurl_ctx_kev, :refworks_marc_txt, :endnote, :xml]))
37
+ end
38
+
39
+
40
+
41
+ def sample_marc_xml
42
+ "<record>
43
+ <leader>01182pam a22003014a 4500</leader>
44
+ <controlfield tag=\"001\">a4802615</controlfield>
45
+ <controlfield tag=\"003\">SIRSI</controlfield>
46
+ <controlfield tag=\"008\">020828s2003 enkaf b 001 0 eng </controlfield>
47
+
48
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
49
+ <subfield code=\"a\">Apples :</subfield>
50
+ <subfield code=\"b\">botany, production, and uses /</subfield>
51
+ <subfield code=\"c\">edited by D.C. Ferree and I.J. Warrington.</subfield>
52
+ </datafield>
53
+
54
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
55
+ <subfield code=\"a\">Oxon, U.K. ;</subfield>
56
+ <subfield code=\"a\">Cambridge, MA :</subfield>
57
+ <subfield code=\"b\">CABI Pub.,</subfield>
58
+ <subfield code=\"c\">c2003.</subfield>
59
+ </datafield>
60
+
61
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
62
+ <subfield code=\"a\">Ferree, David C.</subfield>
63
+ <subfield code=\"q\">(David Curtis),</subfield>
64
+ <subfield code=\"d\">1943-</subfield>
65
+ </datafield>
66
+
67
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
68
+ <subfield code=\"a\">Warrington, I. J.</subfield>
69
+ <subfield code=\"q\">(Ian J.)</subfield>
70
+ </datafield>
71
+ </record>"
72
+ end
73
+
74
+
75
+ def sample_marc_binary
76
+ "00386pam a22001094a 4500001000900000003000600009008004100015245008900056260005400145700004500199700003200244\036a4802615\036SIRSI\036020828s2003 enkaf b 001 0 eng \03600\037aApples :\037bbotany, production, and uses /\037cedited by D.C. Ferree and I.J. Warrington.\036 \037aOxon, U.K. ;\037aCambridge, MA :\037bCABI Pub.,\037cc2003.\0361 \037aFerree, David C.\037q(David Curtis),\037d1943-\0361 \037aWarrington, I. J.\037q(Ian J.)\036\035"
77
+ end
78
+ def marc_from_string(args = {})
79
+ if args[:binary]
80
+ reader = MARC::Reader.new(StringIO.new(args[:binary]))
81
+ reader.each {|rec| return rec }
82
+ elsif args[:xml]
83
+ reader = MARC::XMLReader.new(StringIO.new(args[:xml]))
84
+ reader.each {|rec| return rec }
85
+ end
86
+ return nil
87
+ end
88
+ end
89
+
@@ -0,0 +1,743 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
3
+
4
+ def marc_from_xml(string)
5
+ reader = MARC::XMLReader.new(StringIO.new(string))
6
+ reader.each {|rec| return rec }
7
+ end
8
+
9
+
10
+ def standard_citation
11
+ "<record>
12
+ <leader>01182pam a22003014a 4500</leader>
13
+ <controlfield tag=\"001\">a4802615</controlfield>
14
+ <controlfield tag=\"003\">SIRSI</controlfield>
15
+ <controlfield tag=\"008\">020828s2003 enkaf b 001 0 eng </controlfield>
16
+
17
+ <datafield tag=\"110\" ind1=\"1\" ind2=\" \">
18
+ <subfield code=\"a\">Bobs</subfield>
19
+ <subfield code=\"b\">Your Uncle</subfield>
20
+ </datafield>
21
+
22
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
23
+ <subfield code=\"a\">Apples :</subfield>
24
+ <subfield code=\"b\">botany, production, and uses /</subfield>
25
+ <subfield code=\"c\">edited by D.C. Ferree and I.J. Warrington.</subfield>
26
+ </datafield>
27
+
28
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
29
+ <subfield code=\"a\">Oxon, U.K. ;</subfield>
30
+ <subfield code=\"a\">Cambridge, MA :</subfield>
31
+ <subfield code=\"b\">CABI Pub.,</subfield>
32
+ <subfield code=\"c\">c2003.</subfield>
33
+ </datafield>
34
+
35
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
36
+ <subfield code=\"a\">Ferree, David C.</subfield>
37
+ <subfield code=\"q\">(David Curtis),</subfield>
38
+ <subfield code=\"d\">1943-</subfield>
39
+ </datafield>
40
+
41
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
42
+ <subfield code=\"a\">Warrington, I. J.</subfield>
43
+ <subfield code=\"q\">(Ian J.)</subfield>
44
+ </datafield>
45
+ </record>"
46
+ end
47
+
48
+ def music_record
49
+ "<record>
50
+ <leader>01828cjm a2200409 a 4500</leader>
51
+ <controlfield tag=\"001\">a4768316</controlfield>
52
+ <controlfield tag=\"003\">SIRSI</controlfield>
53
+ <controlfield tag=\"007\">sd fungnnmmned</controlfield>
54
+ <controlfield tag=\"008\">020117p20011990xxuzz h d</controlfield>
55
+
56
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
57
+ <subfield code=\"a\">Music for horn</subfield>
58
+ <subfield code=\"h\">[sound recording] /</subfield>
59
+ <subfield code=\"c\">Brahms, Beethoven, von Krufft.</subfield>
60
+ </datafield>
61
+
62
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
63
+ <subfield code=\"a\">[United States] :</subfield>
64
+ <subfield code=\"b\">Harmonia Mundi USA,</subfield>
65
+ <subfield code=\"c\">p2001.</subfield>
66
+ </datafield>
67
+
68
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
69
+ <subfield code=\"a\">Greer, Lowell.</subfield>
70
+ </datafield>
71
+
72
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
73
+ <subfield code=\"a\">Lubin, Steven.</subfield>
74
+ </datafield>
75
+
76
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
77
+ <subfield code=\"a\">Chase, Stephanie,</subfield>
78
+ <subfield code=\"d\">1957-</subfield>
79
+ </datafield>
80
+
81
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
82
+ <subfield code=\"a\">Brahms, Johannes,</subfield>
83
+ <subfield code=\"d\">1833-1897.</subfield>
84
+ <subfield code=\"t\">Trios,</subfield>
85
+ <subfield code=\"m\">piano, violin, horn,</subfield>
86
+ <subfield code=\"n\">op. 40,</subfield>
87
+ <subfield code=\"r\">E? major.</subfield>
88
+ </datafield>
89
+
90
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
91
+ <subfield code=\"a\">Beethoven, Ludwig van,</subfield>
92
+ <subfield code=\"d\">1770-1827.</subfield>
93
+ <subfield code=\"t\">Sonatas,</subfield>
94
+ <subfield code=\"m\">horn, piano,</subfield>
95
+ <subfield code=\"n\">op. 17,</subfield>
96
+ <subfield code=\"r\">F major.</subfield>
97
+ </datafield>
98
+
99
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
100
+ <subfield code=\"a\">Krufft, Nikolaus von,</subfield>
101
+ <subfield code=\"d\">1779-1818.</subfield>
102
+ <subfield code=\"t\">Sonata,</subfield>
103
+ <subfield code=\"m\">horn, piano,</subfield>
104
+ <subfield code=\"r\">F major.</subfield>
105
+ </datafield>
106
+ </record>"
107
+ end
108
+
109
+ def utf8_decomposed_record_xml
110
+ "<record>
111
+ <leader>01341nam 2200301 a 450 </leader>
112
+ <controlfield tag=\"005\">19971120234400.0</controlfield>
113
+ <controlfield tag=\"008\">890316s1988 caua b 101 0 eng </controlfield>
114
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
115
+ <subfield code=\"a\">Sharīʻat and ambiguity in South Asian Islam /</subfield>
116
+ <subfield code=\"c\">edited by Katherine P. Ewing.</subfield>
117
+ </datafield>
118
+ </record>"
119
+ end
120
+
121
+ # 1:100,1:700,245a,0:245b,
122
+ def record1_xml
123
+ "<record>
124
+ <leader>01021cam a2200277 a 4500</leader>
125
+ <controlfield tag=\"001\">a1711966</controlfield>
126
+ <controlfield tag=\"003\">SIRSI</controlfield>
127
+ <controlfield tag=\"008\">890421s1988 enka 001 0 eng d</controlfield>
128
+
129
+ <datafield tag=\"100\" ind1=\"1\" ind2=\" \">
130
+ <subfield code=\"a\">Janetzky, Kurt.</subfield>
131
+ </datafield>
132
+
133
+ <datafield tag=\"245\" ind1=\"1\" ind2=\"4\">
134
+ <subfield code=\"a\">The horn /</subfield>
135
+ <subfield code=\"c\">Kurt Janetzky and Bernhard Bruchle ; translated from the German by James Chater.</subfield>
136
+ </datafield>
137
+
138
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
139
+ <subfield code=\"a\">London :</subfield>
140
+ <subfield code=\"b\">Batsford,</subfield>
141
+ <subfield code=\"c\">1988.</subfield>
142
+ </datafield>
143
+
144
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
145
+ <subfield code=\"a\">Brüchle, Bernhard.</subfield>
146
+ </datafield>
147
+ </record>"
148
+ end
149
+
150
+ # 0:100,0:700,245a,0:245b
151
+ def record2_xml
152
+ "<record>
153
+ <leader>00903nam a2200253 4500</leader>
154
+ <controlfield tag=\"001\">a543347</controlfield>
155
+ <controlfield tag=\"003\">SIRSI</controlfield>
156
+ <controlfield tag=\"008\">730111s1971 ohu b 000 0 eng </controlfield>
157
+
158
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
159
+ <subfield code=\"a\">Final report to the Honorable John J. Gilligan, Governor.</subfield>
160
+ </datafield>
161
+
162
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
163
+ <subfield code=\"a\">[Columbus,</subfield>
164
+ <subfield code=\"b\">Printed by the State of Ohio, Dept. of Urban Affairs,</subfield>
165
+ <subfield code=\"c\">1971]</subfield>
166
+ </datafield>
167
+ </record>"
168
+ end
169
+
170
+ def year_range_xml
171
+ "<record>
172
+ <leader>01021cam a2200277 a 4500</leader>
173
+ <controlfield tag=\"001\">a1711966</controlfield>
174
+ <controlfield tag=\"003\">SIRSI</controlfield>
175
+ <controlfield tag=\"008\">890421s1988 enka 001 0 eng d</controlfield>
176
+
177
+ <datafield tag=\"100\" ind1=\"1\" ind2=\" \">
178
+ <subfield code=\"a\">Schmoe, Joe</subfield>
179
+ </datafield>
180
+
181
+ <datafield tag=\"245\" ind1=\"1\" ind2=\"4\">
182
+ <subfield code=\"a\">Main title /</subfield>
183
+ <subfield code=\"c\">Subtitle</subfield>
184
+ </datafield>
185
+
186
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
187
+ <subfield code=\"a\">London :</subfield>
188
+ <subfield code=\"b\">Batsford,</subfield>
189
+ <subfield code=\"c\">1988-2000</subfield>
190
+ </datafield>
191
+
192
+ </record>"
193
+ end
194
+
195
+ def no_date_xml
196
+ "<record>
197
+ <leader>01021cam a2200277 a 4500</leader>
198
+ <controlfield tag=\"001\">a1711966</controlfield>
199
+ <controlfield tag=\"003\">SIRSI</controlfield>
200
+ <controlfield tag=\"008\">890421s1988 enka 001 0 eng d</controlfield>
201
+
202
+ <datafield tag=\"100\" ind1=\"1\" ind2=\" \">
203
+ <subfield code=\"a\">Schmoe, Joe</subfield>
204
+ </datafield>
205
+
206
+ <datafield tag=\"245\" ind1=\"1\" ind2=\"4\">
207
+ <subfield code=\"a\">Main title /</subfield>
208
+ <subfield code=\"c\">Subtitle</subfield>
209
+ </datafield>
210
+
211
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
212
+ <subfield code=\"a\">London :</subfield>
213
+ <subfield code=\"b\">Batsford,</subfield>
214
+ <subfield code=\"c\">n.d.</subfield>
215
+ </datafield>
216
+
217
+ </record>"
218
+ end
219
+
220
+ def section_title_xml
221
+ "<record>
222
+ <leader>01021cam a2200277 a 4500</leader>
223
+ <controlfield tag=\"001\">a1711966</controlfield>
224
+ <controlfield tag=\"003\">SIRSI</controlfield>
225
+ <controlfield tag=\"008\">890421s1988 enka 001 0 eng d</controlfield>
226
+
227
+ <datafield tag=\"100\" ind1=\"1\" ind2=\" \">
228
+ <subfield code=\"a\">Schmoe, Joe</subfield>
229
+ </datafield>
230
+
231
+ <datafield tag=\"245\" ind1=\"1\" ind2=\"4\">
232
+ <subfield code=\"a\">Main title /</subfield>
233
+ <subfield code=\"b\">Subtitle</subfield>
234
+ <subfield code=\"n\">Number of part.</subfield>
235
+ <subfield code=\"p\">Name of part.</subfield>
236
+ </datafield>
237
+
238
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
239
+ <subfield code=\"a\">London :</subfield>
240
+ <subfield code=\"b\">Batsford,</subfield>
241
+ <subfield code=\"c\">2001</subfield>
242
+ </datafield>
243
+
244
+ </record>"
245
+ end
246
+
247
+ def dissertation_note_xml
248
+ "<record>
249
+ <leader>00903nam a2200253 4500</leader>
250
+ <controlfield tag=\"008\">730111s1971 ohu b 000 0 eng </controlfield>
251
+
252
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
253
+ <subfield code=\"a\">Thesis on some subject.</subfield>
254
+ </datafield>
255
+
256
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
257
+ <subfield code=\"c\">2009</subfield>
258
+ </datafield>
259
+
260
+ <datafield tag=\"502\" ind1=\"0\" ind2=\"0\">
261
+ <subfield code=\"a\">Phd Thesis -- Goodenough College, 2009</subfield>
262
+ </datafield>
263
+ </record>"
264
+ end
265
+
266
+ def special_contributor_with_author_xml
267
+ "<record>
268
+ <leader>00903nam a2200253 4500</leader>
269
+ <controlfield tag=\"008\">730111s1971 ohu b 000 0 eng </controlfield>
270
+
271
+ <datafield tag=\"100\" ind1=\"0\" ind2=\"0\">
272
+ <subfield code=\"a\">Doe, John</subfield>
273
+ </datafield>
274
+
275
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
276
+ <subfield code=\"a\">Title of item.</subfield>
277
+ </datafield>
278
+
279
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
280
+ <subfield code=\"a\">Publisher</subfield>
281
+ <subfield code=\"b\">Place</subfield>
282
+ <subfield code=\"c\">2009</subfield>
283
+ </datafield>
284
+
285
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
286
+ <subfield code=\"a\">Schmoe, Joe</subfield>
287
+ <subfield code=\"e\">trl.</subfield>
288
+ </datafield>
289
+
290
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
291
+ <subfield code=\"a\">Schmoe, Bill</subfield>
292
+ <subfield code=\"4\">edt</subfield>
293
+ </datafield>
294
+
295
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
296
+ <subfield code=\"a\">Schmoe, Susie</subfield>
297
+ <subfield code=\"e\">com.</subfield>
298
+ </datafield>
299
+
300
+ </record>"
301
+ end
302
+
303
+ def three_authors_xml
304
+ "<record>
305
+ <leader>00903nam a2200253 4500</leader>
306
+ <controlfield tag=\"008\">730111s1971 ohu b 000 0 eng </controlfield>
307
+
308
+ <datafield tag=\"100\" ind1=\"0\" ind2=\"0\">
309
+ <subfield code=\"a\">Doe, John</subfield>
310
+ </datafield>
311
+
312
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
313
+ <subfield code=\"a\">Title of item.</subfield>
314
+ </datafield>
315
+
316
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
317
+ <subfield code=\"a\">Publisher</subfield>
318
+ <subfield code=\"b\">Place</subfield>
319
+ <subfield code=\"c\">2009</subfield>
320
+ </datafield>
321
+
322
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
323
+ <subfield code=\"a\">Schmoe, Joe</subfield>
324
+ </datafield>
325
+
326
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
327
+ <subfield code=\"a\">Schmoe, Bill</subfield>
328
+ </datafield>
329
+
330
+ </record>"
331
+ end
332
+
333
+ def special_contributor_no_author_xml
334
+ "<record>
335
+ <leader>00903nam a2200253 4500</leader>
336
+ <controlfield tag=\"008\">730111s1971 ohu b 000 0 eng </controlfield>
337
+
338
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
339
+ <subfield code=\"a\">Title of item.</subfield>
340
+ </datafield>
341
+
342
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
343
+ <subfield code=\"a\">Publisher</subfield>
344
+ <subfield code=\"b\">Place</subfield>
345
+ <subfield code=\"c\">2009</subfield>
346
+ </datafield>
347
+
348
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
349
+ <subfield code=\"a\">Schmoe, Joe</subfield>
350
+ <subfield code=\"e\">trl.</subfield>
351
+ </datafield>
352
+
353
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
354
+ <subfield code=\"a\">Schmoe, Bill</subfield>
355
+ <subfield code=\"4\">edt</subfield>
356
+ </datafield>
357
+
358
+ <datafield tag=\"700\" ind1=\" \" ind2=\" \">
359
+ <subfield code=\"a\">Schmoe, Susie</subfield>
360
+ <subfield code=\"e\">com.</subfield>
361
+ </datafield>
362
+
363
+ </record>"
364
+ end
365
+
366
+ # 4+:athors
367
+ def record3_xml
368
+ "<record>
369
+ <leader>01828cjm a2200409 a 4500</leader>
370
+ <controlfield tag=\"001\">a4768316</controlfield>
371
+ <controlfield tag=\"003\">SIRSI</controlfield>
372
+ <controlfield tag=\"007\">sd fungnnmmned</controlfield>
373
+ <controlfield tag=\"008\">020117p20011990xxuzz h d</controlfield>
374
+
375
+ <datafield tag=\"245\" ind1=\"0\" ind2=\"0\">
376
+ <subfield code=\"a\">Music for horn</subfield>
377
+ <subfield code=\"h\">[sound recording] /</subfield>
378
+ <subfield code=\"c\">Brahms, Beethoven, von Krufft.</subfield>
379
+ </datafield>
380
+
381
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
382
+ <subfield code=\"a\">[United States] :</subfield>
383
+ <subfield code=\"b\">Harmonia Mundi USA,</subfield>
384
+ <subfield code=\"c\">p2001.</subfield>
385
+ </datafield>
386
+
387
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
388
+ <subfield code=\"a\">Greer, Lowell.</subfield>
389
+ </datafield>
390
+
391
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
392
+ <subfield code=\"a\">Lubin, Steven.</subfield>
393
+ </datafield>
394
+
395
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
396
+ <subfield code=\"a\">Chase, Stephanie,</subfield>
397
+ <subfield code=\"d\">1957-</subfield>
398
+ </datafield>
399
+
400
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
401
+ <subfield code=\"a\">Brahms, Johannes,</subfield>
402
+ <subfield code=\"d\">1833-1897.</subfield>
403
+ <subfield code=\"t\">Trios,</subfield>
404
+ <subfield code=\"m\">piano, violin, horn,</subfield>
405
+ <subfield code=\"n\">op. 40,</subfield>
406
+ <subfield code=\"r\">E? major.</subfield>
407
+ </datafield>
408
+
409
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
410
+ <subfield code=\"a\">Beethoven, Ludwig van,</subfield>
411
+ <subfield code=\"d\">1770-1827.</subfield>
412
+ <subfield code=\"t\">Sonatas,</subfield>
413
+ <subfield code=\"m\">horn, piano,</subfield>
414
+ <subfield code=\"n\">op. 17,</subfield>
415
+ <subfield code=\"r\">F major.</subfield>
416
+ </datafield>
417
+
418
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
419
+ <subfield code=\"a\">Krufft, Nikolaus von,</subfield>
420
+ <subfield code=\"d\">1779-1818.</subfield>
421
+ <subfield code=\"t\">Sonata,</subfield>
422
+ <subfield code=\"m\">horn, piano,</subfield>
423
+ <subfield code=\"r\">F major.</subfield>
424
+ </datafield>
425
+
426
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
427
+ <subfield code=\"a\">Doe, John</subfield>
428
+ </datafield>
429
+
430
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
431
+ <subfield code=\"a\">Doe, Jane</subfield>
432
+ </datafield>
433
+
434
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
435
+ <subfield code=\"a\">Smith, John</subfield>
436
+ </datafield>
437
+
438
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
439
+ <subfield code=\"a\">Smith, Jane</subfield>
440
+ </datafield>
441
+
442
+ <datafield tag=\"700\" ind1=\"1\" ind2=\"2\">
443
+ <subfield code=\"a\">Smith, James</subfield>
444
+ </datafield>
445
+ </record>"
446
+ end
447
+
448
+ # No elements that can be put into a citation
449
+ def no_good_data_xml
450
+ "<record>
451
+ <leader>01828cjm a2200409 a 4500</leader>
452
+ <controlfield tag=\"001\">a4768316</controlfield>
453
+ <controlfield tag=\"003\">SIRSI</controlfield>
454
+ <controlfield tag=\"007\">sd fungnnmmned</controlfield>
455
+ <controlfield tag=\"008\">020117p20011990xxuzz h d</controlfield>
456
+
457
+ <datafield tag=\"024\" ind1=\"1\" ind2=\" \">
458
+ <subfield code=\"a\">713746703721</subfield>
459
+ </datafield>
460
+
461
+ <datafield tag=\"028\" ind1=\"0\" ind2=\"0\">
462
+ <subfield code=\"a\">HCX 3957037</subfield>
463
+ <subfield code=\"b\">Harmonia Mundi USA</subfield>
464
+ </datafield>
465
+
466
+ <datafield tag=\"033\" ind1=\"2\" ind2=\"0\">
467
+ <subfield code=\"a\">19901203</subfield>
468
+ <subfield code=\"a\">19901206</subfield>
469
+ </datafield>
470
+
471
+ <datafield tag=\"035\" ind1=\" \" ind2=\" \">
472
+ <subfield code=\"a\">(OCoLC-M)48807235</subfield>
473
+ </datafield>
474
+
475
+ <datafield tag=\"040\" ind1=\" \" ind2=\" \">
476
+ <subfield code=\"a\">WC4</subfield>
477
+ <subfield code=\"c\">WC4</subfield>
478
+ <subfield code=\"d\">CSt</subfield>
479
+ </datafield>
480
+
481
+ <datafield tag=\"041\" ind1=\"0\" ind2=\" \">
482
+ <subfield code=\"g\">engfre</subfield>
483
+ </datafield>
484
+ </record>"
485
+ end
486
+
487
+ # Bad author name
488
+ def bad_author_xml
489
+ "<record>
490
+ <leader>01021cam a2200277 a 4500</leader>
491
+ <controlfield tag=\"001\">a1711966</controlfield>
492
+ <controlfield tag=\"003\">SIRSI</controlfield>
493
+ <controlfield tag=\"008\">890421s1988 enka 001 0 eng d</controlfield>
494
+
495
+ <datafield tag=\"100\" ind1=\"1\" ind2=\" \">
496
+ <subfield code=\"a\"></subfield>
497
+ </datafield>
498
+
499
+ <datafield tag=\"245\" ind1=\"1\" ind2=\"4\">
500
+ <subfield code=\"a\">The horn /</subfield>
501
+ <subfield code=\"c\">Kurt Janetzky and Bernhard Bruchle ; translated from the German by James Chater.</subfield>
502
+ </datafield>
503
+
504
+ <datafield tag=\"260\" ind1=\" \" ind2=\" \">
505
+ <subfield code=\"a\">London :</subfield>
506
+ <subfield code=\"b\">Batsford,</subfield>
507
+ <subfield code=\"c\">1988.</subfield>
508
+ </datafield>
509
+
510
+ <datafield tag=\"700\" ind1=\"1\" ind2=\" \">
511
+ <subfield code=\"a\">Brüchle, Bernhard.</subfield>
512
+ </datafield>
513
+ </record>"
514
+ end
515
+
516
+ describe Blacklight::Solr::Document::MarcExport do
517
+
518
+ before(:all) do
519
+ dclass = Class.new do
520
+ include Blacklight::Solr::Document::MarcExport
521
+ attr_accessor :to_marc
522
+ def initialize(marc_xml_str)
523
+ self.to_marc = marc_from_xml(marc_xml_str)
524
+ end
525
+ end
526
+
527
+ @typical_record = dclass.new( standard_citation )
528
+ @music_record = dclass.new( music_record )
529
+ @dissertation_record = dclass.new( dissertation_note_xml )
530
+ @record_without_245b = dclass.new( record1_xml )
531
+ @three_authors_record = dclass.new( three_authors_xml )
532
+ @record_without_authors = dclass.new( record2_xml )
533
+ @record_with_10plus_authors = dclass.new( record3_xml )
534
+ @year_range_record = dclass.new( year_range_xml )
535
+ @no_date_record = dclass.new( no_date_xml )
536
+ @section_title_record = dclass.new( section_title_xml )
537
+ @special_contributor_record = dclass.new( special_contributor_with_author_xml )
538
+ @record_without_citable_data = dclass.new( no_good_data_xml )
539
+ @record_with_bad_author = dclass.new( bad_author_xml )
540
+ @special_contributor_no_auth_record = dclass.new( special_contributor_no_author_xml )
541
+ @record_utf8_decomposed = dclass.new( utf8_decomposed_record_xml )
542
+
543
+ end
544
+
545
+ describe "export_as_chicago_citation_txt" do
546
+ it "should handle a typical record correclty" do
547
+ @typical_record.export_as_chicago_citation_txt.should == "Ferree, David C., and I. J Warrington. <i>Apples: Botany, Production, and Uses.</i> Oxon, U.K.: CABI Pub., 2003."
548
+ end
549
+ it "should format a record w/o authors correctly" do
550
+ @record_without_authors.export_as_chicago_citation_txt.should == "<i>Final Report to the Honorable John J. Gilligan, Governor.</i> [Columbus: Printed by the State of Ohio, Dept. of Urban Affairs, 1971."
551
+ end
552
+ it "should format a citation without a 245b field correctly" do
553
+ @record_without_245b.export_as_chicago_citation_txt.should == "Janetzky, Kurt., and Bernhard Brüchle. <i>The Horn.</i> London: Batsford, 1988."
554
+ end
555
+ it "should format a citation with 4+ authors correctly" do
556
+ chicago_text = @record_with_10plus_authors.export_as_chicago_citation_txt
557
+ chicago_text.should == "Greer, Lowell., Steven Lubin, Stephanie Chase, Johannes Brahms, Ludwig van Beethoven, Nikolaus von Krufft, John Doe, et al. <i>Music for Horn.</i> [United States]: Harmonia Mundi USA, 2001."
558
+ chicago_text.should match(/John Doe, et al\./)
559
+ chicago_text.should_not match(/Jane Doe/)
560
+ end
561
+ it "should handle dissertation data correctly" do
562
+ @dissertation_record.export_as_chicago_citation_txt.should == "<i>Thesis On Some Subject.</i> Phd Thesis -- Goodenough College, 2009."
563
+ end
564
+ it "should handle 3 authors correctly" do
565
+ @three_authors_record.export_as_chicago_citation_txt.should match(/^Doe, John, Joe Schmoe, and Bill Schmoe\./)
566
+ end
567
+ it "should handle editors, translators, and compilers correctly" do
568
+ @special_contributor_record.export_as_chicago_citation_txt.should == "Doe, John <i>Title of Item.</i> Translated by Joe Schmoe. Edited by Bill Schmoe. Compiled by Susie Schmoe. Publisher: Place, 2009."
569
+ end
570
+ it "should handle editors, translators, and compilers correctly when there is no author present" do
571
+ @special_contributor_no_auth_record.export_as_chicago_citation_txt.should == "Schmoe, Joe trans., Bill Schmoe ed., and Susie Schmoe comp. <i>Title of Item.</i> Publisher: Place, 2009."
572
+ end
573
+ it "should handle year ranges properly" do
574
+ @year_range_record.export_as_chicago_citation_txt.should_not match(/2000/)
575
+ end
576
+ it "should handle n.d. in the 260$c properly" do
577
+ @no_date_record.export_as_chicago_citation_txt.should match(/n\.d\.$/)
578
+ end
579
+ it "should handle section title appropriately" do
580
+ @section_title_record.export_as_chicago_citation_txt.should == "Schmoe, Joe <i>Main Title: Subtitle\.<\/i> Number of Part, <i>Name of Part\.<\/i> London: Batsford, 2001."
581
+ end
582
+ it "should not fail if there is no citation data" do
583
+ @record_without_citable_data.export_as_chicago_citation_txt.should == ""
584
+ end
585
+ end
586
+
587
+ describe "export_as_apa_citation_txt" do
588
+ it "should format a standard citation correctly" do
589
+ @typical_record.export_as_apa_citation_txt.should == "Ferree, D. C, &amp; Warrington, I. J. (2003). <i>Apples : botany, production, and uses.</i> Oxon, U.K.: CABI Pub."
590
+ end
591
+
592
+ it "should format a citation without a 245b field correctly" do
593
+ @record_without_245b.export_as_apa_citation_txt.should == "Janetzky, K., &amp; Brüchle, B. (1988). <i>The horn.</i> London: Batsford."
594
+ end
595
+
596
+ it "should format a citation without any authors correctly" do
597
+ @record_without_authors.export_as_apa_citation_txt.should == "(1971). <i>Final report to the Honorable John J. Gilligan, Governor.</i> [Columbus: Printed by the State of Ohio, Dept. of Urban Affairs."
598
+ end
599
+
600
+ it "should not fail if there is no citation data" do
601
+ @record_without_citable_data.export_as_apa_citation_txt.should == ""
602
+ end
603
+
604
+ it "should not bomb with a null pointer if there if author data is empty" do
605
+ @record_with_bad_author.export_as_apa_citation_txt.should == "Brüchle, B. (1988). <i>The horn.</i> London: Batsford."
606
+ end
607
+
608
+ end
609
+
610
+ describe "export_as_mla_citation_txt" do
611
+ it "should format a standard citation correctly" do
612
+ @typical_record.export_as_mla_citation_txt.should == "Ferree, David C, and I. J Warrington. <i>Apples : Botany, Production, and Uses.</i> Oxon, U.K.: CABI Pub., 2003."
613
+ end
614
+
615
+ it "should format a citation without a 245b field correctly" do
616
+ @record_without_245b.export_as_mla_citation_txt.should == "Janetzky, Kurt, and Bernhard Brüchle. <i>The Horn.</i> London: Batsford, 1988."
617
+ end
618
+
619
+ it "should format a citation without any authors correctly" do
620
+ @record_without_authors.export_as_mla_citation_txt.should == "<i>Final Report to the Honorable John J. Gilligan, Governor.</i> [Columbus: Printed by the State of Ohio, Dept. of Urban Affairs, 1971."
621
+ end
622
+
623
+ it "should format a citation with 4+ authors correctly" do
624
+ @record_with_10plus_authors.export_as_mla_citation_txt.should == "Greer, Lowell, et al. <i>Music for Horn.</i> [United States]: Harmonia Mundi USA, 2001."
625
+ end
626
+
627
+ it "should not fail if there is no citation data" do
628
+ @record_without_citable_data.export_as_mla_citation_txt.should == ""
629
+ end
630
+ end
631
+
632
+ describe "export_as_openurl_ctx_kev" do
633
+ it "should create the appropriate context object for books" do
634
+ record = @typical_record.export_as_openurl_ctx_kev('Book')
635
+ record.should match(/.*mtx%3Abook.*rft.genre=book.*rft.btitle=Apples\+%3A\+botany%2C\+production%2C\+and\+uses.*rft.aucorp=Bobs\+Your\+Uncle.*rft.date=c2003.*rft.place=Oxon%2C\+U.K.*rft.pub=CABI\+Pub.*rft.isbn=/) and
636
+ record.should_not match(/.*rft.genre=article.*rft.issn=.*/)
637
+ end
638
+ it "should create the appropriate context object for journals" do
639
+ record = @typical_record.export_as_openurl_ctx_kev('Journal')
640
+ record_journal_other = @typical_record.export_as_openurl_ctx_kev('Journal/Magazine')
641
+ record.should match(/.*mtx%3Ajournal.*rft.genre=article.*rft.title=Apples\+%3A\+botany%2C\+production%2C\+and\+uses.*rft.atitle=Apples\+%3A\+botany%2C\+production%2C\+and\+uses.*rft.aucorp=Bobs\+Your\+Uncle.*rft.date=c2003.*rft.issn=/) and
642
+ record_journal_other.should == record and
643
+ record.should_not match(/.*rft.genre=book.*rft.isbn=.*/)
644
+ end
645
+ it "should create the appropriate context object for other content" do
646
+ record = @typical_record.export_as_openurl_ctx_kev('NotARealFormat')
647
+ record.should match(/.*mtx%3Adc.*rft.title=Apples\+%3A\+botany%2C\+production%2C\+and\+uses.*rft.creator=.*rft.aucorp=Bobs\+Your\+Uncle.*rft.date=c2003.*rft.place=Oxon%2C\+U.K.*rft.pub=CABI\+Pub.*rft.format=notarealformat/) and
648
+ record.should_not match(/.*rft.isbn=.*/) and
649
+ record.should_not match(/.*rft.issn=.*/)
650
+ end
651
+ end
652
+
653
+ describe "export_as_marc binary" do
654
+ it "should export_as_marc" do
655
+ @typical_record.export_as_marc.should == @typical_record.to_marc.to_marc
656
+ end
657
+ end
658
+
659
+ describe "export_as_marcxml" do
660
+ it "should export_as_marcxml" do
661
+ marc_from_xml(@typical_record.export_as_marcxml).should == marc_from_xml(@typical_record.to_marc.to_xml.to_s)
662
+ end
663
+ end
664
+
665
+ describe "export_as_xml" do
666
+ it "should export marcxml as xml" do
667
+ marc_from_xml(@typical_record.export_as_xml).should == marc_from_xml(@typical_record.export_as_marcxml)
668
+ end
669
+ end
670
+
671
+ describe "export_as_refworks_marc_txt" do
672
+ it "should export correctly" do
673
+ @music_record.export_as_refworks_marc_txt.should == "LEADER 01828cjm a2200409 a 4500001 a4768316\n003 SIRSI\n007 sd fungnnmmned\n008 020117p20011990xxuzz h d\n245 00 Music for horn |h[sound recording] / |cBrahms, Beethoven, von Krufft.\n260 [United States] : |bHarmonia Mundi USA, |cp2001.\n700 1 Greer, Lowell.\n700 1 Lubin, Steven.\n700 1 Chase, Stephanie, |d1957-\n700 12 Brahms, Johannes, |d1833-1897. |tTrios, |mpiano, violin, horn, |nop. 40, |rE? major.\n700 12 Beethoven, Ludwig van, |d1770-1827. |tSonatas, |mhorn, piano, |nop. 17, |rF major.\n700 12 Krufft, Nikolaus von, |d1779-1818. |tSonata, |mhorn, piano, |rF major.\n"
674
+ end
675
+ describe "for UTF-8 record" do
676
+ it "should export in Unicode normalized C form" do
677
+ @utf8_exported = @record_utf8_decomposed.export_as_refworks_marc_txt
678
+
679
+ if defined? Unicode
680
+ @utf8_exported.should_not include("\314\204\312\273") # decomposed
681
+ @utf8_exported.should include("\304\253\312\273") # C-form normalized
682
+ end
683
+ end
684
+ end
685
+ end
686
+
687
+ describe "export_as_endnote" do
688
+ it "should export_correctly" do
689
+ endnote_file = @music_record.export_as_endnote
690
+ # We have to parse it a bit to check it.
691
+ endnote_entries = Hash.new {|hash, key| hash[key] = Set.new }
692
+ endnote_file.each_line do |line|
693
+ line =~ /\%(..?) (.*)$/
694
+ endnote_entries[$1] << $2
695
+ end
696
+
697
+ endnote_entries["0"].should == Set.new(["Generic"]) # I have no idea WHY this is correct, it is definitely not legal, but taking from earlier test for render_endnote in applicationhelper, the previous version of this. jrochkind.
698
+ endnote_entries["D"].should == Set.new(["p2001. "])
699
+ endnote_entries["C"].should == Set.new(["[United States] : "])
700
+ endnote_entries["E"].should == Set.new(["Greer, Lowell. ", "Lubin, Steven. ", "Chase, Stephanie, ", "Brahms, Johannes, ", "Beethoven, Ludwig van, ", "Krufft, Nikolaus von, "])
701
+ endnote_entries["I"].should == Set.new(["Harmonia Mundi USA, "])
702
+ endnote_entries["T"].should == Set.new(["Music for horn "])
703
+
704
+ #nothing extra
705
+ Set.new(endnote_entries.keys).should == Set.new(["0", "C", "D", "E", "I", "T"])
706
+ end
707
+ end
708
+
709
+ describe "Citation title transformation" do
710
+ before(:each) do
711
+ class CitationTitleTest
712
+ include Blacklight::Solr::Document::MarcExport
713
+ def transform_title(text)
714
+ citation_title(text)
715
+ end
716
+ end
717
+ @citation_title = CitationTitleTest.new
718
+ end
719
+ it "should tranform a normal title properlly" do
720
+ @citation_title.transform_title("This is just a test").should == "This Is Just a Test"
721
+ end
722
+ it "should not attempt to capatilize words in all-caps (e.g. acronyms)" do
723
+ @citation_title.transform_title("IBM PC applications").should == "IBM PC Applications"
724
+ end
725
+ it "should capitalize a preposition if it is the first word in a title" do
726
+ @citation_title.transform_title("of mice and men").should == "Of Mice and Men"
727
+ end
728
+ it "should handle hyphenated words properly" do
729
+ @citation_title.transform_title("Testing hyphenated-words and how they get capitalized").should == "Testing Hyphenated-Words and How They Get Capitalized"
730
+ end
731
+ it "should handle normal prepositions properly" do
732
+ @citation_title.transform_title("A little learning is a dangerous thing").should == "A Little Learning Is a Dangerous Thing"
733
+ @citation_title.transform_title("Four theories concerning the Gospel according to Matthew").should == "Four Theories Concerning the Gospel According to Matthew"
734
+ @citation_title.transform_title("Tired but happy").should == "Tired but Happy"
735
+ @citation_title.transform_title("Mnemonics that work are better than rules that do not").should == "Mnemonics That Work Are Better Than Rules That Do Not"
736
+ @citation_title.transform_title("This is just a test").should == "This Is Just a Test"
737
+ @citation_title.transform_title("the mind of the Renaissance").should == "The Mind of the Renaissance"
738
+ @citation_title.transform_title("Are you considering psychoanalysis?").should == "Are You Considering Psychoanalysis?"
739
+ @citation_title.transform_title("Not without laughter").should == "Not without Laughter"
740
+ end
741
+ end
742
+
743
+ end