spec/unit/document_spec.rb in om-1.8.1 vs spec/unit/document_spec.rb in om-1.9.0.pre1
- old
+ new
@@ -1,28 +1,28 @@
require 'spec_helper'
describe "OM::XML::Document" do
-
+
before(:all) do
- # ModsHelpers.name_("Beethoven, Ludwig van", :date=>"1770-1827", :role=>"creator")
- class DocumentTest
+ #ModsHelpers.name_("Beethoven, Ludwig van", :date=>"1770-1827", :role=>"creator")
+ class DocumentTest
- include OM::XML::Document
-
- # Could add support for multiple root declarations.
+ include OM::XML::Document
+
+ # Could add support for multiple root declarations.
# For now, assume that any modsCollections have already been broken up and fed in as individual mods documents
- # root :mods_collection, :path=>"modsCollection",
+ # root :mods_collection, :path=>"modsCollection",
# :attributes=>[],
# :subelements => :mods
-
+
set_terminology do |t|
t.root(:path=>"mods", :xmlns=>"http://www.loc.gov/mods/v3", :schema=>"http://www.loc.gov/standards/mods/v3/mods-3-2.xsd")
t.title_info(:path=>"titleInfo") {
t.main_title(:path=>"title", :label=>"title")
t.language(:path=>{:attribute=>"lang"})
- }
+ }
# This is a mods:name. The underscore is purely to avoid namespace conflicts.
t.name_ {
# this is a namepart
t.namePart(:index_as=>[:searchable, :displayable, :facetable, :sortable], :required=>:true, :type=>:string, :label=>"generic name")
# affiliations are great
@@ -34,11 +34,11 @@
t.last_name(:path=>"namePart", :attributes=>{:type=>"family"})
t.first_name(:path=>"namePart", :attributes=>{:type=>"given"}, :label=>"first name")
t.terms_of_address(:path=>"namePart", :attributes=>{:type=>"termsOfAddress"})
t.person_id(:path=>"namePart", :attributes=>{:type=>:none})
}
- # lookup :person, :first_name
+ # lookup :person, :first_name
t.person(:ref=>:name, :attributes=>{:type=>"personal"})
t.role {
t.text(:path=>"roleTerm",:attributes=>{:type=>"text"})
t.code(:path=>"roleTerm",:attributes=>{:type=>"code"})
@@ -57,105 +57,106 @@
# t.start_page(:path=>"extent", :attributes=>{:unit=>"pages"}, :default_content_path => "start")
# t.end_page(:path=>"extent", :attributes=>{:unit=>"pages"}, :default_content_path => "end")
t.publication_date(:path=>"date")
}
end
-
+
end
-
+
end
-
+
before(:each) do
@fixturemods = DocumentTest.from_xml( fixture( File.join("CBF_MODS", "ARS0025_016.xml") ) )
article_xml = fixture( File.join("mods_articles", "hydrangea_article1.xml") )
@mods_article = DocumentTest.from_xml(article_xml)
end
-
+
after(:all) do
Object.send(:remove_const, :DocumentTest)
end
-
+
it "should automatically include the necessary modules" do
- expect(DocumentTest.included_modules).to include(OM::XML::Container)
- expect(DocumentTest.included_modules).to include(OM::XML::TermValueOperators)
- expect(DocumentTest.included_modules).to include(OM::XML::Validation)
+ DocumentTest.included_modules.should include(OM::XML::Container)
+ DocumentTest.included_modules.should include(OM::XML::TermValueOperators)
+ DocumentTest.included_modules.should include(OM::XML::Validation)
end
-
+
describe ".ox_namespaces" do
it "should merge terminology namespaces with document namespaces" do
- expect(@fixturemods.ox_namespaces).to eq({"oxns"=>"http://www.loc.gov/mods/v3", "xmlns:ns2"=>"http://www.w3.org/1999/xlink", "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance", "xmlns:ns3"=>"http://www.loc.gov/mods/v3", "xmlns"=>"http://www.loc.gov/mods/v3"})
+ @fixturemods.ox_namespaces.should == {"oxns"=>"http://www.loc.gov/mods/v3", "xmlns:ns2"=>"http://www.w3.org/1999/xlink", "xmlns:xsi"=>"http://www.w3.org/2001/XMLSchema-instance", "xmlns:ns3"=>"http://www.loc.gov/mods/v3", "xmlns"=>"http://www.loc.gov/mods/v3"}
end
end
-
-
+
+
describe ".find_by_terms_and_value" do
it "should fail gracefully if you try to look up nodes for an undefined property" do
- skip "better to get an informative error?"
- expect(@fixturemods.find_by_terms_and_value(:nobody_home)).to eq([])
+ pending "better to get an informative error?"
+ @fixturemods.find_by_terms_and_value(:nobody_home).should == []
end
it "should use Nokogiri to retrieve a NodeSet corresponding to the term pointers" do
- expect(@mods_article.find_by_terms_and_value( :person ).length).to eq(2)
+ @mods_article.find_by_terms_and_value( :person ).length.should == 2
end
it "should allow you to search by term pointer" do
- expect(@fixturemods.ng_xml).to receive(:xpath).with('//oxns:name[@type="personal"]', @fixturemods.ox_namespaces)
+ @fixturemods.ng_xml.should_receive(:xpath).with('//oxns:name[@type="personal"]', @fixturemods.ox_namespaces)
@fixturemods.find_by_terms_and_value(:person)
end
it "should allow you to constrain your searches" do
- expect(@fixturemods.ng_xml).to receive(:xpath).with('//oxns:name[@type="personal" and contains(., "Beethoven, Ludwig van")]', @fixturemods.ox_namespaces)
+ @fixturemods.ng_xml.should_receive(:xpath).with('//oxns:name[@type="personal" and contains(., "Beethoven, Ludwig van")]', @fixturemods.ox_namespaces)
@fixturemods.find_by_terms_and_value(:person, "Beethoven, Ludwig van")
end
it "should allow you to use complex constraints" do
- expect(@fixturemods.ng_xml).to receive(:xpath).with('//oxns:name[@type="personal"]/oxns:namePart[@type="date" and contains(., "2010")]', @fixturemods.ox_namespaces)
+ @fixturemods.ng_xml.should_receive(:xpath).with('//oxns:name[@type="personal"]/oxns:namePart[@type="date" and contains(., "2010")]', @fixturemods.ox_namespaces)
@fixturemods.find_by_terms_and_value(:person, :date=>"2010")
- expect(@fixturemods.ng_xml).to receive(:xpath).with('//oxns:name[@type="personal"]/oxns:role[contains(., "donor")]', @fixturemods.ox_namespaces)
+
+ @fixturemods.ng_xml.should_receive(:xpath).with('//oxns:name[@type="personal"]/oxns:role[contains(., "donor")]', @fixturemods.ox_namespaces)
@fixturemods.find_by_terms_and_value(:person, :role=>"donor")
end
end
describe ".find_by_terms" do
it "should use Nokogiri to retrieve a NodeSet corresponding to the combination of term pointers and array/nodeset indexes" do
- expect(@mods_article.find_by_terms( :person ).length).to eq(2)
- expect(@mods_article.find_by_terms( {:person=>1} ).first).to eq(@mods_article.ng_xml.xpath('//oxns:name[@type="personal"][2]', "oxns"=>"http://www.loc.gov/mods/v3").first)
- expect(@mods_article.find_by_terms( {:person=>1}, :first_name ).class).to eq(Nokogiri::XML::NodeSet)
- expect(@mods_article.find_by_terms( {:person=>1}, :first_name ).first.text).to eq("Siddartha")
+ @mods_article.find_by_terms( :person ).length.should == 2
+ @mods_article.find_by_terms( {:person=>1} ).first.should == @mods_article.ng_xml.xpath('//oxns:name[@type="personal"][2]', "oxns"=>"http://www.loc.gov/mods/v3").first
+ @mods_article.find_by_terms( {:person=>1}, :first_name ).class.should == Nokogiri::XML::NodeSet
+ @mods_article.find_by_terms( {:person=>1}, :first_name ).first.text.should == "Siddartha"
end
it "should find a NodeSet where a terminology attribute has been set to :none" do
- expect(@mods_article.find_by_terms( {:person=>1}, :person_id).first.text).to eq("123987")
+ @mods_article.find_by_terms( {:person=>1}, :person_id).first.text.should == "123987"
end
it "should support accessors whose relative_xpath is a lookup array instead of an xpath string" do
# pending "this only impacts scenarios where we want to display & edit"
- expect(DocumentTest.terminology.retrieve_term(:title_info, :language).path).to eq({:attribute=>"lang"})
+ DocumentTest.terminology.retrieve_term(:title_info, :language).path.should == {:attribute=>"lang"}
# @sample.retrieve( :title, 1 ).first.text.should == "Artikkelin otsikko Hydrangea artiklan 1"
- expect(@mods_article.find_by_terms( {:title_info=>1}, :language ).first.text).to eq("finnish")
+ @mods_article.find_by_terms( {:title_info=>1}, :language ).first.text.should == "finnish"
end
-
+
it "should support xpath queries as the pointer" do
- expect(@mods_article.find_by_terms('//oxns:name[@type="personal"][1]/oxns:namePart[1]').first.text).to eq("FAMILY NAME")
+ @mods_article.find_by_terms('//oxns:name[@type="personal"][1]/oxns:namePart[1]').first.text.should == "FAMILY NAME"
end
-
+
it "should return nil if the xpath fails to generate" do
- skip "Can't decide if it's better to return nil or raise an error. Choosing informative errors for now."
- expect(@mods_article.find_by_terms( {:foo=>20}, :bar )).to eq(nil)
+ pending "Can't decide if it's better to return nil or raise an error. Choosing informative errors for now."
+ @mods_article.find_by_terms( {:foo=>20}, :bar ).should == nil
end
-
+
it "should support terms that point to attributes instead of nodes" do
- expect(@mods_article.find_by_terms( {:title_info=>1}, :language ).first.text).to eq("finnish")
+ @mods_article.find_by_terms( {:title_info=>1}, :language ).first.text.should == "finnish"
end
it "should support xpath queries as the pointer" do
- expect(@mods_article.find_by_terms('//oxns:name[@type="personal"][1]/oxns:namePart[1]').first.text).to eq("FAMILY NAME")
+ @mods_article.find_by_terms('//oxns:name[@type="personal"][1]/oxns:namePart[1]').first.text.should == "FAMILY NAME"
end
end
-
+
describe "node_exists?" do
it "should return true if any nodes are found" do
- expect(@mods_article.node_exists?( {:person=>1}, :first_name)).to be_truthy
+ @mods_article.node_exists?( {:person=>1}, :first_name).should be_true
end
it "should return false if no nodes are found" do
- expect(@mods_article.node_exists?( {:person=>8}, :first_name )).to be_falsey
+ @mods_article.node_exists?( {:person=>8}, :first_name ).should be_false
end
it "should support xpath queries" do
- expect(@mods_article.node_exists?('//oxns:name[@type="personal"][1]/oxns:namePart[1]')).to be_truthy
+ @mods_article.node_exists?('//oxns:name[@type="personal"][1]/oxns:namePart[1]').should be_true
end
end
-
+
end