The `sign_in(nil)` method was a bit hard to understand IMHO. After all, in controller and system tests we don't have to specify no user is signed in; that's the default behavior. So we're making it the default behavior for component tests as well.
85 lines
2.5 KiB
Ruby
85 lines
2.5 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Budgets::SupportsInfoComponent do
|
|
let(:budget) { create(:budget, :selecting) }
|
|
let(:group) { create(:budget_group, budget: budget) }
|
|
let(:component) { Budgets::SupportsInfoComponent.new(budget) }
|
|
|
|
it "renders when the budget is selecting" do
|
|
create(:budget_heading, group: group)
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_selector ".supports-info"
|
|
expect(page).to have_content "It's time to support projects!"
|
|
expect(page).to have_link "Keep scrolling to see all ideas"
|
|
end
|
|
|
|
it "renders the link to see all ideas when there are multiple headings" do
|
|
create_list(:budget_heading, 2, group: group)
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_link "Keep scrolling to see all ideas"
|
|
end
|
|
|
|
it "does not render anything when the budget is not selecting" do
|
|
budget.update!(phase: (Budget::Phase::PHASE_KINDS - ["selecting"]).sample)
|
|
|
|
render_inline component
|
|
|
|
expect(page).not_to have_selector ".supports-info"
|
|
expect(page.text).to be_empty
|
|
end
|
|
|
|
describe "#total_supports" do
|
|
it "does not show supports when users are not logged in" do
|
|
render_inline component
|
|
|
|
expect(page).not_to have_content "So far you've supported"
|
|
end
|
|
|
|
context "logged users" do
|
|
let(:user) { create(:user, :level_two) }
|
|
before { sign_in(user) }
|
|
|
|
it "shows supported investments" do
|
|
heading = create(:budget_heading, budget: budget)
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_content "So far you've supported 0 projects."
|
|
|
|
create(:budget_investment, :selected, heading: heading, voters: [user])
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_content "So far you've supported 1 project."
|
|
|
|
create_list(:budget_investment, 3, :selected, heading: heading, voters: [user])
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_content "So far you've supported 4 projects."
|
|
end
|
|
|
|
it "does not show supports for another budget" do
|
|
second_budget = create(:budget, phase: "selecting")
|
|
second_component = Budgets::SupportsInfoComponent.new(second_budget)
|
|
create_list(:budget_investment, 2, :selected, budget: budget, voters: [user])
|
|
create_list(:budget_investment, 3, :selected, budget: second_budget, voters: [user])
|
|
|
|
render_inline component
|
|
|
|
expect(page).to have_content "So far you've supported 2 projects."
|
|
|
|
sign_in(user)
|
|
|
|
render_inline second_component
|
|
|
|
expect(page).to have_content "So far you've supported 3 projects."
|
|
end
|
|
end
|
|
end
|
|
end
|