Merge pull request #4690 from consul/simplify_component_specs

Simplify type and current user in component tests
This commit is contained in:
Javi Martín
2021-09-08 17:05:48 +02:00
committed by GitHub
52 changed files with 81 additions and 85 deletions

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Budgets::DurationComponent, type: :component do
describe Admin::Budgets::DurationComponent do
describe "#dates" do
it "shows both dates when both are defined" do
durable = double(

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Budgets::FormComponent, type: :component do
describe Admin::Budgets::FormComponent do
describe "#voting_styles_select_options" do
it "provides vote kinds" do
types = [["Knapsack", "knapsack"], ["Approval", "approval"]]

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Budgets::IndexComponent, type: :component, controller: Admin::BudgetsController do
describe Admin::Budgets::IndexComponent, controller: Admin::BudgetsController do
before do
allow_any_instance_of(Admin::BudgetsController).to receive(:valid_filters).and_return(["all"])
allow_any_instance_of(Admin::BudgetsController).to receive(:current_filter).and_return("all")

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Budgets::TableActionsComponent, type: :component, controller: Admin::BaseController do
describe Admin::Budgets::TableActionsComponent, controller: Admin::BaseController do
let(:budget) { create(:budget) }
let(:component) { Admin::Budgets::TableActionsComponent.new(budget) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::BudgetsWizard::Headings::GroupSwitcherComponent, type: :component do
describe Admin::BudgetsWizard::Headings::GroupSwitcherComponent do
it "is not rendered for budgets with one group" do
group = create(:budget_group, budget: create(:budget))

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::HiddenTableActionsComponent, type: :component do
describe Admin::HiddenTableActionsComponent do
let(:record) { create(:user) }
let(:component) { Admin::HiddenTableActionsComponent.new(record) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Organizations::TableActionsComponent, type: :component do
describe Admin::Organizations::TableActionsComponent do
let(:organization) { create(:organization) }
let(:component) { Admin::Organizations::TableActionsComponent.new(organization) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Poll::Officers::OfficersComponent, type: :component, controller: Admin::BaseController do
describe Admin::Poll::Officers::OfficersComponent, controller: Admin::BaseController do
let(:existing_officer) { create(:poll_officer, name: "Old officer") }
let(:new_officer) { build(:poll_officer, name: "New officer") }
let(:officers) { [existing_officer, new_officer] }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Poll::Questions::FilterComponent, type: :component do
describe Admin::Poll::Questions::FilterComponent do
it "renders a button to submit the form" do
render_inline Admin::Poll::Questions::FilterComponent.new([])

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Roles::TableActionsComponent, type: :component, controller: Admin::BaseController do
describe Admin::Roles::TableActionsComponent, controller: Admin::BaseController do
let(:user) { create(:user) }
it "renders link to add the role for new records" do

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::Stats::SDG::GoalComponent, type: :component do
describe Admin::Stats::SDG::GoalComponent do
let(:component) { Admin::Stats::SDG::GoalComponent.new(goal: goal) }
let(:goal) { SDG::Goal.sample }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Admin::TableActionsComponent, type: :component, controller: Admin::BaseController do
describe Admin::TableActionsComponent, controller: Admin::BaseController do
let(:record) { create(:banner) }
it "renders links to edit and destroy a record by default" do

View File

@@ -1,13 +1,11 @@
require "rails_helper"
describe Budgets::BudgetComponent, type: :component do
describe Budgets::BudgetComponent do
let(:budget) { create(:budget) }
let(:heading) { create(:budget_heading, budget: budget) }
let(:user) { create(:user) }
before do
allow(controller).to receive(:current_user).and_return(user)
end
before { sign_in(user) }
describe "budget header" do
it "shows budget name and link to help" do

View File

@@ -1,11 +1,7 @@
require "rails_helper"
describe Budgets::InvestmentComponent, type: :component do
let(:user) { create(:user) }
before do
allow(controller).to receive(:current_user).and_return(user)
end
describe Budgets::InvestmentComponent do
before { sign_in(create(:user)) }
it "shows the investment image when defined" do
investment = create(:budget_investment, :with_image)

View File

@@ -1,13 +1,10 @@
require "rails_helper"
describe Budgets::Investments::FormComponent, type: :component do
describe Budgets::Investments::FormComponent do
include Rails.application.routes.url_helpers
let(:budget) { create(:budget) }
before do
allow(controller).to receive(:current_user).and_return(create(:user))
end
before { sign_in(create(:user)) }
around do |example|
with_request_url(new_budget_investment_path(budget)) { example.run }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Budgets::Investments::VotesComponent, type: :component do
describe Budgets::Investments::VotesComponent do
describe "vote link" do
context "when investment shows votes" do
let(:investment) { create(:budget_investment, title: "Renovate sidewalks in Main Street") }
@@ -9,7 +9,7 @@ describe Budgets::Investments::VotesComponent, type: :component do
before { allow(investment).to receive(:should_show_votes?).and_return(true) }
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
@@ -19,8 +19,6 @@ describe Budgets::Investments::VotesComponent, type: :component do
end
it "disables the button to support the investment to unidentified users" do
allow(controller).to receive(:current_user).and_return(nil)
render_inline component
expect(page).to have_button count: 1, disabled: :all
@@ -30,7 +28,7 @@ describe Budgets::Investments::VotesComponent, type: :component do
it "shows the button to remove support when users have supported the investment" do
user = create(:user)
user.up_votes(investment)
allow(controller).to receive(:current_user).and_return(user)
sign_in(user)
render_inline component

View File

@@ -1,14 +1,12 @@
require "rails_helper"
describe Budgets::InvestmentsListComponent, type: :component do
describe Budgets::InvestmentsListComponent do
include Rails.application.routes.url_helpers
let(:budget) { create(:budget, :accepting) }
let(:group) { create(:budget_group, budget: budget) }
let(:heading) { create(:budget_heading, group: group) }
before { allow(controller).to receive(:current_user).and_return(nil) }
describe "#investments" do
let(:component) { Budgets::InvestmentsListComponent.new(budget) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Budgets::PhasesComponent, type: :component do
describe Budgets::PhasesComponent do
let(:budget) { create(:budget) }
it "shows budget current phase main link when defined" do

View File

@@ -1,8 +1,8 @@
require "rails_helper"
describe Budgets::SubheaderComponent, type: :component do
describe Budgets::SubheaderComponent 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)
render_inline Budgets::SubheaderComponent.new(budget)
@@ -17,7 +17,7 @@ describe Budgets::SubheaderComponent, type: :component do
let(:budget) { create(:budget, :accepting) }
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)
@@ -34,7 +34,7 @@ describe Budgets::SubheaderComponent, type: :component do
end
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)
@@ -53,8 +53,6 @@ describe Budgets::SubheaderComponent, type: :component do
end
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)
render_inline Budgets::SubheaderComponent.new(budget)
expect(page).to have_content "To create a new budget investment you must"
@@ -77,12 +75,12 @@ describe Budgets::SubheaderComponent, type: :component do
describe "See results link" do
it "is showed when budget is finished and results are enabled for all users" do
budget = create(:budget, :finished)
allow(controller).to receive(:current_user).and_return(create(:user))
sign_in(create(:user))
render_inline Budgets::SubheaderComponent.new(budget)
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)
expect(page).to have_link "See results"
@@ -90,12 +88,12 @@ describe Budgets::SubheaderComponent, type: :component do
it "is not showed when budget is finished or results are disabled for all users" do
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)
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)
expect(page).not_to have_link "See results"

View File

@@ -1,10 +1,9 @@
require "rails_helper"
describe Budgets::SupportsInfoComponent, type: :component do
describe Budgets::SupportsInfoComponent do
let(:budget) { create(:budget, :selecting) }
let(:group) { create(:budget_group, budget: budget) }
let(:component) { Budgets::SupportsInfoComponent.new(budget) }
before { allow(component).to receive(:current_user).and_return(nil) }
it "renders when the budget is selecting" do
create(:budget_heading, group: group)
@@ -42,7 +41,7 @@ describe Budgets::SupportsInfoComponent, type: :component do
context "logged users" do
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
heading = create(:budget_heading, budget: budget)
@@ -67,8 +66,6 @@ describe Budgets::SupportsInfoComponent, type: :component do
it "does not show supports for another budget" do
second_budget = create(:budget, phase: "selecting")
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, 3, :selected, budget: second_budget, voters: [user])
@@ -76,6 +73,8 @@ describe Budgets::SupportsInfoComponent, type: :component do
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."

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Layout::LocaleSwitcherComponent, type: :component do
describe Layout::LocaleSwitcherComponent do
let(:component) { Layout::LocaleSwitcherComponent.new }
around do |example|

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Layout::SocialComponent, type: :component do
describe Layout::SocialComponent do
describe "#render?" do
it "renders when a social setting is present" do
Setting["twitter_handle"] = "myhandle"

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Layout::TopLinksComponent, type: :component do
describe Layout::TopLinksComponent do
describe "#render?" do
it "renders when a content block is defined" do
create(:site_customization_content_block, name: "top_links")

View File

@@ -1,13 +1,12 @@
require "rails_helper"
describe MachineLearning::CommentsSummaryComponent, type: :component do
describe MachineLearning::CommentsSummaryComponent do
let(:commentable) { double(summary_comment: double(body: "There's a general agreement")) }
let(:component) { MachineLearning::CommentsSummaryComponent.new(commentable) }
before do
Setting["feature.machine_learning"] = true
Setting["machine_learning.comments_summary"] = true
allow(controller).to receive(:current_user).and_return(nil)
end
it "is displayed when the setting is enabled" do

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Pages::Help::SectionComponent, type: :component do
describe Pages::Help::SectionComponent do
describe "#image_path" do
it "returns the image for the first fallback language with an image" do
allow(I18n).to receive(:fallbacks).and_return({ en: [:es, :de] })

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Relationable::RelatedListComponent, type: :component do
describe Relationable::RelatedListComponent do
let(:proposal) { create(:proposal) }
let(:user_proposal) { create(:proposal, title: "I am user related") }
let(:machine_proposal) { create(:proposal, title: "I am machine related") }
@@ -14,8 +14,6 @@ describe Relationable::RelatedListComponent, type: :component do
create(:related_content, parent_relationable: proposal,
child_relationable: machine_proposal,
machine_learning: true)
allow(controller).to receive(:current_user).and_return(nil)
end
it "displays machine learning and user content when machine learning is enabled" do

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Goals::HelpPageComponent, type: :component do
describe SDG::Goals::HelpPageComponent do
let(:goals) { SDG::Goal.all }
let(:component) { SDG::Goals::HelpPageComponent.new(goals) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Goals::IndexComponent, type: :component do
describe SDG::Goals::IndexComponent do
let!(:goals) { SDG::Goal.all }
let!(:phases) { SDG::Phase.all }
let!(:component) { SDG::Goals::IndexComponent.new(goals, header: nil, phases: phases) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Goals::PlainTagListComponent, type: :component do
describe SDG::Goals::PlainTagListComponent do
let(:debate) { create(:debate, sdg_goals: [SDG::Goal[1], SDG::Goal[3]]) }
let(:component) { SDG::Goals::PlainTagListComponent.new(debate) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Goals::ShowComponent, type: :component do
describe SDG::Goals::ShowComponent do
let!(:goal_1) { SDG::Goal[1] }
before do

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Goals::TagCloudComponent, type: :component do
describe SDG::Goals::TagCloudComponent do
before do
Setting["feature.sdg"] = true
Setting["sdg.process.debates"] = true

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Goals::TagListComponent, type: :component do
describe SDG::Goals::TagListComponent do
let(:debate) { create(:debate, sdg_goals: [SDG::Goal[1], SDG::Goal[3]]) }
let(:component) { SDG::Goals::TagListComponent.new(debate) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Goals::TargetsComponent, type: :component do
describe SDG::Goals::TargetsComponent do
let(:goal) { SDG::Goal[1] }
let(:component) { SDG::Goals::TargetsComponent.new(goal) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::RelatedListSelectorComponent, type: :component do
describe SDG::RelatedListSelectorComponent do
let(:debate) { create(:debate) }
let(:form) { ConsulFormBuilder.new(:debate, debate, ActionView::Base.new, {}) }
let(:component) { SDG::RelatedListSelectorComponent.new(form) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::TagListComponent, type: :component do
describe SDG::TagListComponent do
let(:debate) do
create(:debate,
sdg_goals: [SDG::Goal[3]],

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Targets::PlainTagListComponent, type: :component do
describe SDG::Targets::PlainTagListComponent do
let(:debate) do
create(:debate,
sdg_targets: [SDG::Target[1.1], SDG::Target[3.2], create(:sdg_local_target, code: "3.2.1")]

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDG::Targets::TagListComponent, type: :component do
describe SDG::Targets::TagListComponent do
let(:debate) do
create(:debate,
sdg_targets: [SDG::Target[1.1], SDG::Target[3.2], create(:sdg_local_target, code: "3.2.1")]

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDGManagement::MenuComponent, type: :component do
describe SDGManagement::MenuComponent do
let(:component) { SDGManagement::MenuComponent.new }
before do

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDGManagement::Relations::IndexComponent, type: :component, controller: SDGManagement::RelationsController do
describe SDGManagement::Relations::IndexComponent, controller: SDGManagement::RelationsController do
before do
allow_any_instance_of(SDGManagement::RelationsController).to receive(:valid_filters)
.and_return(SDGManagement::RelationsController::FILTERS)

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDGManagement::Relations::SearchComponent, type: :component do
describe SDGManagement::Relations::SearchComponent do
describe "#goal_options" do
it "orders goals by code in the select" do
component = SDGManagement::Relations::SearchComponent.new(label: "Search proposals")

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe SDGManagement::SubnavigationComponent, type: :component do
describe SDGManagement::SubnavigationComponent do
let(:component) do
SDGManagement::SubnavigationComponent.new(current: :goals) do
"Tab content"

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Shared::AdvancedSearchComponent, type: :component do
describe Shared::AdvancedSearchComponent do
let(:component) { Shared::AdvancedSearchComponent.new }
context "JavaScript disabled" do

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Shared::BannerComponent, type: :component do
describe Shared::BannerComponent do
it "renders given a banner" do
banner = create(:banner,
title: "Vote now!",

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Shared::FilterSelectorComponent, type: :component do
describe Shared::FilterSelectorComponent do
it "renders a form with a select" do
component = Shared::FilterSelectorComponent.new(i18n_namespace: "budgets.investments.index")
allow(component).to receive(:valid_filters).and_return(["unfeasible", "winners"])

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Shared::LinkListComponent, type: :component do
describe Shared::LinkListComponent do
it "renders nothing with an empty list" do
render_inline Shared::LinkListComponent.new

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Shared::TagListComponent, type: :component do
describe Shared::TagListComponent do
let(:user_tag) { create(:tag, name: "user tag") }
let(:ml_tag) { create(:tag, name: "machine learning tag") }
let(:proposal) { create(:proposal, tag_list: [user_tag], ml_tag_list: [ml_tag]) }
@@ -9,7 +9,6 @@ describe Shared::TagListComponent, type: :component do
before do
Setting["feature.machine_learning"] = true
Setting["machine_learning.tags"] = true
allow(controller).to receive(:current_user).and_return(create(:administrator).user)
end
it "displays machine learning tags when machine learning is enabled" do

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Widget::Feeds::DebateComponent, type: :component do
describe Widget::Feeds::DebateComponent do
let(:debate) { create(:debate, sdg_goals: [SDG::Goal[1]]) }
let(:component) { Widget::Feeds::DebateComponent.new(debate) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Widget::Feeds::FeedComponent, type: :component do
describe Widget::Feeds::FeedComponent do
it "renders a message when there are no items" do
feed = double(kind: "debates", items: [])
component = Widget::Feeds::FeedComponent.new(feed)

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Widget::Feeds::ProcessComponent, type: :component do
describe Widget::Feeds::ProcessComponent do
let(:process) { create(:legislation_process, sdg_goals: [SDG::Goal[1]]) }
let(:component) { Widget::Feeds::ProcessComponent.new(process) }

View File

@@ -1,6 +1,6 @@
require "rails_helper"
describe Widget::Feeds::ProposalComponent, type: :component do
describe Widget::Feeds::ProposalComponent do
let(:proposal) { create(:proposal, sdg_goals: [SDG::Goal[1]]) }
let(:component) { Widget::Feeds::ProposalComponent.new(proposal) }

View File

@@ -13,6 +13,14 @@ require "capybara/rspec"
require "selenium/webdriver"
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|
config.include ViewComponent::TestHelpers, type: :component
end

View File

@@ -20,6 +20,10 @@ RSpec.configure do |config|
config.include(CommonActions)
config.include(ActiveSupport::Testing::TimeHelpers)
config.define_derived_metadata(file_path: Regexp.new("/spec/components/")) do |metadata|
metadata[:type] = :component
end
config.before(:suite) do
Rails.application.load_seed
end
@@ -79,6 +83,10 @@ RSpec.configure do |config|
sign_in(create(:administrator).user)
end
config.before(:each, type: :component) do
sign_in(nil)
end
config.around(:each, :controller, type: :component) do |example|
with_controller_class(example.metadata[:controller]) { example.run }
end