spec/rpub/epub/content_spec.rb in rpub-0.4.0 vs spec/rpub/epub/content_spec.rb in rpub-0.5.0
- old
+ new
@@ -1,76 +1,97 @@
-require 'spec_helper'
-
describe Rpub::Epub::Content do
+ let(:config) do
+ OpenStruct.new({
+ 'creator' => 'anonymous',
+ 'title' => 'title',
+ 'language' => 'en',
+ 'publisher' => 'none',
+ 'description' => 'foo bar',
+ 'subject' => 'baz qux',
+ 'rights' => 'copyright',
+ 'cover_image' => 'image.jpg'
+ })
+ end
let(:book) do
double('book', {
- :creator => 'anonymous',
- :title => 'title',
- :language => 'en',
- :publisher => 'none',
- :description => 'foo bar',
- :subject => 'baz qux',
- :rights => 'copyright',
- :uid => 'abcd',
- :has_cover? => false,
- :has_fonts? => false,
- :has_toc? => false,
- :images => [],
- :chapters => []
+ :config => config,
+ :uid => 'abcd',
+ :has_cover? => false,
+ :has_fonts? => false,
+ :has_toc? => false,
+ :images => [],
+ :chapters => []
})
end
let(:subject) { described_class.new(book).render }
def self.it_should_have_metadata(name, value, options = {})
attr = options.inject('') do |str, (k, v)|
str << "[@#{k}=\"#{v}\"]"
end
- it { should have_xpath(%Q{/xmlns:package/xmlns:metadata/dc:#{name}[text()="#{value}"]#{attr}}, 'dc' => 'http://purl.org/dc/elements/1.1/', 'xmlns' => 'http://www.idpf.org/2007/opf') }
+ it { is_expected.to have_xpath(%Q{/xmlns:package/xmlns:metadata/dc:#{name}[text()="#{value}"]#{attr}}, 'dc' => 'http://purl.org/dc/elements/1.1/', 'xmlns' => 'http://www.idpf.org/2007/opf') }
end
context 'with an empty book' do
- it { should have_xpath('/xmlns:package[@unique-identifier="BookId"][@version="2.0"]') }
- it { should have_xpath('/xmlns:package[@unique-identifier="BookId"][@version="2.0"]') }
+ it { is_expected.to have_xpath('/xmlns:package[@unique-identifier="BookId"][@version="2.0"]') }
+ it { is_expected.to have_xpath('/xmlns:package[@unique-identifier="BookId"][@version="2.0"]') }
- it_should_have_metadata 'title', "title"
- it_should_have_metadata 'creator', "anonymous", 'xmlns:role' => 'aut'
- it_should_have_metadata 'publisher', "none"
- it_should_have_metadata 'subject', "baz qux"
- it_should_have_metadata 'identifier', "abcd", :id => 'BookId'
- it_should_have_metadata 'rights', "copyright"
+ it_should_have_metadata 'title', "title"
+ it_should_have_metadata 'creator', "anonymous", 'xmlns:role' => 'aut'
+ it_should_have_metadata 'publisher', "none"
+ it_should_have_metadata 'subject', "baz qux"
+ it_should_have_metadata 'identifier', "abcd", :id => 'BookId'
+ it_should_have_metadata 'rights', "copyright"
it_should_have_metadata 'description', "foo bar"
end
context 'when the book has a cover' do
- before { book.stub! :has_cover? => true, :cover_image => 'foo.jpg' }
- it { should have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="cover"][@href="cover.html"][@media-type="application/xhtml+xml"]') }
- it { should have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="cover-image"][@href="foo.jpg"][@media-type="image/jpeg"]') }
- it { should have_xpath('/xmlns:package/xmlns:metadata/xmlns:meta[@name="cover"][@content="cover-image"]') }
- it { should have_xpath('/xmlns:package/xmlns:guide/xmlns:reference[@type="cover"][@title="Cover"][@href="cover.html"]') }
- it { should have_xpath('/xmlns:package/xmlns:spine[@toc="ncx"]/xmlns:itemref[@idref="cover"][@linear="no"]') }
+ before do
+ allow(book).to receive(:has_cover?).and_return(true)
+ allow(config).to receive(:cover_image).and_return('foo.jpg')
+ end
+
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="cover"][@href="cover.html"][@media-type="application/xhtml+xml"]') }
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="cover-image"][@href="foo.jpg"][@media-type="image/jpeg"]') }
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:metadata/xmlns:meta[@name="cover"][@content="cover-image"]') }
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:guide/xmlns:reference[@type="cover"][@title="Cover"][@href="cover.html"]') }
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:spine[@toc="ncx"]/xmlns:itemref[@idref="cover"][@linear="no"]') }
end
context 'when the book has embedded fonts' do
- before { book.stub! :has_fonts? => true, :fonts => ['font.otf'] }
- it { should have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="font.otf"][@href="font.otf"][@media-type="font/opentype"]') }
+ before do
+ allow(book).to receive(:has_fonts?).and_return(true)
+ allow(book).to receive(:fonts).and_return(['font.otf'])
+ end
+
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="font.otf"][@href="font.otf"][@media-type="font/opentype"]') }
end
context 'when the book has a ToC' do
- before { book.stub! :has_toc? => true }
- it { should have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="toc"][@href="toc.html"][@media-type="application/xhtml+xml"]') }
- it { should have_xpath('/xmlns:package/xmlns:guide/xmlns:reference[@type="toc"][@title="Table of Contents"][@href="toc.html"]') }
+ before do
+ allow(book).to receive(:has_toc?).and_return(true)
+ end
+
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="toc"][@href="toc.html"][@media-type="application/xhtml+xml"]') }
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:guide/xmlns:reference[@type="toc"][@title="Table of Contents"][@href="toc.html"]') }
end
context 'when the book has images' do
- before { book.stub! :images => ['foo.png', 'bar.gif'] }
- it { should have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="foo.png"][@href="foo.png"][@media-type="image/png"]') }
- it { should have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="bar.gif"][@href="bar.gif"][@media-type="image/gif"]') }
+ before do
+ allow(book).to receive(:images).and_return(['foo.png', 'bar.gif'])
+ end
+
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="foo.png"][@href="foo.png"][@media-type="image/png"]') }
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="bar.gif"][@href="bar.gif"][@media-type="image/gif"]') }
end
context 'when the book has chapters' do
let(:chapter) { double('chapter', :filename => 'chapter.html', :xml_id => 'chapter1') }
- before { book.stub! :chapters => [chapter] }
- it { should have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="chapter1"][@href="chapter.html"][@media-type="application/xhtml+xml"]') }
- it { should have_xpath('/xmlns:package/xmlns:spine[@toc="ncx"]/xmlns:itemref[@idref="chapter1"]') }
+ before do
+ allow(book).to receive(:chapters).and_return([chapter])
+ end
+
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:manifest/xmlns:item[@id="chapter1"][@href="chapter.html"][@media-type="application/xhtml+xml"]') }
+ it { is_expected.to have_xpath('/xmlns:package/xmlns:spine[@toc="ncx"]/xmlns:itemref[@idref="chapter1"]') }
end
end