Fix published revisions
This commit is contained in:
parent
3fb10fb4b8
commit
a0d4c9d54c
2 changed files with 82 additions and 0 deletions
|
@ -0,0 +1,56 @@
|
||||||
|
namespace :after_party do
|
||||||
|
desc 'Deployment task: fix_published_revisions'
|
||||||
|
task fix_published_revisions: :environment do
|
||||||
|
puts "Running deploy task 'fix_published_revisions'"
|
||||||
|
|
||||||
|
procedure_ids = Procedure
|
||||||
|
.with_discarded
|
||||||
|
.joins(:revisions)
|
||||||
|
.group('procedures.id')
|
||||||
|
.having('count(procedure_id) > 2')
|
||||||
|
.map(&:id)
|
||||||
|
|
||||||
|
# Remove wrongfully created revisions. Every procedure should have only a draft revision
|
||||||
|
# and a published revision for published procedure
|
||||||
|
revisions = ProcedureRevision
|
||||||
|
.joins(:procedure)
|
||||||
|
.where(procedure_id: procedure_ids)
|
||||||
|
.where('procedure_revisions.id != procedures.draft_revision_id AND procedure_revisions.id != procedures.published_revision_id')
|
||||||
|
|
||||||
|
dossiers = Dossier.with_discarded.joins(:procedure).where(revision_id: revisions)
|
||||||
|
progress = ProgressReport.new(dossiers.count)
|
||||||
|
dossiers.find_each do |dossier|
|
||||||
|
dossier.update_column(:revision_id, dossier.procedure.published_revision_id)
|
||||||
|
progress.inc
|
||||||
|
end
|
||||||
|
progress.finish
|
||||||
|
|
||||||
|
types_de_champ = TypeDeChamp.joins(:procedure).where(revision_id: revisions)
|
||||||
|
progress = ProgressReport.new(types_de_champ.count)
|
||||||
|
types_de_champ.find_each do |type_de_champ|
|
||||||
|
type_de_champ.update_column(:revision_id, type_de_champ.procedure.published_revision_id)
|
||||||
|
progress.inc
|
||||||
|
end
|
||||||
|
progress.finish
|
||||||
|
|
||||||
|
ProcedureRevisionTypeDeChamp.where(revision_id: revisions).delete_all
|
||||||
|
revisions.delete_all
|
||||||
|
|
||||||
|
# Fill published_at column on all published revisions
|
||||||
|
published_revisions = ProcedureRevision
|
||||||
|
.joins(:procedure)
|
||||||
|
.where(published_at: nil)
|
||||||
|
.where('procedure_revisions.id = procedures.published_revision_id')
|
||||||
|
progress = ProgressReport.new(published_revisions.count)
|
||||||
|
published_revisions.find_each do |revision|
|
||||||
|
revision.update_column(:published_at, revision.procedure.published_at)
|
||||||
|
progress.inc
|
||||||
|
end
|
||||||
|
progress.finish
|
||||||
|
|
||||||
|
# Update task as completed. If you remove the line below, the task will
|
||||||
|
# run with every deploy (or every time you call after_party:run).
|
||||||
|
AfterParty::TaskRecord
|
||||||
|
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
|
||||||
|
end
|
||||||
|
end
|
|
@ -625,6 +625,7 @@ describe Procedure do
|
||||||
expect(procedure.draft_revision).not_to be_nil
|
expect(procedure.draft_revision).not_to be_nil
|
||||||
expect(procedure.revisions.count).to eq(2)
|
expect(procedure.revisions.count).to eq(2)
|
||||||
expect(procedure.revisions).to eq([procedure.published_revision, procedure.draft_revision])
|
expect(procedure.revisions).to eq([procedure.published_revision, procedure.draft_revision])
|
||||||
|
expect(procedure.published_revision.published_at).to eq(now)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -649,12 +650,37 @@ describe Procedure do
|
||||||
expect(procedure.canonical_procedure).to eq(canonical_procedure)
|
expect(procedure.canonical_procedure).to eq(canonical_procedure)
|
||||||
expect(procedure.closed_at).to be_nil
|
expect(procedure.closed_at).to be_nil
|
||||||
expect(procedure.published_at).to eq(now)
|
expect(procedure.published_at).to eq(now)
|
||||||
|
expect(procedure.published_revision.published_at).to eq(now)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'unpublishes parent procedure' do
|
it 'unpublishes parent procedure' do
|
||||||
expect(parent_procedure.unpublished_at).to eq(now)
|
expect(parent_procedure.unpublished_at).to eq(now)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when republishing a previously closed procedure' do
|
||||||
|
let(:procedure) { create(:procedure, :published, administrateurs: [administrateur]) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
procedure.close!
|
||||||
|
Timecop.freeze(now) do
|
||||||
|
procedure.publish_or_reopen!(administrateur)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'changes the procedure state to published' do
|
||||||
|
expect(procedure.closed_at).to be_nil
|
||||||
|
expect(procedure.published_at).to eq(now)
|
||||||
|
expect(procedure.published_revision.published_at).not_to eq(now)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "shouldn't create a new revision" do
|
||||||
|
expect(procedure.published_revision).not_to be_nil
|
||||||
|
expect(procedure.draft_revision).not_to be_nil
|
||||||
|
expect(procedure.revisions.count).to eq(2)
|
||||||
|
expect(procedure.revisions).to eq([procedure.published_revision, procedure.draft_revision])
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#unpublish!" do
|
describe "#unpublish!" do
|
||||||
|
|
Loading…
Add table
Reference in a new issue