# encoding: UTF-8
require 'spec_helper'
describe "Searchworks mixin for Stanford::Mods::Record" do
before(:all) do
@smods_rec = Stanford::Mods::Record.new
@ns_decl = "xmlns='#{Mods::MODS_NS}'"
end
context "languages" do
it "should use the SearchWorks controlled vocabulary" do
m = "per ara, dut"
@smods_rec.from_str m
langs = @smods_rec.sw_language_facet
langs.size.should == 3
langs.should include("Persian")
langs.should include("Arabic")
langs.should include("Dutch")
langs.should_not include("Dutch; Flemish")
end
it "should not have duplicates" do
m = "engEnglish"
@smods_rec.from_str m
langs = @smods_rec.sw_language_facet
langs.size.should == 1
langs.should include("English")
end
end
context "sw author methods" do
before(:all) do
m = "
John
Huston
q
Crusty The Clown
1990-
Watchful Eye
1850-
Exciting Prints
plain
conference
family
JerkThe
"
@smods_rec.from_str(m)
end
it "main author (for author_1xx_search)" do
@smods_rec.should_receive(:main_author_w_date) # in stanford-mods.rb
@smods_rec.sw_main_author
end
it "additional authors (for author_7xx_search)" do
@smods_rec.should_receive(:additional_authors_w_dates) # in stanford-mods.rb
@smods_rec.sw_addl_authors
end
it "person authors (for author_person_facet, author_person_display)" do
@smods_rec.should_receive(:personal_names_w_dates) # in Mods gem
@smods_rec.sw_person_authors
end
it "non-person authors (for author_other_facet)" do
@smods_rec.sw_impersonal_authors.should == ['Watchful Eye, 1850-', 'Exciting Prints', 'plain', 'conference', 'family']
end
it "corporate authors (for author_corp_display)" do
@smods_rec.sw_corporate_authors.should == ['Watchful Eye, 1850-', 'Exciting Prints']
end
it "meeting authors (for author_meeting_display)" do
@smods_rec.sw_meeting_authors.should == ['conference']
end
context "sort author" do
it "should be a String" do
@smods_rec.sw_sort_author.should == 'qJerk'
end
it "should include the main author, as retrieved by :main_author_w_date" do
@smods_rec.should_receive(:main_author_w_date) # in stanford-mods.rb
@smods_rec.sw_sort_author
end
it "should append the sort title, as retrieved by :sort_title" do
@smods_rec.should_receive(:sort_title) # in Mods gem
@smods_rec.sw_sort_author
end
it "should not begin or end with whitespace" do
@smods_rec.sw_sort_author.should == @smods_rec.sw_sort_author.strip
end
it "should substitute the java Character.MAX_CODE_POINT for nil main_author so missing main authors sort last" do
r = Stanford::Mods::Record.new
r.from_str "Jerk"
r.sw_sort_author.should =~ / Jerk$/
r.sw_sort_author.should match("\u{FFFF}")
r.sw_sort_author.should match("\xEF\xBF\xBF")
end
it "should not have any punctuation marks" do
r = Stanford::Mods::Record.new
r.from_str "J,e.r;;;k"
r.sw_sort_author.should =~ / Jerk$/
end
end
end # context sw author methods
context "sw title methods" do
before(:all) do
m = "JerkA Tale of TourettesThe"
@smods_rec.from_str m
end
context "short title (for title_245a_search, title_245a_display) " do
it "should call :short_titles" do
@smods_rec.should_receive(:short_titles) # in Mods gem
@smods_rec.sw_short_title
end
it "should be a String" do
@smods_rec.sw_short_title.should == 'The Jerk'
end
end
context "full title (for title_245_search, title_display, title_full_display)" do
it "should call :full_titles" do
@smods_rec.should_receive(:full_titles) # in Mods gem
@smods_rec.sw_full_title
end
it "should be a String" do
@smods_rec.sw_full_title.should == 'The Jerk A Tale of Tourettes'
end
it 'should escape regex characters in the sw_short_title' do
m = "
Pius V. Saint, [Michaele Gisleri),
"
@smods_rec.from_str m
@smods_rec.sw_full_title.should == 'Pius V. Saint, [Michaele Gisleri),'
end
end
context "additional titles (for title_variant_search)" do
before(:all) do
m = "
Alternative
JerkThe
Joke
"
@smods_rec.from_str(m)
@addl_titles = @smods_rec.sw_addl_titles
end
it "should not include the main title" do
@addl_titles.size.should == 2
@addl_titles.should_not include(@smods_rec.sw_full_title)
end
it "should include any extra main titles" do
@addl_titles.should include('Joke')
end
it "should include all alternative titles" do
@addl_titles.should include('Alternative')
end
it 'shold escape the short title in the regexp' do
m = "
Alternative
[Jerk)The
Joke]
"
@smods_rec.from_str(m)
@addl_titles = @smods_rec.sw_addl_titles
end
end
context "sort title" do
it "should be a String" do
@smods_rec.sw_sort_title.should be_an_instance_of(String)
end
it "should use the sort title, as retrieved by :sort_title" do
@smods_rec.should_receive(:sort_title) # in Mods gem
@smods_rec.sw_sort_title
end
it "should not begin or end with whitespace" do
m = "
Jerk
"
@smods_rec.from_str(m)
@smods_rec.sw_sort_title.should == @smods_rec.sw_sort_title.strip
end
it "should not have any punctuation marks" do
r = Stanford::Mods::Record.new
r.from_str "J,e.r;;;k"
r.sw_sort_title.should =~ /^Jerk$/
end
end
end # content sw title methods
end