This way it's more obvious what's going on. Note that, in this case, the expectations were **not** true before visiting the page, so we aren't fixing a flaky test.
465 lines
16 KiB
Ruby
465 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"
|
|
|
|
refresh
|
|
|
|
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 "CONSUL"
|
|
|
|
expect(page).to have_content "Most active proposals"
|
|
|
|
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
|
|
|
|
expect(page).to have_link "Publish Comment"
|
|
|
|
click_link "CONSUL"
|
|
|
|
expect(page).to have_content "Most active proposals"
|
|
|
|
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
|