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 %>
|
<%= budget.current_phase.name %>
|
||||||
</td>
|
</td>
|
||||||
<td class="investments-count">
|
<td class="investments-count">
|
||||||
<%= investments.count %>
|
<%= valuation_open_investments_count %>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<% if investments.any? %>
|
<% if investments.any? %>
|
||||||
|
|||||||
@@ -9,8 +9,14 @@ class Valuation::Budgets::RowComponent < ApplicationComponent
|
|||||||
end
|
end
|
||||||
|
|
||||||
def investments
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ class Valuation::BudgetInvestmentsController < Valuation::BaseController
|
|||||||
|
|
||||||
def index
|
def index
|
||||||
@heading_filters = heading_filters
|
@heading_filters = heading_filters
|
||||||
@investments = if current_user.valuator? && @budget.present?
|
@investments = if current_user.valuator?
|
||||||
@budget.investments.visible_to_valuators.scoped_filter(params_for_current_valuator, @current_filter)
|
@budget.investments.visible_to_valuator(current_user.valuator)
|
||||||
|
.scoped_filter(params.permit(:budget_id, :heading_id), @current_filter)
|
||||||
.order(cached_votes_up: :desc)
|
.order(cached_votes_up: :desc)
|
||||||
.page(params[:page])
|
.page(params[:page])
|
||||||
else
|
else
|
||||||
@@ -72,7 +73,7 @@ class Valuation::BudgetInvestmentsController < Valuation::BaseController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def heading_filters
|
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)
|
investment_headings = Budget::Heading.where(id: investments.pluck(:heading_id)).sort_by(&:name)
|
||||||
|
|
||||||
all_headings_filter = [
|
all_headings_filter = [
|
||||||
@@ -92,11 +93,6 @@ class Valuation::BudgetInvestmentsController < Valuation::BaseController
|
|||||||
end
|
end
|
||||||
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
|
def valuation_params
|
||||||
params.require(:budget_investment).permit(allowed_params)
|
params.require(:budget_investment).permit(allowed_params)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -100,6 +100,7 @@ class Budget
|
|||||||
scope :by_heading, ->(heading_id) { where(heading_id: heading_id) }
|
scope :by_heading, ->(heading_id) { where(heading_id: heading_id) }
|
||||||
scope :by_admin, ->(admin_id) { where(administrator_id: admin_id) }
|
scope :by_admin, ->(admin_id) { where(administrator_id: admin_id) }
|
||||||
scope :by_tag, ->(tag_name) { tagged_with(tag_name).distinct }
|
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) }
|
scope :for_render, -> { includes(:heading) }
|
||||||
|
|
||||||
|
|||||||
@@ -5,46 +5,105 @@ describe Valuation::Budgets::RowComponent do
|
|||||||
|
|
||||||
before { sign_in(valuator.user) }
|
before { sign_in(valuator.user) }
|
||||||
|
|
||||||
it "Displays visible and assigned investments count when budget is in valuating phase" do
|
describe "investments count" do
|
||||||
budget = create(:budget, :valuating, name: "Sports")
|
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, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||||
create(:budget_investment, :invisible_to_valuators, budget: budget, valuators: [valuator])
|
create(:budget_investment, :invisible_to_valuators, budget: budget, valuators: [valuator])
|
||||||
create(:budget_investment, :visible_to_valuators, budget: budget)
|
create(:budget_investment, :visible_to_valuators, budget: budget)
|
||||||
|
|
||||||
render_inline Valuation::Budgets::RowComponent.new(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
|
end
|
||||||
|
|
||||||
it "Displays zero as investments count when budget is not in valuating phase" do
|
it "does not count investments with valuation finished" do
|
||||||
budget = create(:budget, %i[accepting finished].sample, name: "Sports")
|
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])
|
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||||
|
|
||||||
render_inline Valuation::Budgets::RowComponent.new(budget: budget)
|
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
|
end
|
||||||
|
|
||||||
it "Displays the link to evaluate investments when valuator has visible investments assigned and budget is
|
it "displays zero when the valuating phase is over" do
|
||||||
in valuating phase" do
|
budget = create(:budget, :finished)
|
||||||
valuating = create(:budget, :valuating)
|
create(:budget_investment, :visible_to_valuators, budget: budget, valuators: [valuator])
|
||||||
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]
|
|
||||||
|
|
||||||
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).to have_selector ".investments-count", text: "0"
|
||||||
expect(page.find("#budget_#{valuating_invisible.id}")).not_to have_link("Evaluate")
|
end
|
||||||
expect(page.find("#budget_#{valuating_unassigned.id}")).not_to have_link("Evaluate")
|
end
|
||||||
expect(page.find("#budget_#{accepting.id}")).not_to have_link("Evaluate")
|
|
||||||
expect(page.find("#budget_#{finished.id}")).not_to have_link("Evaluate")
|
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
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user