otwarchive-symphonyarchive/spec/lib/tasks/work_tasks.rake_spec.rb

167 lines
4.3 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
require 'spec_helper'
describe "rake work:purge_old_drafts" do
context "when the draft is 27 days old" do
it "doesn't delete the draft" do
draft = travel_to(27.days.ago) do
create(:draft)
end
subject.invoke
expect { draft.reload }.not_to \
raise_exception
end
end
context "when there is a posted work that is 32 days old" do
it "doesn't delete the work" do
work = travel_to(32.days.ago) do
create(:work)
end
subject.invoke
expect { work.reload }.not_to \
raise_exception
end
end
context "when the draft has multiple chapters" do
it "deletes the draft" do
draft = travel_to(32.days.ago) do
create(:draft)
end
create(:chapter, :draft, work: draft, authors: draft.pseuds, position: 2)
create(:chapter, :draft, work: draft, authors: draft.pseuds, position: 3)
expect(draft.chapters.count).to eq(3)
subject.invoke
expect { draft.reload }.to \
raise_exception(ActiveRecord::RecordNotFound)
end
end
context "when the draft is in a collection" do
let(:collection) { create(:collection) }
it "deletes the draft" do
draft = travel_to(32.days.ago) do
create(:draft, collections: [collection])
end
subject.invoke
expect { draft.reload }.to \
raise_exception(ActiveRecord::RecordNotFound)
end
end
context "when the draft is the last work in a series" do
let(:series) { create(:series) }
it "deletes the draft" do
draft = travel_to(32.days.ago) do
create(:draft, series: [series])
end
subject.invoke
expect { draft.reload }.to \
raise_exception(ActiveRecord::RecordNotFound)
expect { series.reload }.to \
raise_exception(ActiveRecord::RecordNotFound)
end
end
context "when one of the drafts cannot be deleted" do
let(:collection) { create(:collection) }
it "deletes the other drafts and prints an error" do
draft1 = travel_to(34.days.ago) do
create(:draft)
end
draft2 = travel_to(33.days.ago) do
create(:draft, collections: [collection])
end
draft3 = travel_to(32.days.ago) do
create(:draft)
end
# Make the deletion of draft 2 fail.
allow_any_instance_of(CollectionItem).to \
receive(:destroy).and_raise("deletion failed!")
subject.invoke
expect { draft1.reload }.to \
raise_exception(ActiveRecord::RecordNotFound)
expect { draft2.reload }.not_to \
raise_exception
expect { draft3.reload }.to \
raise_exception(ActiveRecord::RecordNotFound)
end
end
end
describe "rake work:reset_word_counts" do
let(:en) { Language.find_by(short: "en") }
let(:en_work) { create(:work, language: en, chapter_attributes: { content: "Nice ride, Gloria!" }) }
context "when there are multiple languages" do
let(:es) { create(:language, short: "es") }
let(:es_work) { create(:work, language: es, chapter_attributes: { content: "Así pasa la gloria del mundo." }) }
before do
# Screw up the word counts
en_work.update_column(:word_count, 3000)
es_work.update_column(:word_count, 4000)
end
it "updates only works in the specified language" do
subject.invoke("es")
en_work.reload
es_work.reload
expect(en_work.word_count).to eq(3000)
expect(es_work.word_count).to eq(6)
end
it "updates works in all languages" do
subject.invoke
en_work.reload
es_work.reload
expect(en_work.word_count).to eq(3)
expect(es_work.word_count).to eq(6)
end
end
context "when a work has multiple chapters" do
let(:chapter) { create(:chapter, work: en_work, position: 2, content: "A few more words never hurt.") }
before do
# Screw up the word counts
chapter.update_column(:word_count, 9001)
en_work.first_chapter.update_column(:word_count, 100_000)
en_work.update_column(:word_count, 60)
end
it "updates word counts for each chapter and for the work" do
subject.invoke("en")
en_work.reload
expect(en_work.word_count).to eq(9)
expect(en_work.first_chapter.word_count).to eq(3)
expect(en_work.last_chapter.word_count).to eq(6)
end
end
end