Merge pull request #4712 from consul/within_components
Use page.find instead of within in component tests
This commit is contained in:
@@ -33,9 +33,9 @@ describe Admin::BudgetsWizard::Headings::GroupSwitcherComponent do
|
||||
expect(page).to have_content "Showing headings from the Parks group"
|
||||
expect(page).to have_button "Manage headings from a different group"
|
||||
|
||||
within "button + ul" do
|
||||
expect(page).to have_link "Recreation"
|
||||
expect(page).to have_link "Entertainment"
|
||||
page.find("button + ul") do |list|
|
||||
expect(list).to have_link "Recreation"
|
||||
expect(list).to have_link "Entertainment"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,116 +13,26 @@ describe Budgets::BudgetComponent do
|
||||
|
||||
render_inline Budgets::BudgetComponent.new(budget)
|
||||
|
||||
within(".budget-header") do
|
||||
expect(page).to have_content("PARTICIPATORY BUDGETS")
|
||||
expect(page).to have_content(budget.name)
|
||||
expect(page).to have_link("Help with participatory budgets")
|
||||
page.find(".budget-header") do |header|
|
||||
expect(header).to have_content "Participatory budgets"
|
||||
expect(header).to have_content budget.name
|
||||
expect(header).to have_link "Help with participatory budgets"
|
||||
end
|
||||
end
|
||||
|
||||
it "shows budget main link when defined" do
|
||||
render_inline Budgets::BudgetComponent.new(budget)
|
||||
|
||||
within(".budget-header") do
|
||||
expect(page).not_to have_css("a.main-link")
|
||||
page.find(".budget-header") do |header|
|
||||
expect(header).not_to have_css ".main-link"
|
||||
end
|
||||
|
||||
budget.update!(main_link_text: "Partitipate now!", main_link_url: "https://consulproject.org")
|
||||
budget.update!(main_link_text: "Participate now!", main_link_url: "https://consulproject.org")
|
||||
|
||||
render_inline Budgets::BudgetComponent.new(budget)
|
||||
|
||||
within(".budget-header") do
|
||||
expect(page).to have_css("a.main-link", text: "Participate now!", href: "https://consulproject.org")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "map" do
|
||||
before do
|
||||
Setting["feature.map"] = true
|
||||
end
|
||||
|
||||
it "displays investment's map location markers" do
|
||||
investment1 = create(:budget_investment, heading: heading)
|
||||
investment2 = create(:budget_investment, heading: heading)
|
||||
investment3 = create(:budget_investment, heading: heading)
|
||||
|
||||
create(:map_location, longitude: 40.1234, latitude: -3.634, investment: investment1)
|
||||
create(:map_location, longitude: 40.1235, latitude: -3.635, investment: investment2)
|
||||
create(:map_location, longitude: 40.1236, latitude: -3.636, investment: investment3)
|
||||
|
||||
render_inline Budgets::BudgetComponent.new(budget)
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 3)
|
||||
end
|
||||
end
|
||||
|
||||
it "displays all investment's map location if there are no selected" do
|
||||
budget.update!(phase: :publishing_prices)
|
||||
|
||||
investment1 = create(:budget_investment, heading: heading)
|
||||
investment2 = create(:budget_investment, heading: heading)
|
||||
investment3 = create(:budget_investment, heading: heading)
|
||||
investment4 = create(:budget_investment, heading: heading)
|
||||
|
||||
investment1.create_map_location(longitude: 40.1234, latitude: 3.1234, zoom: 10)
|
||||
investment2.create_map_location(longitude: 40.1235, latitude: 3.1235, zoom: 10)
|
||||
investment3.create_map_location(longitude: 40.1236, latitude: 3.1236, zoom: 10)
|
||||
investment4.create_map_location(longitude: 40.1240, latitude: 3.1240, zoom: 10)
|
||||
|
||||
render_inline Budgets::BudgetComponent.new(budget)
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 4)
|
||||
end
|
||||
end
|
||||
|
||||
it "displays only selected investment's map location from publishing prices phase" do
|
||||
budget.update!(phase: :publishing_prices)
|
||||
|
||||
investment1 = create(:budget_investment, :selected, heading: heading)
|
||||
investment2 = create(:budget_investment, :selected, heading: heading)
|
||||
investment3 = create(:budget_investment, heading: heading)
|
||||
investment4 = create(:budget_investment, heading: heading)
|
||||
|
||||
investment1.create_map_location(longitude: 40.1234, latitude: 3.1234, zoom: 10)
|
||||
investment2.create_map_location(longitude: 40.1235, latitude: 3.1235, zoom: 10)
|
||||
investment3.create_map_location(longitude: 40.1236, latitude: 3.1236, zoom: 10)
|
||||
investment4.create_map_location(longitude: 40.1240, latitude: 3.1240, zoom: 10)
|
||||
|
||||
render_inline Budgets::BudgetComponent.new(budget)
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 2)
|
||||
end
|
||||
end
|
||||
|
||||
scenario "skips invalid map markers" do
|
||||
map_locations = []
|
||||
|
||||
investment = create(:budget_investment, heading: heading)
|
||||
|
||||
map_locations << { longitude: 40.123456789, latitude: 3.12345678 }
|
||||
map_locations << { longitude: 40.123456789, latitude: "********" }
|
||||
map_locations << { longitude: "**********", latitude: 3.12345678 }
|
||||
|
||||
coordinates = map_locations.map do |map_location|
|
||||
{
|
||||
lat: map_location[:latitude],
|
||||
long: map_location[:longitude],
|
||||
investment_title: investment.title,
|
||||
investment_id: investment.id,
|
||||
budget_id: budget.id
|
||||
}
|
||||
end
|
||||
|
||||
allow_any_instance_of(Budgets::BudgetComponent).to receive(:coordinates).and_return(coordinates)
|
||||
|
||||
render_inline Budgets::BudgetComponent.new(budget)
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 1)
|
||||
page.find(".budget-header") do |header|
|
||||
expect(header).to have_link "Participate now!", href: "https://consulproject.org", class: "main-link"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,9 +7,9 @@ describe Budgets::SubheaderComponent do
|
||||
|
||||
render_inline Budgets::SubheaderComponent.new(budget)
|
||||
|
||||
within(".budget-subheader") do
|
||||
expect(page).to have_content "CURRENT PHASE"
|
||||
expect(page).to have_content "Information"
|
||||
page.find(".budget-subheader") do |subheader|
|
||||
expect(subheader).to have_content "Current phase"
|
||||
expect(subheader).to have_content "Information"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -18,6 +18,10 @@ module ViewComponent
|
||||
def sign_in(user)
|
||||
allow(controller).to receive(:current_user).and_return(user)
|
||||
end
|
||||
|
||||
def within(...)
|
||||
raise "`within` doesn't work in component tests. Use `page.find` instead."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -232,6 +232,98 @@ describe "Budgets" do
|
||||
expect(page).to have_css(".tabs-panel.is-active", count: 1)
|
||||
end
|
||||
|
||||
context "Index map" do
|
||||
let(:heading) { create(:budget_heading, budget: budget) }
|
||||
|
||||
before do
|
||||
Setting["feature.map"] = true
|
||||
end
|
||||
|
||||
scenario "Display investment's map location markers" do
|
||||
investment1 = create(:budget_investment, heading: heading)
|
||||
investment2 = create(:budget_investment, heading: heading)
|
||||
investment3 = create(:budget_investment, heading: heading)
|
||||
|
||||
create(:map_location, longitude: 40.1234, latitude: -3.634, investment: investment1)
|
||||
create(:map_location, longitude: 40.1235, latitude: -3.635, investment: investment2)
|
||||
create(:map_location, longitude: 40.1236, latitude: -3.636, investment: investment3)
|
||||
|
||||
visit budgets_path
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 3, visible: :all)
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Display all investment's map location if there are no selected" do
|
||||
budget.update!(phase: :publishing_prices)
|
||||
|
||||
investment1 = create(:budget_investment, heading: heading)
|
||||
investment2 = create(:budget_investment, heading: heading)
|
||||
investment3 = create(:budget_investment, heading: heading)
|
||||
investment4 = create(:budget_investment, heading: heading)
|
||||
|
||||
investment1.create_map_location(longitude: 40.1234, latitude: 3.1234, zoom: 10)
|
||||
investment2.create_map_location(longitude: 40.1235, latitude: 3.1235, zoom: 10)
|
||||
investment3.create_map_location(longitude: 40.1236, latitude: 3.1236, zoom: 10)
|
||||
investment4.create_map_location(longitude: 40.1240, latitude: 3.1240, zoom: 10)
|
||||
|
||||
visit budgets_path
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 4, visible: :all)
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Display only selected investment's map location from publishing prices phase" do
|
||||
budget.update!(phase: :publishing_prices)
|
||||
|
||||
investment1 = create(:budget_investment, :selected, heading: heading)
|
||||
investment2 = create(:budget_investment, :selected, heading: heading)
|
||||
investment3 = create(:budget_investment, heading: heading)
|
||||
investment4 = create(:budget_investment, heading: heading)
|
||||
|
||||
investment1.create_map_location(longitude: 40.1234, latitude: 3.1234, zoom: 10)
|
||||
investment2.create_map_location(longitude: 40.1235, latitude: 3.1235, zoom: 10)
|
||||
investment3.create_map_location(longitude: 40.1236, latitude: 3.1236, zoom: 10)
|
||||
investment4.create_map_location(longitude: 40.1240, latitude: 3.1240, zoom: 10)
|
||||
|
||||
visit budgets_path
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 2, visible: :all)
|
||||
end
|
||||
end
|
||||
|
||||
scenario "Skip invalid map markers" do
|
||||
map_locations = []
|
||||
|
||||
investment = create(:budget_investment, heading: heading)
|
||||
|
||||
map_locations << { longitude: 40.123456789, latitude: 3.12345678 }
|
||||
map_locations << { longitude: 40.123456789, latitude: "********" }
|
||||
map_locations << { longitude: "**********", latitude: 3.12345678 }
|
||||
|
||||
coordinates = map_locations.map do |map_location|
|
||||
{
|
||||
lat: map_location[:latitude],
|
||||
long: map_location[:longitude],
|
||||
investment_title: investment.title,
|
||||
investment_id: investment.id,
|
||||
budget_id: budget.id
|
||||
}
|
||||
end
|
||||
|
||||
allow_any_instance_of(Budgets::BudgetComponent).to receive(:coordinates).and_return(coordinates)
|
||||
|
||||
visit budgets_path
|
||||
|
||||
within ".map_location" do
|
||||
expect(page).to have_css(".map-icon", count: 1, visible: :all)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "Show" do
|
||||
let!(:budget) { create(:budget, :selecting) }
|
||||
let!(:group) { create(:budget_group, budget: budget) }
|
||||
|
||||
Reference in New Issue
Block a user