diff --git a/app/helpers/admin_budget_investments_helper.rb b/app/helpers/admin_budget_investments_helper.rb
index 08c600243..f34fbcb65 100644
--- a/app/helpers/admin_budget_investments_helper.rb
+++ b/app/helpers/admin_budget_investments_helper.rb
@@ -13,16 +13,16 @@ module AdminBudgetInvestmentsHelper
params[:advanced_filters] = [] unless params[:advanced_filters]
end
- def admin_select_options
- Administrator.with_user.map { |v| [v.description_or_name, v.id] }.sort_by { |a| a[0] }
+ def admin_select_options(budget)
+ budget.administrators.with_user.map { |v| [v.description_or_name, v.id] }.sort_by { |a| a[0] }
end
- def valuator_or_group_select_options
- valuator_group_select_options + valuator_select_options
+ def valuator_or_group_select_options(budget)
+ valuator_group_select_options + valuator_select_options(budget)
end
- def valuator_select_options
- Valuator.order("description ASC").order("users.email ASC").includes(:user).
+ def valuator_select_options(budget)
+ budget.valuators.order("description ASC").order("users.email ASC").includes(:user).
map { |v| [v.description_or_email, "valuator_#{v.id}"] }
end
diff --git a/app/views/admin/budget_investments/_search_form.html.erb b/app/views/admin/budget_investments/_search_form.html.erb
index 890700340..8b78a8f73 100644
--- a/app/views/admin/budget_investments/_search_form.html.erb
+++ b/app/views/admin/budget_investments/_search_form.html.erb
@@ -34,12 +34,12 @@
<%= select_tag :administrator_id,
- options_for_select(admin_select_options, params[:administrator_id]),
+ options_for_select(admin_select_options(@budget), params[:administrator_id]),
{ prompt: t("admin.budget_investments.index.administrator_filter_all") } %>
<%= select_tag :valuator_or_group_id,
- options_for_select(valuator_or_group_select_options, params[:valuator_or_group_id]),
+ options_for_select(valuator_or_group_select_options(@budget), params[:valuator_or_group_id]),
{ prompt: t("admin.budget_investments.index.valuator_filter_all") } %>
diff --git a/spec/helpers/admin_budget_investments_helper_spec.rb b/spec/helpers/admin_budget_investments_helper_spec.rb
new file mode 100644
index 000000000..2c8a0294d
--- /dev/null
+++ b/spec/helpers/admin_budget_investments_helper_spec.rb
@@ -0,0 +1,35 @@
+require "rails_helper"
+
+describe AdminBudgetInvestmentsHelper do
+ describe "#admin_select_options" do
+ it "includes administrators assigned to the budget" do
+ admin = create(:administrator, user: create(:user, username: "Winston"))
+ budget = create(:budget, administrators: [admin])
+
+ expect(admin_select_options(budget)).to eq([["Winston", admin.id]])
+ end
+
+ it "does not include other administrators" do
+ create(:administrator, user: create(:user, username: "Winston"))
+ budget = create(:budget, administrators: [])
+
+ expect(admin_select_options(budget)).to be_empty
+ end
+ end
+
+ describe "#valuator_select_options" do
+ it "includes valuators assigned to the budget" do
+ valuator = create(:valuator, description: "Kodogo")
+ budget = create(:budget, valuators: [valuator])
+
+ expect(valuator_select_options(budget)).to eq([["Kodogo", "valuator_#{valuator.id}"]])
+ end
+
+ it "does not include other valuators" do
+ create(:valuator, description: "Kodogo")
+ budget = create(:budget, valuators: [])
+
+ expect(valuator_select_options(budget)).to be_empty
+ end
+ end
+end
diff --git a/spec/system/admin/budget_investments_spec.rb b/spec/system/admin/budget_investments_spec.rb
index 8b2f1f72b..ec8d4c9ec 100644
--- a/spec/system/admin/budget_investments_spec.rb
+++ b/spec/system/admin/budget_investments_spec.rb
@@ -160,7 +160,8 @@ describe "Admin budget investments" do
user = create(:user, username: "Admin 1")
user2 = create(:user, username: "Admin 2")
administrator = create(:administrator, user: user)
- create(:administrator, user: user2, description: "Alias")
+ administrator2 = create(:administrator, user: user2, description: "Alias")
+ budget.administrators = [administrator, administrator2]
create(:budget_investment, title: "Realocate visitors", budget: budget,
administrator: administrator)
create(:budget_investment, title: "Destroy the city", budget: budget)
@@ -201,6 +202,7 @@ describe "Admin budget investments" do
scenario "Filtering by valuator", :js do
user = create(:user)
valuator = create(:valuator, user: user, description: "Valuator 1")
+ budget.valuators = [valuator]
create(:budget_investment, title: "Realocate visitors", budget: budget, valuators: [valuator])
create(:budget_investment, title: "Destroy the city", budget: budget)
@@ -645,6 +647,7 @@ describe "Admin budget investments" do
scenario "Combination of checkbox with text search", :js do
user = create(:user, username: "Admin 1")
administrator = create(:administrator, user: user)
+ budget.administrators = [administrator]
create(:budget_investment, budget: budget, title: "Educate the children",
administrator: administrator)
@@ -716,6 +719,7 @@ describe "Admin budget investments" do
scenario "Combination of checkbox with text search and checkbox", :js do
user = create(:user, username: "Admin 1")
administrator = create(:administrator, user: user)
+ budget.administrators = [administrator]
create(:budget_investment, :feasible, :finished, budget: budget, title: "Educate the children",
administrator: administrator)