spec/system/tags/debates_spec.rb
require "rails_helper"
describe "Tags" do
scenario "Index" do
earth = create(:debate, tag_list: "Medio Ambiente")
money = create(:debate, tag_list: "Economía")
visit debates_path
within "#debate_#{earth.id}" do
expect(page).to have_content "Medio Ambiente"
end
within "#debate_#{money.id}" do
expect(page).to have_content "Economía"
end
end
scenario "Index shows up to 5 tags per proposal" do
tag_list = ["Hacienda", "Economía", "Medio Ambiente", "Corrupción", "Fiestas populares", "Prensa"]
create(:debate, tag_list: tag_list)
visit debates_path
within(".debate .tags") do
expect(page).to have_content "1+"
end
end
scenario "Index shows 3 tags with no plus link" do
tag_list = ["Medio Ambiente", "Corrupción", "Fiestas populares"]
create(:debate, tag_list: tag_list)
visit debates_path
within(".debate .tags") do
tag_list.each do |tag|
expect(page).to have_content tag
end
expect(page).not_to have_content "+"
end
end
scenario "Index tag does not show featured debates" do
create_featured_debates
create(:debate, tag_list: "123")
visit debates_path(tag: "123")
expect(page).not_to have_css "#debates .debate-featured"
expect(page).not_to have_css "#featured-debates"
end
scenario "Show" do
debate = create(:debate, tag_list: "Hacienda, Economía")
visit debate_path(debate)
expect(page).to have_content "Economía"
expect(page).to have_content "Hacienda"
end
scenario "Create" do
user = create(:user)
login_as(user)
visit new_debate_path
fill_in_new_debate_title with: "Title"
fill_in_ckeditor "Initial debate text", with: "Description"
check "debate_terms_of_service"
fill_in "debate_tag_list", with: "Impuestos, Economía, Hacienda"
click_button "Start a debate"
expect(page).to have_content "Debate created successfully."
expect(page).to have_content "Economía"
expect(page).to have_content "Hacienda"
expect(page).to have_content "Impuestos"
end
scenario "Create with too many tags" do
user = create(:user)
login_as(user)
visit new_debate_path
fill_in_new_debate_title with: "Title"
fill_in_ckeditor "Initial debate text", with: "Description"
check "debate_terms_of_service"
fill_in "debate_tag_list", with: "Impuestos, Economía, Hacienda, Sanidad, Educación, Política, Igualdad"
click_button "Start a debate"
expect(page).to have_content error_message
expect(page).to have_content "tags must be less than or equal to 6"
end
scenario "Create with dangerous strings" do
user = create(:user)
login_as(user)
visit new_debate_path
fill_in_new_debate_title with: "A test of dangerous strings"
fill_in_ckeditor "Initial debate text", with: "A description suitable for this test"
check "debate_terms_of_service"
fill_in "debate_tag_list", with: "user_id=1, &a=3, <script>alert('hey');</script>"
click_button "Start a debate"
expect(page).to have_content "Debate created successfully."
expect(page).to have_content "user_id1"
expect(page).to have_content "a3"
expect(page).to have_content "scriptalert('hey');script"
expect(page.html).not_to include "user_id=1, &a=3, <script>alert('hey');</script>"
end
scenario "Update" do
debate = create(:debate, tag_list: "Economía")
login_as(debate.author)
visit edit_debate_path(debate)
expect(page).to have_css "input[value='Economía']"
fill_in "debate_tag_list", with: "Economía, Hacienda"
click_button "Save changes"
expect(page).to have_content "Debate updated successfully."
within(".tags") do
expect(page).to have_link "Economía"
expect(page).to have_link "Hacienda"
end
end
scenario "Delete" do
debate = create(:debate, tag_list: "Economía")
login_as(debate.author)
visit edit_debate_path(debate)
fill_in "debate_tag_list", with: ""
click_button "Save changes"
expect(page).to have_content "Debate updated successfully."
expect(page).not_to have_content "Economía"
end
context "Filter" do
scenario "From index" do
create(:debate, tag_list: "Health", title: "Public hospitals?")
create(:debate, tag_list: "Education", title: "Status of our schools")
visit debates_path(order: :created_at)
within ".debate", text: "Status of our schools" do
click_link "Education"
end
within("#debates") do
expect(page).to have_css(".debate", count: 1)
expect(page).to have_content "Status of our schools"
end
end
scenario "From show" do
debate = create(:debate, tag_list: "Education")
create(:debate, tag_list: "Health")
visit debate_path(debate)
click_link "Education"
within("#debates") do
expect(page).to have_css(".debate", count: 1)
expect(page).to have_content(debate.title)
end
end
end
context "Tag cloud" do
scenario "Display user tags" do
create(:debate, tag_list: "Medio Ambiente")
create(:debate, tag_list: "Economía")
visit debates_path
within "#tag-cloud" do
expect(page).to have_content "Medio Ambiente"
expect(page).to have_content "Economía"
end
end
scenario "Filter by user tags" do
debate1 = create(:debate, tag_list: "Medio Ambiente")
debate2 = create(:debate, tag_list: "Medio Ambiente")
debate3 = create(:debate, tag_list: "Economía")
visit debates_path
within "#tag-cloud" do
click_link "Medio Ambiente"
end
expect(page).to have_css ".debate", count: 2
expect(page).to have_content debate1.title
expect(page).to have_content debate2.title
expect(page).not_to have_content debate3.title
end
end
end