Having to wait for a whole page refresh after updating each setting was painful when modifying several settings. Even though the navigation is updated immediately to reflect which sections have been enabled/disabled, there's one gotcha. Changing the "SDG" setting will not update the user menu (which contains a link to SDG content) nor the "SDG Configuration" tab; refreshing the page will be necessary to check these changes. The same happens with the map and remote census tabs. So in these cases we're making an exception and sending the form. We might find a better solution in the future. For this reason, we aren't using the `switch` ARIA role. Some users might not expect a switch control to refresh the page, just like they usually don't expect checkboxes to refresh the page. Furthermore, screen reader support for the `switch` role seems to be inconsistent. For instance, NVDA with Chrome announces the control as a checkbox instead of a switch. Note AJAX is only used for feature settings. Other settings are still updated with regular HTTP requests. Since we're now using AJAX requests, we have to make sure to add an expectation in the homepage tests in order to make sure the request has finished before starting a new one.
179 lines
5.0 KiB
Ruby
179 lines
5.0 KiB
Ruby
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
|
|
|
|
xscenario "Deactivate"
|
|
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
|