167 lines
4.3 KiB
Ruby
167 lines
4.3 KiB
Ruby
|
|
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
|