Extract methods in votes components
This way we can make the view code a bit easier to read. We're also changing the order of the conditions a little bit so we only check for the presence of a current user once. To make sure we aren't breaking anything with these changes, we're adding some tests. We're also replacing one system test checking content with a component test, since component tests are much faster.
This commit is contained in:
77
spec/components/proposals/votes_component_spec.rb
Normal file
77
spec/components/proposals/votes_component_spec.rb
Normal file
@@ -0,0 +1,77 @@
|
||||
require "rails_helper"
|
||||
|
||||
describe Proposals::VotesComponent do
|
||||
let(:proposal) { create(:proposal, title: "Create a monthly transport ticket") }
|
||||
let(:component) { Proposals::VotesComponent.new(proposal) }
|
||||
|
||||
describe "support proposal link" do
|
||||
it "is shown as plain text to unverified users" do
|
||||
sign_in(create(:user))
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "Support"
|
||||
expect(page).not_to have_link "Support"
|
||||
end
|
||||
|
||||
it "is shown to verified users" do
|
||||
sign_in(create(:user, :level_two))
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_link count: 1
|
||||
expect(page).to have_link "Support", title: "Support this proposal"
|
||||
expect(page).not_to have_content "You have already supported this proposal. Share it!"
|
||||
end
|
||||
|
||||
it "is replaced with a success message when the proposal is already supported" do
|
||||
sign_in(create(:user, :level_two, votables: [proposal]))
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "You have already supported this proposal. Share it!"
|
||||
expect(page).not_to have_link "Support"
|
||||
end
|
||||
end
|
||||
|
||||
describe "participation not allowed" do
|
||||
it "asks anonymous users to sign in or sign up" do
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_link "sign in", visible: :hidden
|
||||
expect(page).to have_link "sign up", visible: :hidden
|
||||
end
|
||||
|
||||
it "says voting is not allowed to organizations" do
|
||||
sign_in(create(:organization, user: create(:user, :level_two)).user)
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "Organizations are not permitted to vote"
|
||||
expect(page).not_to have_link "sign in", visible: :all
|
||||
expect(page).not_to have_link "sign up", visible: :all
|
||||
end
|
||||
|
||||
it "says only verified users can vote to unverified users" do
|
||||
sign_in(create(:user))
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).to have_content "Only verified users can vote on proposals"
|
||||
expect(page).to have_link "verify your account", visible: :hidden
|
||||
expect(page).not_to have_link "sign in", visible: :all
|
||||
expect(page).not_to have_link "sign up", visible: :all
|
||||
end
|
||||
|
||||
it "is not rendered for verified users" do
|
||||
sign_in(create(:user, :level_two))
|
||||
|
||||
render_inline component
|
||||
|
||||
expect(page).not_to have_css ".participation-not-allowed"
|
||||
expect(page).not_to have_link "verify your account", visible: :all
|
||||
expect(page).not_to have_link "sign in", visible: :all
|
||||
expect(page).not_to have_link "sign up", visible: :all
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user