require 'spec_helper' describe Softcover::Commands::Publisher do let(:book) { Softcover::Utils.current_book } before(:all) { generate_book } after(:all) { remove_book } let(:publish_options) { { remove_unused_media_bundles: true } } describe "#publish" do context "publishing from non book directory" do before do chdir_to_non_book end it "rejects the publish" do expect(subject.publish!).to be_false end end context "publishing from book directory" do before do chdir_to_book stub_create_book book stub_media_upload book end it "publishes" do expect(subject.publish!(publish_options)).to be_true end end end describe "#unpublish" do context "unpublishing from non book directory" do before do chdir_to_non_book end it "rejects the unpublish" do expect(subject.unpublish!).to be_false end end context "unpublishing from book directory" do before do chdir_to_book stub_create_book book stub_media_upload book subject.publish! publish_options stub_destroy_book book end it "unpublishes" do expect(subject.unpublish!).to be_true end it "removes book config" do subject.unpublish! expect(Softcover::BookConfig.exists?).to be_false end end context "unpublishing from book directory with invalid ID" do before do chdir_to_book stub_create_book book stub_media_upload book subject.publish!(publish_options) Softcover::BookConfig['id'] = 0 stub_destroy_book_not_found book end it "does not unpublish" do expect(subject.unpublish!).to be_false end end context "unpublishing outside book directory" do before do chdir_to_book stub_create_book book stub_media_upload book subject.publish! publish_options Dir.chdir(File.dirname(__FILE__)) end context "with valid slug option" do before { stub_destroy_book_by_slug book } it "unpublishes" do expect(subject.unpublish!(book.slug)).to be_true end end context "with invalid slug option" do let(:slug) { "error" } before { stub_destroy_book_by_invalid_slug slug } it "does not unpublish" do expect(subject.unpublish!(slug)).to be_false end end end end describe "#publish_media" do before do chdir_to_book book.id = 1 stub_media_upload book end # it "should start with 0 processed_media" do # expect(book.processed_media.length).to eq 0 # end # it "processes media" do # subject.publish_media! # expect(book.processed_media.length).to be > 0 # end # it "daemonizes" do # subject.should_receive(:fork) do |&blk| # blk.call # end # subject.publish_media! daemon: true # expect(book.processed_media.length).to be > 0 # end # it "watches" do # subject.should_receive(:loop) do |&blk| # blk.call # end # subject.publish_media! watch: true # expect(book.processed_media.length).to be > 0 # end end end