spec/alexandria/library_spec.rb in alexandria-book-collection-manager-0.7.3 vs spec/alexandria/library_spec.rb in alexandria-book-collection-manager-0.7.4

- old
+ new

@@ -2,92 +2,96 @@ # This file is part of Alexandria. # # See the file README.md for authorship and licensing information. -require 'spec_helper' +require "spec_helper" describe Alexandria::Library do let(:loader) { Alexandria::LibraryStore.new(TESTDIR) } - describe '::EXT' do - it 'has symbolic references to file extensions' do + describe "::EXT" do + it "has symbolic references to file extensions" do extensions = Alexandria::Library::EXT expect(extensions[:book]).not_to be_nil expect(extensions[:cover]).not_to be_nil end end - describe '#valid_isbn?' do - it 'returns a true value for valid isbns' do - for x in ['014143984X', '0-345-43192-8'] - expect(Alexandria::Library.valid_isbn?(x)).to be_truthy + describe "#valid_isbn?" do + it "returns a true value for valid isbns" do + ["014143984X", "0-345-43192-8"].each do |x| + expect(described_class.valid_isbn?(x)).to be_truthy end end end - describe '#valid_ean?' do - it 'returns a true value for valid EANs' do - expect(Alexandria::Library.valid_ean?('9780345431929')).to be_truthy - expect(Alexandria::Library.valid_ean?('978034543192912345')).to be_truthy + describe "#valid_ean?" do + it "returns a true value for valid EANs" do + expect(described_class.valid_ean?("9780345431929")).to be_truthy + expect(described_class.valid_ean?("978034543192912345")).to be_truthy # Regression test: this EAN has a checksum of 10, which should be # treated like a checksum of 0. - expect(Alexandria::Library.valid_ean?('9784047041790')).to be_truthy + expect(described_class.valid_ean?("9784047041790")).to be_truthy end - it 'returns a false value for invalid EANs' do - expect(Alexandria::Library.valid_ean?('780345431929')).to be_falsey - expect(Alexandria::Library.valid_ean?('97803454319290')).to be_falsey - expect(Alexandria::Library.valid_ean?('97803454319291234')).to be_falsey - expect(Alexandria::Library.valid_ean?('9780345431929123456')).to be_falsey - expect(Alexandria::Library.valid_ean?('9780345431928')).to be_falsey - expect(Alexandria::Library.valid_ean?('9780345431929A')).to be_falsey + it "returns a false value for invalid EANs" do + expect(described_class.valid_ean?("780345431929")).to be_falsey + expect(described_class.valid_ean?("97803454319290")).to be_falsey + expect(described_class.valid_ean?("97803454319291234")).to be_falsey + expect(described_class.valid_ean?("9780345431929123456")).to be_falsey + expect(described_class.valid_ean?("9780345431928")).to be_falsey + expect(described_class.valid_ean?("9780345431929A")).to be_falsey - expect(Alexandria::Library.valid_ean?('9784047041791')).to be_falsey + expect(described_class.valid_ean?("9784047041791")).to be_falsey end end - describe '#valid_upc?' do - it 'returns a true value for valid UPCs' do - expect(Alexandria::Library.valid_upc?('97803454319312356')).to be_truthy + describe "#valid_upc?" do + it "returns a true value for valid UPCs" do + expect(described_class.valid_upc?("97803454319312356")).to be_truthy end - it 'returns a false value for invalid UPCs' do - expect(Alexandria::Library.valid_upc?('978034543193123567')).to be_falsey - expect(Alexandria::Library.valid_upc?('9780345431931235')).to be_falsey + it "returns a false value for invalid UPCs" do + expect(described_class.valid_upc?("978034543193123567")).to be_falsey + expect(described_class.valid_upc?("9780345431931235")).to be_falsey - expect(Alexandria::Library.valid_upc?('97803454319412356')).to be_falsey - expect(Alexandria::Library.valid_upc?('97803454319212356')).to be_falsey + expect(described_class.valid_upc?("97803454319412356")).to be_falsey + expect(described_class.valid_upc?("97803454319212356")).to be_falsey end end - describe '#canonicalise_isbn' do - it 'returns the correct value for several examples' do - expect(Alexandria::Library.canonicalise_isbn('014143984X')).to eq '014143984X' - expect(Alexandria::Library.canonicalise_isbn('0-345-43192-8')).to eq '0345431928' - expect(Alexandria::Library.canonicalise_isbn('3522105907')).to eq '3522105907' + describe "#canonicalise_isbn" do + it "returns the correct value for several examples" do + expect(described_class.canonicalise_isbn("014143984X")).to eq "014143984X" + expect(described_class.canonicalise_isbn("0-345-43192-8")).to eq "0345431928" + expect(described_class.canonicalise_isbn("3522105907")).to eq "3522105907" # EAN number - expect(Alexandria::Library.canonicalise_isbn('9780345431929')).to eq '0345431928' + expect(described_class.canonicalise_isbn("9780345431929")).to eq "0345431928" end end - context 'with an empty library' do - let(:my_library) { loader.load_library('Empty') } + context "with an empty library" do + let(:my_library) { loader.load_library("Empty") } - before(:each) do + before do FileUtils.mkdir(TESTDIR) unless File.exist? TESTDIR end - it 'disallows multiple deletion of the same copy of a book' do + after do + FileUtils.rm_rf(TESTDIR) + end + + it "disallows multiple deletion of the same copy of a book" do first_copy = an_artist_of_the_floating_world my_library << first_copy my_library.delete(first_copy) expect { my_library.delete(first_copy) }.to raise_error ArgumentError end - it 'allows multiple copies of a book to be added and deleted in turn' do + it "allows multiple copies of a book to be added and deleted in turn" do first_copy = an_artist_of_the_floating_world my_library << first_copy my_library.delete(first_copy) second_copy = an_artist_of_the_floating_world @@ -95,83 +99,83 @@ third_copy = an_artist_of_the_floating_world my_library << third_copy expect { my_library.delete(second_copy) }.not_to raise_error end - - after(:each) do - FileUtils.rm_rf(TESTDIR) - end end - describe '.import_as_isbn_list' do + describe ".import_as_isbn_list" do def __test_fake_import_isbns libraries = Alexandria::LibraryCollection.instance - library = Alexandria::Library.new('Test Library') + library = Alexandria::Library.new("Test Library") libraries.add_library(library) [library, libraries] end it "doesn't work quite yet" do skip # Doesn't work quite yet. on_iterate_cb = proc {} on_error_cb = proc {} library, _libraries = __test_fake_import_isbns - test_file = 'data/isbns.txt' - library.import_as_isbn_list('Test Library', test_file, on_iterate_cb, on_error_cb) + test_file = "data/isbns.txt" + library.import_as_isbn_list("Test Library", test_file, on_iterate_cb, on_error_cb) end end - context 'imported from 0.6.1 data files' do - before(:each) do - lib_version = File.join(LIBDIR, '0.6.1') + context "when importing from 0.6.1 data files" do + before do + lib_version = File.join(LIBDIR, "0.6.1") FileUtils.cp_r(lib_version, TESTDIR) end - it 'imports cleanly from version 0.6.1 data format' do + after do + FileUtils.rm_rf(TESTDIR) + end + + it "imports cleanly from version 0.6.1 data format" do libs = loader.load_all_libraries expect(libs.size).to eq(1) my_library = libs[0] expect(my_library.size).to eq(3) # Malory - malory_book = my_library.select { |b| b.isbn == '9780192812179' }[0] - expect(malory_book.publisher).to eq('Oxford University Press') - expect(malory_book.authors.include?('Vinaver')).to be_truthy + malory_book = my_library.select { |b| b.isbn == "9780192812179" }[0] + expect(malory_book.publisher).to eq("Oxford University Press") + expect(malory_book.authors.include?("Vinaver")).to be_truthy expect(malory_book.version).to eq(Alexandria::DATA_VERSION) # Guide to LaTeX - latex_book = my_library.select { |b| b.title.include? 'Latex' }[0] - expect(latex_book.isbn).to eq('9780201398250') - expect(latex_book.publisher).to eq('Addison Wesley') # note, no Ruby-Amazon cruft + latex_book = my_library.select { |b| b.title.include? "Latex" }[0] + expect(latex_book.isbn).to eq("9780201398250") + expect(latex_book.publisher).to eq("Addison Wesley") # note, no Ruby-Amazon cruft end - - after(:each) do - FileUtils.rm_rf(TESTDIR) - end end - context 'imported from 0.6.1 with books without an ISBN' do - before(:each) do - lib_version = File.join(LIBDIR, '0.6.1-noisbn') + context "when importing from 0.6.1 with books without an ISBN" do + before do + lib_version = File.join(LIBDIR, "0.6.1-noisbn") FileUtils.cp_r(lib_version, TESTDIR) end - it 'allows books to have no ISBN' do + after do + FileUtils.rm_rf(TESTDIR) + end + + it "allows books to have no ISBN" do libs = loader.load_all_libraries expect(libs.size).to eq(1) my_library = libs[0] expect(my_library.size).to eq(2) # Guide to LaTeX - latex_book = my_library.select { |b| b.title.include? 'Latex' }[0] - expect(latex_book.isbn).to eq('9780201398250') - expect(latex_book.publisher).to eq('Addison Wesley') # note, no Ruby-Amazon cruft + latex_book = my_library.select { |b| b.title.include? "Latex" }[0] + expect(latex_book.isbn).to eq("9780201398250") + expect(latex_book.publisher).to eq("Addison Wesley") # note, no Ruby-Amazon cruft expect(latex_book.version).to eq(Alexandria::DATA_VERSION) # Lex and Yacc - lex_and_yacc_book = my_library.select { |b| b.title.include? 'Lex' }[0] + lex_and_yacc_book = my_library.select { |b| b.title.include? "Lex" }[0] expect(lex_and_yacc_book.publisher).to eq("O'Reilley") my_library.each do |book| my_library.save(book, true) end @@ -179,44 +183,40 @@ libraries_reloaded = loader.load_all_libraries my_library_reloaded = libraries_reloaded[0] expect(my_library_reloaded.size).to eq(2) - latex_book = my_library_reloaded.select { |b| b.title.include? 'Latex' }[0] + latex_book = my_library_reloaded.select { |b| b.title.include? "Latex" }[0] expect(latex_book).not_to be_nil - expect(latex_book.publisher).to eq('Addison Wesley') + expect(latex_book.publisher).to eq("Addison Wesley") - lex_and_yacc_book = my_library_reloaded.select { |b| b.title.include? 'Lex' }[0] + lex_and_yacc_book = my_library_reloaded.select { |b| b.title.include? "Lex" }[0] expect(lex_and_yacc_book).not_to be_nil expect(lex_and_yacc_book.publisher).to eq("O'Reilley") end - - after(:each) do - FileUtils.rm_rf(TESTDIR) - end end - describe '.move' do - before(:each) do - lib_version = File.join(LIBDIR, '0.6.2') + describe ".move" do + before do + lib_version = File.join(LIBDIR, "0.6.2") FileUtils.cp_r(lib_version, TESTDIR) end - it 'moves the given book from source to target' do - source = loader.load_library('My Library') + it "moves the given book from source to target" do + source = loader.load_library("My Library") count = source.count book = source.first - target = loader.load_library('Target') + target = loader.load_library("Target") described_class.move(source, target, source.first) aggregate_failures do expect(source.count).to eq count - 1 expect(target.count).to eq 1 - expect(File.exist? source.yaml(book)).to be_falsey - expect(File.exist? source.cover(book)).to be_falsey - expect(File.exist? target.yaml(book)).to be_truthy - expect(File.exist? target.cover(book)).to be_truthy + expect(File.exist?(source.yaml(book))).to be_falsey + expect(File.exist?(source.cover(book))).to be_falsey + expect(File.exist?(target.yaml(book))).to be_truthy + expect(File.exist?(target.cover(book))).to be_truthy end end end end