Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
class ChangeUniqueIndexesOnFormDocuments < ActiveRecord::Migration[8.1]
def up
remove_index :form_documents, name: "index_form_documents_on_form_id_tag_and_language"

# Only one form_document with the same version per language per form
add_index :form_documents, %i[form_id version language], name: "index_form_documents_on_form_id_version_and_language", unique: true

# Only one form_document with a null version (the draft form document) per language per form
add_index :form_documents, %i[form_id language], name: "index_form_documents_only_one_draft_per_language", unique: true, where: "version IS NULL"
end

def down
remove_index :form_documents, name: "index_form_documents_only_one_draft_per_language"

remove_index :form_documents, name: "index_form_documents_on_form_id_version_and_language"

add_index :form_documents, %i[form_id tag language], name: "index_form_documents_on_form_id_tag_and_language", unique: true
end
end
5 changes: 3 additions & 2 deletions db/schema.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 0 additions & 67 deletions spec/lib/tasks/data_migrations.rake_spec.rb

This file was deleted.

21 changes: 18 additions & 3 deletions spec/models/form_document_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,23 @@
expect(form_document.form).to be_a(Form)
end

it "tags must be unique for a given form" do
form_document = create(:form_document, tag: "live")
expect { create(:form_document, form: form_document.form, tag: "live") }.to raise_error(ActiveRecord::RecordNotUnique)
it "raises an error if a form document with the same version exists for the form" do
form_document = create(:form_document, :live, version: 1)
expect { create(:form_document, :archived, form: form_document.form, version: 1) }.to raise_error(ActiveRecord::RecordNotUnique)
end

it "raises an error if a draft form document already exists for the form" do
form = create(:form) # also creates a draft form document
expect { create(:form_document, :draft, form: form) }.to raise_error(ActiveRecord::RecordNotUnique)
end

it "allows creating a form with the same version and a different language" do
form_document = create(:form_document, :live, language: "en")
expect { create(:form_document, :live, form: form_document.form, language: "cy") }.not_to raise_error
end

it "allows creating a draft form with a different language" do
form = create(:form) # also creates a draft form document
expect { create(:form_document, :draft, form: form, language: "cy") }.not_to raise_error
end
end
4 changes: 2 additions & 2 deletions spec/requests/api/form_documents_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@
let(:form) { create :form }

before do
create :form_document, form: form, tag: "live", language: "en", content: { form_id: form.id.to_s, language: "en" }
create :form_document, form: form, tag: "live", language: "cy", content: { form_id: form.id.to_s, language: "cy" }
create :form_document, :live, form: form, language: "en", content: { form_id: form.id.to_s, language: "en" }
create :form_document, :live, form: form, language: "cy", content: { form_id: form.id.to_s, language: "cy" }
end

it "when not given a language, defaults to english returns the live form document in english" do
Expand Down
6 changes: 3 additions & 3 deletions spec/services/revert_draft_form_service_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ def revert_draft(tag)
goto_page_id: live_form.pages.last.id,
routing_page_id: live_form.pages.first.id,
)
FormDocument.create!(form: live_form, tag: "live", content: live_form.as_form_document(live_at: live_form.updated_at))
create(:form_document, :live, form: live_form, content: live_form.as_form_document(live_at: live_form.updated_at))
live_form.update!(state: :live_with_draft)
end

Expand Down Expand Up @@ -149,7 +149,7 @@ def revert_draft(tag)
exit_page_heading: "You cannot continue",
exit_page_markdown: "Please contact us",
)
FormDocument.create!(form: live_form, tag: "live", content: live_form.as_form_document(live_at: live_form.updated_at))
create(:form_document, :live, form: live_form, content: live_form.as_form_document(live_at: live_form.updated_at))
live_form.update!(state: :live_with_draft)
end

Expand Down Expand Up @@ -563,7 +563,7 @@ def revert_draft(tag)
goto_page_id: archived_form.pages.last.id,
routing_page_id: archived_form.pages.first.id,
)
FormDocument.create!(form: archived_form, tag: "archived", content: archived_form.as_form_document(live_at: archived_form.updated_at))
create(:form_document, :archived, form: archived_form, content: archived_form.as_form_document(live_at: archived_form.updated_at))
archived_form.update!(state: :archived_with_draft)
end

Expand Down