Merge pull request #5078 from consul/link_to_evaluate
Show link to evaluate investments with valuation finished
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<%= budget.current_phase.name %>
|
||||
</td>
|
||||
<td class="investments-count">
|
||||
<%= investments.count %>
|
||||
<%= valuation_open_investments_count %>
|
||||
</td>
|
||||
<td>
|
||||
<% if investments.any? %>
|
||||
|
||||
@@ -9,8 +9,14 @@ class Valuation::Budgets::RowComponent < ApplicationComponent
|
||||
end
|
||||
|
||||
def investments
|
||||
return Budget::Investment.none unless budget.valuating?
|
||||
return Budget::Investment.none unless budget.valuating_or_later?
|
||||
|
||||
budget.investments.visible_to_valuators.by_valuator(current_user.valuator).valuation_open
|
||||
budget.investments.visible_to_valuator(current_user.valuator)
|
||||
end
|
||||
|
||||
def valuation_open_investments_count
|
||||
return 0 unless budget.valuating?
|
||||
|
||||
investments.valuation_open.count
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,8 +16,9 @@ class Valuation::BudgetInvestmentsController < Valuation::BaseController
|
||||
|
||||
def index
|
||||
@heading_filters = heading_filters
|
||||
@investments = if current_user.valuator? && @budget.present?
|
||||
@budget.investments.visible_to_valuators.scoped_filter(params_for_current_valuator, @current_filter)
|
||||
@investments = if current_user.valuator?
|
||||
@budget.investments.visible_to_valuator(current_user.valuator)
|
||||
.scoped_filter(params.permit(:budget_id, :heading_id), @current_filter)
|
||||
.order(cached_votes_up: :desc)
|
||||
.page(params[:page])
|
||||
else
|
||||
@@ -72,7 +73,7 @@ class Valuation::BudgetInvestmentsController < Valuation::BaseController
|
||||
end
|
||||
|
||||
def heading_filters
|
||||
investments = @budget.investments.by_valuator(current_user.valuator&.id).visible_to_valuators.distinct
|
||||
investments = @budget.investments.visible_to_valuator(current_user.valuator).distinct
|
||||
investment_headings = Budget::Heading.where(id: investments.pluck(:heading_id)).sort_by(&:name)
|
||||
|
||||
all_headings_filter = [
|
||||
@@ -92,11 +93,6 @@ class Valuation::BudgetInvestmentsController < Valuation::BaseController
|
||||
end
|
||||
end
|
||||
|
||||
def params_for_current_valuator
|
||||
Budget::Investment.filter_params(params).to_h.merge({ valuator_id: current_user.valuator.id,
|
||||
budget_id: @budget.id })
|
||||
end
|
||||
|
||||
def valuation_params
|
||||
params.require(:budget_investment).permit(allowed_params)
|
||||
end
|
||||
|
||||
@@ -100,6 +100,7 @@ class Budget
|
||||
scope :by_heading, ->(heading_id) { where(heading_id: heading_id) }
|
||||
scope :by_admin, ->(admin_id) { where(administrator_id: admin_id) }
|
||||
scope :by_tag, ->(tag_name) { tagged_with(tag_name).distinct }
|
||||
scope :visible_to_valuator, ->(valuator) { visible_to_valuators.by_valuator(valuator) }
|
||||
|
||||
scope :for_render, -> { includes(:heading) }
|
||||
|
||||
|
||||
@@ -5,46 +5,105 @@ describe Valuation::Budgets::RowComponent do
|
||||
|
||||
before { sign_in(valuator.user) }
|
||||
|
||||
it "Displays visible and assigned investments count when budget is in valuating phase" do
|
||||
budget = create(:budget, :valuating, name: "Sports")
|
||||
describe "investments count" do
|
||||
it "counts visible and assigned investments when the budget is in the valuating phase" do
|
||||
budget = create(:budget, :valuating)
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||
create(:budget_investment, :invisible_to_valuators, budget: budget, valuators: [valuator])
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget)
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).to have_selector(".investments-count", text: "1")
|
||||
expect(page).to have_selector ".investments-count", text: "1"
|
||||
end
|
||||
|
||||
it "Displays zero as investments count when budget is not in valuating phase" do
|
||||
budget = create(:budget, %i[accepting finished].sample, name: "Sports")
|
||||
it "does not count investments with valuation finished" do
|
||||
budget = create(:budget, :valuating)
|
||||
create(:budget_investment, :visible_to_valuators,
|
||||
budget: budget,
|
||||
valuators: [valuator],
|
||||
valuation_finished: true)
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).to have_selector ".investments-count", text: "0"
|
||||
end
|
||||
|
||||
it "displays zero when the budget hasn't reached the valuating phase" do
|
||||
budget = create(:budget, :accepting)
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).to have_selector(".investments-count", text: "0")
|
||||
expect(page).to have_selector ".investments-count", text: "0"
|
||||
end
|
||||
|
||||
it "Displays the link to evaluate investments when valuator has visible investments assigned and budget is
|
||||
in valuating phase" do
|
||||
valuating = create(:budget, :valuating)
|
||||
create(:budget_investment, :visible_to_valuators, budget: valuating, valuators: [valuator])
|
||||
valuating_invisible = create(:budget, :valuating)
|
||||
create(:budget_investment, :invisible_to_valuators, budget: valuating_invisible, valuators: [valuator])
|
||||
valuating_unassigned = create(:budget, :valuating)
|
||||
create(:budget_investment, :visible_to_valuators, budget: valuating_unassigned)
|
||||
accepting = create(:budget, :accepting)
|
||||
create(:budget_investment, :visible_to_valuators, budget: accepting, valuators: [valuator])
|
||||
finished = create(:budget, :finished)
|
||||
create(:budget_investment, :visible_to_valuators, budget: finished, valuators: [valuator])
|
||||
budgets = [valuating, valuating_invisible, valuating_unassigned, accepting, finished]
|
||||
it "displays zero when the valuating phase is over" do
|
||||
budget = create(:budget, :finished)
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.with_collection(budgets)
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page.find("#budget_#{valuating.id}")).to have_link("Evaluate")
|
||||
expect(page.find("#budget_#{valuating_invisible.id}")).not_to have_link("Evaluate")
|
||||
expect(page.find("#budget_#{valuating_unassigned.id}")).not_to have_link("Evaluate")
|
||||
expect(page.find("#budget_#{accepting.id}")).not_to have_link("Evaluate")
|
||||
expect(page.find("#budget_#{finished.id}")).not_to have_link("Evaluate")
|
||||
expect(page).to have_selector ".investments-count", text: "0"
|
||||
end
|
||||
end
|
||||
|
||||
describe "link to evaluate investments" do
|
||||
it "is shown when the valuator has visible investments assigned in the valuating phase" do
|
||||
budget = create(:budget, :valuating)
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).to have_link "Evaluate"
|
||||
end
|
||||
|
||||
it "is shown when the assigned investments have finished valuation" do
|
||||
budget = create(:budget, :valuating)
|
||||
create(:budget_investment, :visible_to_valuators,
|
||||
budget: budget,
|
||||
valuators: [valuator],
|
||||
valuation_finished: true)
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).to have_link "Evaluate"
|
||||
end
|
||||
|
||||
it "is not shown when the assigned investments aren't visible to valuators" do
|
||||
budget = create(:budget, :valuating)
|
||||
create(:budget_investment, :invisible_to_valuators, budget: budget, valuators: [valuator])
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).not_to have_link "Evaluate"
|
||||
end
|
||||
|
||||
it "is not shown when the valuator doesn't have assigned investments" do
|
||||
budget = create(:budget, :valuating)
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget)
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).not_to have_link "Evaluate"
|
||||
end
|
||||
|
||||
it "is not shown when the budget hasn't reached the valuating phase" do
|
||||
budget = create(:budget, :accepting)
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).not_to have_link "Evaluate"
|
||||
end
|
||||
|
||||
it "is shown when the valuating phase is over" do
|
||||
budget = create(:budget, :finished)
|
||||
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||
|
||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
||||
|
||||
expect(page).to have_link "Evaluate"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user