We're testing things from the user's point of view by finding elements given their texts, instead of checking for elements with a certain ID.
132 lines
4.8 KiB
Ruby
132 lines
4.8 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Dashboard::ResourcesComponent do
|
|
let(:proposal) { create(:proposal, :draft) }
|
|
before { sign_in(proposal.author) }
|
|
|
|
describe "Available resources section" do
|
|
let!(:available) { create(:dashboard_action, :resource, :active, title: "Available!") }
|
|
let(:requested) { create(:dashboard_action, :resource, :admin_request, :active, title: "Requested!") }
|
|
let(:executed_action) do
|
|
create(
|
|
:dashboard_executed_action,
|
|
action: requested,
|
|
proposal: proposal,
|
|
executed_at: Time.current
|
|
)
|
|
end
|
|
let(:solved) { create(:dashboard_action, :resource, :admin_request, :active, title: "Solved!") }
|
|
let(:executed_solved_action) do
|
|
create(
|
|
:dashboard_executed_action,
|
|
action: solved,
|
|
proposal: proposal,
|
|
executed_at: Time.current
|
|
)
|
|
end
|
|
let!(:unavailable) do
|
|
create(
|
|
:dashboard_action,
|
|
:resource,
|
|
:active,
|
|
required_supports: proposal.votes_for.size + 1_000,
|
|
title: "Unavailable!"
|
|
)
|
|
end
|
|
|
|
before do
|
|
create(:dashboard_administrator_task, :pending, source: executed_action)
|
|
create(:dashboard_administrator_task, :done, source: executed_solved_action)
|
|
end
|
|
|
|
it "shows available resources for proposal drafts" do
|
|
render_inline Dashboard::ResourcesComponent.new(proposal)
|
|
|
|
expect(page).to have_content "Polls"
|
|
expect(page).to have_content "E-mail"
|
|
expect(page).to have_content "Poster"
|
|
expect(page).to have_content available.title
|
|
expect(page).to have_content unavailable.title
|
|
expect(page).to have_content requested.title
|
|
expect(page).to have_content solved.title
|
|
|
|
page.find(".resource-card", text: "Available!") do |dashboard_action_available|
|
|
expect(dashboard_action_available).to have_link "See resource"
|
|
end
|
|
|
|
page.find(".resource-card", text: "Requested!") do |dashboard_action_requested|
|
|
expect(dashboard_action_requested).to have_content "Resource already requested"
|
|
end
|
|
|
|
page.find(".resource-card", text: "Unavailable!") do |dashboard_action_unavailable|
|
|
expect(dashboard_action_unavailable).to have_content "1.000 supports required"
|
|
end
|
|
|
|
page.find(".resource-card", text: "Solved!") do |dashboard_action_solved|
|
|
expect(dashboard_action_solved).to have_link "See resource"
|
|
end
|
|
end
|
|
|
|
it "shows available resources for published proposals" do
|
|
proposal.update!(published_at: Date.current)
|
|
|
|
render_inline Dashboard::ResourcesComponent.new(proposal)
|
|
|
|
expect(page).to have_content "Polls"
|
|
expect(page).to have_content "E-mail"
|
|
expect(page).to have_content "Poster"
|
|
expect(page).to have_content available.title
|
|
expect(page).to have_content unavailable.title
|
|
expect(page).to have_content requested.title
|
|
expect(page).to have_content solved.title
|
|
|
|
page.find(".resource-card", text: "Available!") do |dashboard_action_available|
|
|
expect(dashboard_action_available).to have_link "See resource"
|
|
end
|
|
|
|
page.find(".resource-card", text: "Requested!") do |dashboard_action_requested|
|
|
expect(dashboard_action_requested).to have_content "Resource already requested"
|
|
end
|
|
|
|
page.find(".resource-card", text: "Unavailable!") do |dashboard_action_unavailable|
|
|
expect(dashboard_action_unavailable).to have_content "1.000 supports required"
|
|
end
|
|
|
|
page.find(".resource-card", text: "Solved!") do |dashboard_action_solved|
|
|
expect(dashboard_action_solved).to have_link "See resource"
|
|
end
|
|
end
|
|
|
|
it "does not show resources with published_proposal: true" do
|
|
available.update!(published_proposal: true)
|
|
unavailable.update!(published_proposal: true)
|
|
|
|
render_inline Dashboard::ResourcesComponent.new(proposal)
|
|
|
|
expect(page).to have_content "Polls"
|
|
expect(page).to have_content "E-mail"
|
|
expect(page).to have_content "Poster"
|
|
expect(page).not_to have_content available.title
|
|
expect(page).not_to have_content unavailable.title
|
|
end
|
|
end
|
|
|
|
describe "Tags for new actions" do
|
|
it "displays tag 'new' only when resource is detected like new action" do
|
|
create(:dashboard_action, :resource, :active, title: "Old!")
|
|
new_resource = create(:dashboard_action, :resource, :active, title: "Recent!")
|
|
new_actions_since_last_login = [new_resource.id]
|
|
|
|
render_inline Dashboard::ResourcesComponent.new(proposal, new_actions_since_last_login)
|
|
|
|
page.find(".resource-card", text: "Recent!") do |dashboard_action_new_resource|
|
|
expect(dashboard_action_new_resource).to have_content "New"
|
|
end
|
|
|
|
page.find(".resource-card", text: "Old!") do |dashboard_action_old_resource|
|
|
expect(dashboard_action_old_resource).not_to have_content "New"
|
|
end
|
|
end
|
|
end
|
|
end
|