spec/system/admin/homepage/homepage_spec.rb
require "rails_helper"
describe "Homepage", :admin do
before do
Setting["homepage.widgets.feeds.proposals"] = false
Setting["homepage.widgets.feeds.debates"] = false
Setting["homepage.widgets.feeds.processes"] = false
Setting["feature.user.recommendations"] = false
end
let!(:proposals_feed) { create(:widget_feed, kind: "proposals") }
let!(:debates_feed) { create(:widget_feed, kind: "debates") }
let!(:processes_feed) { create(:widget_feed, kind: "processes") }
let(:user_recommendations) { Setting.find_by(key: "feature.user.recommendations") }
let(:user) { create(:user) }
context "Header" do
scenario "Admin menu links to homepage path" do
visit new_admin_widget_card_path(header_card: true)
click_link "#{Setting["org_name"]} Administration"
expect(page).to have_current_path(admin_root_path)
end
end
context "Feeds" do
scenario "Proposals" do
5.times { create(:proposal) }
visit admin_homepage_path
within("#widget_feed_#{proposals_feed.id}") do
select "1", from: "widget_feed_limit"
click_button "No"
expect(page).to have_button "Yes"
end
visit root_path
within("#feed_proposals") do
expect(page).to have_content "Most active proposals"
expect(page).to have_css(".proposal", count: 1)
end
expect(page).not_to have_css("#feed_proposals.medium-8")
end
scenario "Debates" do
5.times { create(:debate) }
visit admin_homepage_path
within("#widget_feed_#{debates_feed.id}") do
select "2", from: "widget_feed_limit"
click_button "No"
expect(page).to have_button "Yes"
end
visit root_path
within("#feed_debates") do
expect(page).to have_content "Most active debates"
expect(page).to have_css(".debate", count: 2)
end
expect(page).not_to have_css("#feed_debates.medium-4")
end
scenario "Proposals and debates" do
3.times { create(:proposal) }
3.times { create(:debate) }
visit admin_homepage_path
within("#widget_feed_#{proposals_feed.id}") do
select "3", from: "widget_feed_limit"
click_button "No"
expect(page).to have_button "Yes"
end
within("#widget_feed_#{debates_feed.id}") do
select "3", from: "widget_feed_limit"
click_button "No"
expect(page).to have_button "Yes"
end
visit root_path
within("#feed_proposals") do
expect(page).to have_content "Most active proposals"
expect(page).to have_css(".proposal", count: 3)
end
within("#feed_debates") do
expect(page).to have_content "Most active debates"
expect(page).to have_css(".debate", count: 3)
end
end
scenario "Processes" do
5.times { create(:legislation_process) }
visit admin_homepage_path
within("#widget_feed_#{processes_feed.id}") do
select "3", from: "widget_feed_limit"
click_button "No"
expect(page).to have_button "Yes"
end
visit root_path
expect(page).to have_content "Open processes"
expect(page).to have_css(".legislation-process", count: 3)
end
scenario "Deactivate proposals" do
Setting["homepage.widgets.feeds.proposals"] = true
create(:proposal)
visit admin_homepage_path
within("#widget_feed_#{proposals_feed.id}") do
click_button "Yes"
expect(page).to have_button "No"
end
visit root_path
expect(page).not_to have_content "Most active proposals"
end
scenario "Deactivate debates" do
Setting["homepage.widgets.feeds.debates"] = true
create(:debate)
visit admin_homepage_path
within("#widget_feed_#{debates_feed.id}") do
click_button "Yes"
expect(page).to have_button "No"
end
visit root_path
expect(page).not_to have_content "Most active debates"
end
scenario "Deactivate processes" do
Setting["homepage.widgets.feeds.processes"] = true
create(:legislation_process)
visit admin_homepage_path
within("#widget_feed_#{processes_feed.id}") do
click_button "Yes"
expect(page).to have_button "No"
end
visit root_path
expect(page).not_to have_content "Open processes"
end
end
scenario "Cards" do
card1 = create(:widget_card, label: "Card1 label",
title: "Card1 text",
description: "Card1 description",
link_text: "Link1 text",
link_url: "consul1.dev")
card2 = create(:widget_card, label: "Card2 label",
title: "Card2 text",
description: "Card2 description",
link_text: "Link2 text",
link_url: "consul2.dev")
visit root_path
expect(page).to have_css(".card", count: 2)
within("#widget_card_#{card1.id}") do
expect(page).to have_content("CARD1 LABEL")
expect(page).to have_content("CARD1 TEXT")
expect(page).to have_content("Card1 description")
expect(page).to have_content("Link1 text")
expect(page).to have_link(href: "consul1.dev")
expect(page).to have_css("img[alt='#{card1.image.title}']")
end
within("#widget_card_#{card2.id}") do
expect(page).to have_content("CARD2 LABEL")
expect(page).to have_content("CARD2 TEXT")
expect(page).to have_content("Card2 description")
expect(page).to have_content("Link2 text")
expect(page).to have_link(href: "consul2.dev")
expect(page).to have_css("img[alt='#{card2.image.title}']")
end
end
scenario "Recomendations" do
create(:proposal, tag_list: "Sport", followers: [user])
create(:proposal, tag_list: "Sport")
visit admin_homepage_path
within("#edit_setting_#{user_recommendations.id}") do
click_button "No"
expect(page).to have_button "Yes"
end
login_as(user)
visit root_path
expect(page).to have_content("Recommendations that may interest you")
end
end