require "rails_helper" describe "Admin legislation draft versions", :admin do context "Index" do scenario "Displaying legislation process draft versions" do process = create(:legislation_process, title: "An example legislation process") draft_version = create(:legislation_draft_version, process: process, title: "Version 1") visit admin_legislation_processes_path(filter: "all") within("tr", text: "An example legislation process") { click_link "Edit" } click_link "Drafting" click_link "Version 1" expect(page).to have_content(draft_version.title) expect(page).to have_content(draft_version.changelog) end end context "Create" do scenario "Valid legislation draft version" do create(:legislation_process, title: "An example legislation process") visit admin_root_path within("#side_menu") do click_link "Collaborative Legislation" end within("tr", text: "An example legislation process") { click_link "Edit" } click_link "Drafting" click_link "Create version" fill_in "Version title", with: "Version 3" fill_in "Changes", with: "Version 3 changes" fill_in_markdown_editor "Text", with: "Version 3 body" within("form .end") do click_button "Create version" end expect(page).to have_content "An example legislation process" expect(page).to have_content "Version 3" end end context "Update" do scenario "Valid legislation draft version" do process = create(:legislation_process, title: "An example legislation process") create(:legislation_draft_version, title: "Version 1", process: process) visit admin_root_path within("#side_menu") do click_link "Collaborative Legislation" end click_link "All" expect(page).not_to have_link "All" within("tr", text: "An example legislation process") { click_link "Edit" } click_link "Drafting" click_link "Version 1" fill_in "Version title", with: "Version 1b" fill_in_markdown_editor "Text", with: "# Version 1 body\r\n\r\nParagraph\r\n\r\n>Quote" click_button "Save changes" expect(page).to have_content "Version 1b" end end scenario "Delete" do version = create(:legislation_draft_version, body: "Version 1") visit edit_admin_legislation_process_draft_version_path(version.process, version) accept_confirm("Are you sure? This action will delete \"Version 1\" and can't be undone.") do click_button "Delete" end expect(page).to have_content "Draft deleted successfully" end context "Changing content with the markdown editor" do let(:prompt) { "You've edited the text without saving it. Do you confirm to leave the page?" } let(:version) { create(:legislation_draft_version, body: "Version 1") } let(:path) do edit_admin_legislation_process_draft_version_path(version.process, version) end scenario "asks for confimation when the content is modified" do visit path fill_in_markdown_editor "Text", with: "Version 1b" expect(page).to have_content "You've edited the text" dismiss_confirm(prompt) do click_link "Proposals", match: :first end expect(page).to have_current_path(path) end scenario "asks for confimation after the page is restored from browser history" do visit path fill_in_markdown_editor "Text", with: "Version 1b" accept_confirm(prompt) do click_link "Proposals", match: :first end expect(page).to have_css("h2", text: "Proposals") go_back expect(page).to have_content version.process.title accept_confirm(prompt) do click_link "Proposals", match: :first end expect(page).to have_css("h2", text: "Proposals") end scenario "does not ask for confirmation when restoring the original content" do visit path fill_in_markdown_editor "Text", with: "Version 1b" accept_confirm(prompt) do click_link "Proposals", match: :first end expect(page).to have_css("h2", text: "Proposals") go_back fill_in_markdown_editor "Text", with: "Version 1" expect(page).not_to have_content "You've edited the text" click_link "Proposals", match: :first expect(page).to have_css("h2", text: "Proposals") end end end