Add method to stub current_user in component tests
We're choosing `sign_in` instead of `login_as` because IMHO component tests are more similar to controller tests than they are to system tests.
This commit is contained in:
@@ -5,9 +5,7 @@ describe Budgets::BudgetComponent do
|
|||||||
let(:heading) { create(:budget_heading, budget: budget) }
|
let(:heading) { create(:budget_heading, budget: budget) }
|
||||||
let(:user) { create(:user) }
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
before do
|
before { sign_in(user) }
|
||||||
allow(controller).to receive(:current_user).and_return(user)
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "budget header" do
|
describe "budget header" do
|
||||||
it "shows budget name and link to help" do
|
it "shows budget name and link to help" do
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
require "rails_helper"
|
require "rails_helper"
|
||||||
|
|
||||||
describe Budgets::InvestmentComponent do
|
describe Budgets::InvestmentComponent do
|
||||||
let(:user) { create(:user) }
|
before { sign_in(create(:user)) }
|
||||||
|
|
||||||
before do
|
|
||||||
allow(controller).to receive(:current_user).and_return(user)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "shows the investment image when defined" do
|
it "shows the investment image when defined" do
|
||||||
investment = create(:budget_investment, :with_image)
|
investment = create(:budget_investment, :with_image)
|
||||||
|
|||||||
@@ -4,10 +4,7 @@ describe Budgets::Investments::FormComponent do
|
|||||||
include Rails.application.routes.url_helpers
|
include Rails.application.routes.url_helpers
|
||||||
|
|
||||||
let(:budget) { create(:budget) }
|
let(:budget) { create(:budget) }
|
||||||
|
before { sign_in(create(:user)) }
|
||||||
before do
|
|
||||||
allow(controller).to receive(:current_user).and_return(create(:user))
|
|
||||||
end
|
|
||||||
|
|
||||||
around do |example|
|
around do |example|
|
||||||
with_request_url(new_budget_investment_path(budget)) { example.run }
|
with_request_url(new_budget_investment_path(budget)) { example.run }
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ describe Budgets::Investments::VotesComponent do
|
|||||||
before { allow(investment).to receive(:should_show_votes?).and_return(true) }
|
before { allow(investment).to receive(:should_show_votes?).and_return(true) }
|
||||||
|
|
||||||
it "displays a button to support the investment to identified users" do
|
it "displays a button to support the investment to identified users" do
|
||||||
allow(controller).to receive(:current_user).and_return(create(:user))
|
sign_in(create(:user))
|
||||||
|
|
||||||
render_inline component
|
render_inline component
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@ describe Budgets::Investments::VotesComponent do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "disables the button to support the investment to unidentified users" do
|
it "disables the button to support the investment to unidentified users" do
|
||||||
allow(controller).to receive(:current_user).and_return(nil)
|
sign_in(nil)
|
||||||
|
|
||||||
render_inline component
|
render_inline component
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ describe Budgets::Investments::VotesComponent do
|
|||||||
it "shows the button to remove support when users have supported the investment" do
|
it "shows the button to remove support when users have supported the investment" do
|
||||||
user = create(:user)
|
user = create(:user)
|
||||||
user.up_votes(investment)
|
user.up_votes(investment)
|
||||||
allow(controller).to receive(:current_user).and_return(user)
|
sign_in(user)
|
||||||
|
|
||||||
render_inline component
|
render_inline component
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ describe Budgets::InvestmentsListComponent do
|
|||||||
let(:group) { create(:budget_group, budget: budget) }
|
let(:group) { create(:budget_group, budget: budget) }
|
||||||
let(:heading) { create(:budget_heading, group: group) }
|
let(:heading) { create(:budget_heading, group: group) }
|
||||||
|
|
||||||
before { allow(controller).to receive(:current_user).and_return(nil) }
|
before { sign_in(nil) }
|
||||||
|
|
||||||
describe "#investments" do
|
describe "#investments" do
|
||||||
let(:component) { Budgets::InvestmentsListComponent.new(budget) }
|
let(:component) { Budgets::InvestmentsListComponent.new(budget) }
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ require "rails_helper"
|
|||||||
|
|
||||||
describe Budgets::SubheaderComponent do
|
describe Budgets::SubheaderComponent do
|
||||||
it "shows budget current phase name" do
|
it "shows budget current phase name" do
|
||||||
allow(controller).to receive(:current_user).and_return(create(:user))
|
sign_in(create(:user))
|
||||||
budget = create(:budget, :informing)
|
budget = create(:budget, :informing)
|
||||||
|
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
@@ -17,7 +17,7 @@ describe Budgets::SubheaderComponent do
|
|||||||
let(:budget) { create(:budget, :accepting) }
|
let(:budget) { create(:budget, :accepting) }
|
||||||
|
|
||||||
it "and user is level_two_or_three_verified shows a link to create a new investment" do
|
it "and user is level_two_or_three_verified shows a link to create a new investment" do
|
||||||
allow(controller).to receive(:current_user).and_return(create(:user, :level_two))
|
sign_in(create(:user, :level_two))
|
||||||
|
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ describe Budgets::SubheaderComponent do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "and user is not verified shows a link to account verification" do
|
it "and user is not verified shows a link to account verification" do
|
||||||
allow(controller).to receive(:current_user).and_return(create(:user))
|
sign_in(create(:user))
|
||||||
|
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ describe Budgets::SubheaderComponent do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "and user is not logged in shows links to sign in and sign up" do
|
it "and user is not logged in shows links to sign in and sign up" do
|
||||||
allow(controller).to receive(:current_user).and_return(nil)
|
sign_in(nil)
|
||||||
|
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
|
|
||||||
@@ -77,12 +77,12 @@ describe Budgets::SubheaderComponent do
|
|||||||
describe "See results link" do
|
describe "See results link" do
|
||||||
it "is showed when budget is finished and results are enabled for all users" do
|
it "is showed when budget is finished and results are enabled for all users" do
|
||||||
budget = create(:budget, :finished)
|
budget = create(:budget, :finished)
|
||||||
allow(controller).to receive(:current_user).and_return(create(:user))
|
sign_in(create(:user))
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
|
|
||||||
expect(page).to have_link "See results"
|
expect(page).to have_link "See results"
|
||||||
|
|
||||||
allow(controller).to receive(:current_user).and_return(create(:administrator).user)
|
sign_in(create(:administrator).user)
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
|
|
||||||
expect(page).to have_link "See results"
|
expect(page).to have_link "See results"
|
||||||
@@ -90,12 +90,12 @@ describe Budgets::SubheaderComponent do
|
|||||||
|
|
||||||
it "is not showed when budget is finished or results are disabled for all users" do
|
it "is not showed when budget is finished or results are disabled for all users" do
|
||||||
budget = create(:budget, :balloting, results_enabled: true)
|
budget = create(:budget, :balloting, results_enabled: true)
|
||||||
allow(controller).to receive(:current_user).and_return(create(:user))
|
sign_in(create(:user))
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
|
|
||||||
expect(page).not_to have_link "See results"
|
expect(page).not_to have_link "See results"
|
||||||
|
|
||||||
allow(controller).to receive(:current_user).and_return(create(:administrator).user)
|
sign_in(create(:administrator).user)
|
||||||
render_inline Budgets::SubheaderComponent.new(budget)
|
render_inline Budgets::SubheaderComponent.new(budget)
|
||||||
|
|
||||||
expect(page).not_to have_link "See results"
|
expect(page).not_to have_link "See results"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ describe Budgets::SupportsInfoComponent do
|
|||||||
let(:budget) { create(:budget, :selecting) }
|
let(:budget) { create(:budget, :selecting) }
|
||||||
let(:group) { create(:budget_group, budget: budget) }
|
let(:group) { create(:budget_group, budget: budget) }
|
||||||
let(:component) { Budgets::SupportsInfoComponent.new(budget) }
|
let(:component) { Budgets::SupportsInfoComponent.new(budget) }
|
||||||
before { allow(component).to receive(:current_user).and_return(nil) }
|
before { sign_in(nil) }
|
||||||
|
|
||||||
it "renders when the budget is selecting" do
|
it "renders when the budget is selecting" do
|
||||||
create(:budget_heading, group: group)
|
create(:budget_heading, group: group)
|
||||||
@@ -42,7 +42,7 @@ describe Budgets::SupportsInfoComponent do
|
|||||||
|
|
||||||
context "logged users" do
|
context "logged users" do
|
||||||
let(:user) { create(:user, :level_two) }
|
let(:user) { create(:user, :level_two) }
|
||||||
before { allow(component).to receive(:current_user).and_return(user) }
|
before { sign_in(user) }
|
||||||
|
|
||||||
it "shows supported investments" do
|
it "shows supported investments" do
|
||||||
heading = create(:budget_heading, budget: budget)
|
heading = create(:budget_heading, budget: budget)
|
||||||
@@ -67,8 +67,6 @@ describe Budgets::SupportsInfoComponent do
|
|||||||
it "does not show supports for another budget" do
|
it "does not show supports for another budget" do
|
||||||
second_budget = create(:budget, phase: "selecting")
|
second_budget = create(:budget, phase: "selecting")
|
||||||
second_component = Budgets::SupportsInfoComponent.new(second_budget)
|
second_component = Budgets::SupportsInfoComponent.new(second_budget)
|
||||||
allow(second_component).to receive(:current_user).and_return(user)
|
|
||||||
|
|
||||||
create_list(:budget_investment, 2, :selected, budget: budget, voters: [user])
|
create_list(:budget_investment, 2, :selected, budget: budget, voters: [user])
|
||||||
create_list(:budget_investment, 3, :selected, budget: second_budget, voters: [user])
|
create_list(:budget_investment, 3, :selected, budget: second_budget, voters: [user])
|
||||||
|
|
||||||
@@ -76,6 +74,8 @@ describe Budgets::SupportsInfoComponent do
|
|||||||
|
|
||||||
expect(page).to have_content "So far you've supported 2 projects."
|
expect(page).to have_content "So far you've supported 2 projects."
|
||||||
|
|
||||||
|
sign_in(user)
|
||||||
|
|
||||||
render_inline second_component
|
render_inline second_component
|
||||||
|
|
||||||
expect(page).to have_content "So far you've supported 3 projects."
|
expect(page).to have_content "So far you've supported 3 projects."
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ describe MachineLearning::CommentsSummaryComponent do
|
|||||||
before do
|
before do
|
||||||
Setting["feature.machine_learning"] = true
|
Setting["feature.machine_learning"] = true
|
||||||
Setting["machine_learning.comments_summary"] = true
|
Setting["machine_learning.comments_summary"] = true
|
||||||
allow(controller).to receive(:current_user).and_return(nil)
|
sign_in(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is displayed when the setting is enabled" do
|
it "is displayed when the setting is enabled" do
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ describe Relationable::RelatedListComponent do
|
|||||||
child_relationable: machine_proposal,
|
child_relationable: machine_proposal,
|
||||||
machine_learning: true)
|
machine_learning: true)
|
||||||
|
|
||||||
allow(controller).to receive(:current_user).and_return(nil)
|
sign_in(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "displays machine learning and user content when machine learning is enabled" do
|
it "displays machine learning and user content when machine learning is enabled" do
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ describe Shared::TagListComponent do
|
|||||||
before do
|
before do
|
||||||
Setting["feature.machine_learning"] = true
|
Setting["feature.machine_learning"] = true
|
||||||
Setting["machine_learning.tags"] = true
|
Setting["machine_learning.tags"] = true
|
||||||
allow(controller).to receive(:current_user).and_return(create(:administrator).user)
|
sign_in(create(:administrator).user)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "displays machine learning tags when machine learning is enabled" do
|
it "displays machine learning tags when machine learning is enabled" do
|
||||||
|
|||||||
@@ -13,6 +13,14 @@ require "capybara/rspec"
|
|||||||
require "selenium/webdriver"
|
require "selenium/webdriver"
|
||||||
require "view_component/test_helpers"
|
require "view_component/test_helpers"
|
||||||
|
|
||||||
|
module ViewComponent
|
||||||
|
module TestHelpers
|
||||||
|
def sign_in(user)
|
||||||
|
allow(controller).to receive(:current_user).and_return(user)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.include ViewComponent::TestHelpers, type: :component
|
config.include ViewComponent::TestHelpers, type: :component
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user