Files
grecia/spec/system/legislation/draft_versions_spec.rb
Javi Martín f52a86b465 Apply (but don't add) Capybara/SpecificMatcher rule
This rule was added in rubocop-rspec 2.12.0, and we were already
following it most of the time.

However, the rule isn't working correctly in some cases, such as input
selectors, so we aren't enabling it.
2023-09-06 19:00:56 +02:00

463 lines
16 KiB
Ruby

require "rails_helper"
describe "Legislation Draft Versions" do
let(:user) { create(:user) }
let(:administrator) do
create(:administrator, user: user)
user
end
context "See draft text page" do
let(:process) { create(:legislation_process) }
let!(:original) do
create(:legislation_draft_version, process: process, title: "Original",
body: "Original version", status: "published")
end
let!(:draft) do
create(:legislation_draft_version, process: process, title: "Draft",
body: "Draft version", status: "draft")
end
before do
create(:legislation_draft_version, process: process, title: "Current",
body: "Current version", status: "published")
end
it "shows the text body for this version" do
visit legislation_process_draft_version_path(process, original)
expect(page).to have_content("Original version")
within("select#draft_version_id") do
expect(page).to have_content("Original")
expect(page).to have_content("Current")
expect(page).not_to have_content("Draft")
end
end
it "shows an unpublished version to admins" do
login_as(administrator)
visit legislation_process_draft_version_path(process, draft)
expect(page).to have_content("Draft version")
within("select#draft_version_id") do
expect(page).to have_content("Original")
expect(page).to have_content("Current")
expect(page).to have_content("Draft *")
end
end
it "switches to another version without js", :no_js do
visit legislation_process_draft_version_path(process, original)
expect(page).to have_content("Original version")
select("Current")
click_button "see"
expect(page).not_to have_content("Original version")
expect(page).to have_content("Current version")
end
it "switches to another version with js" do
visit legislation_process_draft_version_path(process, original)
expect(page).to have_content("Original version")
select("Current")
expect(page).not_to have_content("Original version")
expect(page).to have_content("Current version")
end
scenario "show more info button" do
process.update!(additional_info: "Text for additional info of the process")
visit legislation_process_draft_version_path(process, original)
expect(page).not_to have_content "Text for additional info of the process"
click_button "More information and context"
expect(page).to have_content "Text for additional info of the process"
end
scenario "show help gif" do
visit legislation_process_draft_version_path(process, original)
click_button text: "How can I comment this document?"
expect(page).to have_content "select the text you want to comment and press the button with the pencil"
end
context "for final versions" do
it "does not show the comments panel" do
final_version = create(:legislation_draft_version,
process: process,
title: "Final version",
body: "Final body",
status: "published",
final_version: true)
visit legislation_process_draft_version_path(process, final_version)
expect(page).to have_content("Final body")
expect(page).not_to have_content("See all comments")
within(".draft-panels") do
expect(page).not_to have_content("Comments")
end
end
end
end
context "See changes page" do
let(:process) { create(:legislation_process) }
let!(:original) do
create(:legislation_draft_version, process: process, title: "Original", body: "Original version",
changelog: "Changes for first version", status: "published")
end
let!(:draft) do
create(:legislation_draft_version, process: process, title: "Draft", body: "Draft version",
changelog: "Changes for third version", status: "draft")
end
before do
create(:legislation_draft_version, process: process, title: "Current", body: "Current version",
changelog: "Changes for second version", status: "published")
end
it "shows the changes for this version" do
visit legislation_process_draft_version_changes_path(process, original)
expect(page).to have_content("Changes for first version")
within("select#draft_version_id") do
expect(page).to have_content("Original")
expect(page).to have_content("Current")
expect(page).not_to have_content("Draft")
end
end
it "shows an unpublished version to admins" do
login_as(administrator)
visit legislation_process_draft_version_changes_path(process, draft)
expect(page).to have_content("Changes for third version")
within("select#draft_version_id") do
expect(page).to have_content("Original")
expect(page).to have_content("Current")
expect(page).to have_content("Draft *")
end
end
it "switches to another version without js", :no_js do
visit legislation_process_draft_version_changes_path(process, original)
expect(page).to have_content("Changes for first version")
select("Current")
click_button "see"
expect(page).not_to have_content("Changes for first version")
expect(page).to have_content("Changes for second version")
end
it "switches to another version with js" do
visit legislation_process_draft_version_changes_path(process, original)
expect(page).to have_content("Changes for first version")
select("Current")
expect(page).not_to have_content("Changes for first version")
expect(page).to have_content("Changes for second version")
end
end
context "Annotations" do
let(:user) { create(:user) }
let(:draft_version) { create(:legislation_draft_version, :published) }
before { login_as user }
scenario "Visit as anonymous" do
logout
visit legislation_process_draft_version_path(draft_version.process, draft_version)
page.find(:css, ".legislation-annotatable").double_click
page.find(:css, ".annotator-adder button").click
expect(page).not_to have_css("#legislation_annotation_text")
expect(page).to have_content "You must sign in or sign up to leave a comment."
end
scenario "Create" do
visit legislation_process_draft_version_path(draft_version.process, draft_version)
page.find(:css, ".legislation-annotatable").double_click
page.find(:css, ".annotator-adder button").click
page.click_button "Publish Comment"
expect(page).to have_content "Comment can't be blank"
fill_in "legislation_annotation_text", with: "this is my annotation"
page.click_button "Publish Comment"
expect(page).to have_css ".annotator-hl"
first(:css, ".annotator-hl").click
expect(page).to have_content "this is my annotation"
visit legislation_process_draft_version_path(draft_version.process, draft_version)
expect(page).to have_css ".annotator-hl"
first(:css, ".annotator-hl").click
expect(page).to have_content "this is my annotation"
end
scenario "View annotations and comments" do
annotation1 = create(:legislation_annotation,
draft_version: draft_version,
text: "my annotation",
ranges: [{ "start" => "/p[1]",
"startOffset" => 5,
"end" => "/p[1]",
"endOffset" => 10 }])
create(:legislation_annotation,
draft_version: draft_version,
text: "my other annotation",
ranges: [{ "start" => "/p[1]", "startOffset" => 12, "end" => "/p[1]", "endOffset" => 19 }])
comment = create(:comment, commentable: annotation1)
visit legislation_process_draft_version_path(draft_version.process, draft_version)
expect(page).to have_css ".annotator-hl"
first(:css, ".annotator-hl").click
expect(page).to have_content "my annotation"
expect(page).to have_content comment.body
all(".annotator-hl")[1].click
expect(page).to have_content "my other annotation"
end
scenario "Publish new comment for an annotation from comments box" do
create(:legislation_annotation,
draft_version: draft_version,
text: "my annotation",
ranges: [{ "start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11 }])
visit legislation_process_draft_version_path(draft_version.process, draft_version)
expect(page).to have_css ".annotator-hl"
first(:css, ".annotator-hl").click
expect(page).to have_content "my annotation"
click_link "Publish Comment"
fill_in "comment[body]", with: "My interesting comment"
click_button "Publish comment"
expect(page).to have_content "My interesting comment"
end
scenario "Publish new comment with errors for an existing annotation" do
create(:legislation_annotation, draft_version: draft_version)
visit legislation_process_draft_version_path(draft_version.process, draft_version)
find(:css, ".annotator-hl").double_click
find(:css, ".annotator-adder button").click
click_button "Publish Comment"
expect(page).to have_content "Comment can't be blank"
end
scenario "When page is restored from browser cache do not duplicate annotation handlers" do
Setting["org_name"] = "CONSUL"
create(:legislation_annotation, draft_version: draft_version, text: "my annotation")
visit legislation_process_draft_version_path(draft_version.process, draft_version)
expect(page).to have_css(".annotator-hl", count: 1)
click_link "Help"
expect(page).to have_content "CONSUL is a platform for citizen participation"
go_back
expect(page).to have_content "A collaborative legislation process"
expect(page).to have_css(".annotator-hl", count: 1)
end
scenario "When page is restored from browser cache publish comment button keeps working" do
Setting["org_name"] = "CONSUL"
create(:legislation_annotation, draft_version: draft_version, text: "my annotation")
visit legislation_process_draft_version_path(draft_version.process, draft_version)
find(:css, ".annotator-hl").click
click_link "Help"
expect(page).to have_content "CONSUL is a platform for citizen participation"
go_back
expect(page).to have_content "A collaborative legislation process"
click_link "Publish Comment"
fill_in "comment[body]", with: "My interesting comment"
click_button "Publish comment"
expect(page).to have_content "My interesting comment"
end
end
context "Merged annotations" do
let(:user) { create(:user) }
let(:draft_version) { create(:legislation_draft_version, :published) }
before { login_as user }
scenario "View annotations and comments in an included range" do
create(:legislation_annotation,
draft_version: draft_version,
text: "my annotation",
ranges: [{ "start" => "/p[1]", "startOffset" => 1, "end" => "/p[1]", "endOffset" => 5 }])
create(:legislation_annotation,
draft_version: draft_version,
text: "my other annotation",
ranges: [{ "start" => "/p[1]", "startOffset" => 1, "end" => "/p[1]", "endOffset" => 10 }])
visit legislation_process_draft_version_path(draft_version.process, draft_version)
expect(page).to have_css ".annotator-hl"
first(:css, ".annotator-hl").click
within(".comment-box") do
expect(page).to have_content "2 comment"
expect(page).to have_content "my annotation"
expect(page).to have_content "my other annotation"
end
end
end
context "Annotations page" do
let(:draft_version) { create(:legislation_draft_version, :published) }
before do
create(:legislation_annotation,
draft_version: draft_version,
text: "my annotation",
quote: "ipsum",
ranges: [{ "start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11 }])
create(:legislation_annotation,
draft_version: draft_version,
text: "my other annotation",
quote: "audiam",
ranges: [{ "start" => "/p[3]", "startOffset" => 6, "end" => "/p[3]", "endOffset" => 11 }])
end
scenario "See all annotations for a draft version" do
visit legislation_process_draft_version_annotations_path(draft_version.process, draft_version)
expect(page).to have_content "ipsum"
expect(page).to have_content "audiam"
end
context "switching versions" do
let(:process) { create(:legislation_process) }
let(:original) { create(:legislation_draft_version, :published, process: process, title: "Original") }
let(:current) { create(:legislation_draft_version, :published, process: process, title: "Current") }
before do
create(:legislation_annotation,
draft_version: original,
quote: "quote for version 1",
ranges: [{ "start" => "/p[1]", "startOffset" => 11, "end" => "/p[1]", "endOffset" => 30 }])
create(:legislation_annotation,
draft_version: current,
quote: "quote for version 2",
ranges: [{ "start" => "/p[1]", "startOffset" => 11, "end" => "/p[1]", "endOffset" => 30 }])
end
scenario "without js", :no_js do
visit legislation_process_draft_version_annotations_path(process, original)
expect(page).to have_content("quote for version 1")
select("Current")
click_button "see"
expect(page).not_to have_content("quote for version 1")
expect(page).to have_content("quote for version 2")
end
scenario "with js" do
visit legislation_process_draft_version_annotations_path(process, original)
expect(page).to have_content("quote for version 1")
select("Current")
expect(page).not_to have_content("quote for version 1")
expect(page).to have_content("quote for version 2")
end
end
end
context "Annotation comments page" do
let(:draft_version) { create(:legislation_draft_version, :published) }
before do
create(:legislation_annotation,
draft_version: draft_version,
text: "my annotation",
quote: "ipsum",
ranges: [{ "start" => "/p[1]", "startOffset" => 6, "end" => "/p[1]", "endOffset" => 11 }])
end
scenario "See one annotation with replies for a draft version" do
annotation = create(:legislation_annotation,
draft_version: draft_version,
text: "my other annotation",
quote: "audiam",
ranges: [{ "start" => "/p[3]",
"startOffset" => 6,
"end" => "/p[3]",
"endOffset" => 11 }])
visit polymorphic_path(annotation)
expect(page).not_to have_content "ipsum"
expect(page).not_to have_content "my annotation"
expect(page).to have_content "audiam"
expect(page).to have_content "my other annotation"
end
end
context "See table from markdown" do
let(:draft_version) { create(:legislation_draft_version, :published, :with_table) }
let(:path) do
edit_admin_legislation_process_draft_version_path(draft_version.process, draft_version)
end
scenario "See table as a user" do
visit legislation_process_draft_version_path(draft_version.process, draft_version)
expect(page).to have_table
expect(page).to have_content "Roberta"
expect(page).to have_content "25"
end
scenario "See table as an admin" do
login_as(administrator)
visit path
click_link "Launch text editor"
expect(page).to have_table
expect(page).to have_content "Roberta"
expect(page).to have_content "25"
end
end
end