Browse Source

Update filter helpers

pull/2535/head
Kat 2 years ago committed by kosiakkatrina
parent
commit
620c9f4c55
  1. 51
      app/helpers/filters_helper.rb
  2. 2
      app/models/organisation.rb
  3. 298
      spec/helpers/filters_helper_spec.rb
  4. 4
      spec/models/user_spec.rb

51
app/helpers/filters_helper.rb

@ -85,21 +85,32 @@ module FiltersHelper
end
def owning_organisation_filter_options(user, filter_type)
if applied_filters(filter_type)["owning_organisation"].present? && user.support?
org = Organisation.find(applied_filters(filter_type)["owning_organisation"])
[OpenStruct.new(id: org.id, name: org.name)]
else
[OpenStruct.new(id: "", name: "Select an option")]
if applied_filters(filter_type)["owning_organisation"].present?
organisation_id = applied_filters(filter_type)["owning_organisation"]
org = if user.support?
Organisation.where(id: organisation_id)&.first
else
Organisation.affiliated_organisations(user.organisation).where(id: organisation_id)&.first
end
return [OpenStruct.new(id: org.id, name: org.name)] if org.present?
end
[OpenStruct.new(id: "", name: "Select an option")]
end
def assigned_to_filter_options(filter_type)
if applied_filters(filter_type)["assigned_to"] == "specific_user" && applied_filters(filter_type)["user"].present?
user = User.find(applied_filters(filter_type)["user"]) # make sure this doesn't expose anything weird
[OpenStruct.new(id: user.id, name: user.name, hint: user.email)]
else
[OpenStruct.new(id: "", name: "Select an option", hint: "")]
user_id = applied_filters(filter_type)["user"]
user = if user.support?
User.where(id: user_id)&.first
else
User.affiliated_users(user.organisation).where(id: user_id)&.first
end
return [OpenStruct.new(id: user.id, name: user.name, hint: user.email)] if user.present?
end
[OpenStruct.new(id: "", name: "Select an option", hint: "")]
end
def filter_search_url(category)
@ -143,12 +154,18 @@ module FiltersHelper
end
def managing_organisation_filter_options(user, filter_type)
if applied_filters(filter_type)["managing_organisation"].present? && user.support?
org = Organisation.find(applied_filters(filter_type)["managing_organisation"]) # make sure this doesn't expose anything weird
[OpenStruct.new(id: org.id, name: org.name)]
else
[OpenStruct.new(id: "", name: "Select an option")]
if applied_filters(filter_type)["managing_organisation"].present?
organisation_id = applied_filters(filter_type)["managing_organisation"]
org = if user.support?
Organisation.where(id: organisation_id)&.first
else
Organisation.affiliated_organisations(user.organisation).where(id: organisation_id)&.first
end
return [OpenStruct.new(id: org.id, name: org.name)] if org.present?
end
[OpenStruct.new(id: "", name: "Select an option")]
end
def show_scheme_managing_org_filter?(user)
@ -277,11 +294,11 @@ private
return "All" if session_filters["assigned_to"].include?("all")
return "You" if session_filters["assigned_to"].include?("you")
User.affiliated_users(current_user.organisationq).find(session_filters["user"].to_i).name
selected_user_option = User.affiliated_users(current_user.organisationq).find(session_filters["user"].to_i).name
User.affiliated_users(current_user.organisation).find(session_filters["user"].to_i).name
selected_user_option = User.affiliated_users(current_user.organisation).find(session_filters["user"].to_i)
return unless selected_user_option
"#{selected_user_option.name} (#{selected_user_option.hint})"
"#{selected_user_option.name} (#{selected_user_option.email})"
end
def formatted_owned_by_filter(session_filters, filter_type)

2
app/models/organisation.rb

@ -18,7 +18,7 @@ class Organisation < ApplicationRecord
belongs_to :absorbing_organisation, class_name: "Organisation", optional: true
has_many :absorbed_organisations, class_name: "Organisation", foreign_key: "absorbing_organisation_id"
scope :visible, -> { where(discarded_at: nil) }
scope :affiliated_organisations, ->(organisation) { where(id: (organisation.child_organisations + [organisation] + organisation.parent_organisations).map(&:id)) }
scope :affiliated_organisations, ->(organisation) { where(id: (organisation.child_organisations + [organisation] + organisation.parent_organisations + organisation.absorbed_organisations).map(&:id)) }
def affiliated_stock_owners
ids = []

298
spec/helpers/filters_helper_spec.rb

@ -175,27 +175,146 @@ RSpec.describe FiltersHelper do
context "with a support user" do
let(:user) { FactoryBot.create(:user, :support, organisation: child_organisation) }
it "returns a list of all organisations" do
expect(owning_organisation_filter_options(user, "lettings_logs")).to match_array([
OpenStruct.new(id: "", name: "Select an option"),
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
OpenStruct.new(id: 99, name: "Other organisation"),
])
context "when no organisation is selected in the filters" do
it "returns an empty list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
context "when a specific child organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": child_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
])
end
end
context "when a specific parent organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": parent_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
])
end
end
context "when a specific absorbed organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": absorbed_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
])
end
end
context "when a specific non related organisation is selected in the filters" do
let(:unrelated_organisation) { create(:organisation, name: "Unrelated organisation") }
before do
session[:lettings_logs_filters] = { "owning_organisation": unrelated_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: unrelated_organisation.id, name: "Unrelated organisation"),
])
end
end
context "when a non existing organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": 143_542_542 }.to_json
end
it "returns an empty list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
end
context "with a data coordinator user" do
let(:user) { FactoryBot.create(:user, :data_coordinator, organisation: child_organisation) }
it "returns a list of parent orgs and your own organisation" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
])
context "when no organisation is selected in the filters" do
it "returns an empty list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
context "when a specific child organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": child_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
])
end
end
context "when a specific parent organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": parent_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
])
end
end
context "when a specific absorbed organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": absorbed_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
])
end
end
context "when a specific non related organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": create(:organisation).id }.to_json
end
it "returns an empty list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
context "when a non existing organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "owning_organisation": 143_542_542 }.to_json
end
it "returns an empty list" do
expect(owning_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
end
end
@ -214,27 +333,146 @@ RSpec.describe FiltersHelper do
context "with a support user" do
let(:user) { FactoryBot.create(:user, :support, organisation: parent_organisation) }
it "returns a list of all organisations" do
expect(managing_organisation_filter_options(user, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
OpenStruct.new(id: 99, name: "Other organisation"),
])
context "when no organisation is selected in the filters" do
it "returns an empty list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
context "when a specific child organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": child_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
])
end
end
context "when a specific parent organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": parent_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
])
end
end
context "when a specific absorbed organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": absorbed_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
])
end
end
context "when a specific non related organisation is selected in the filters" do
let(:unrelated_organisation) { create(:organisation, name: "Unrelated organisation") }
before do
session[:lettings_logs_filters] = { "managing_organisation": unrelated_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: unrelated_organisation.id, name: "Unrelated organisation"),
])
end
end
context "when a non existing organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": 143_542_542 }.to_json
end
it "returns an empty list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
end
context "with a data coordinator user" do
let(:user) { FactoryBot.create(:user, :data_coordinator, organisation: parent_organisation) }
it "returns a list of child orgs and your own organisation" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
])
context "when no organisation is selected in the filters" do
it "returns an empty list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
context "when a specific child organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": child_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: child_organisation.id, name: "Child organisation"),
])
end
end
context "when a specific parent organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": parent_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: parent_organisation.id, name: "Parent organisation"),
])
end
end
context "when a specific absorbed organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": absorbed_organisation.id }.to_json
end
it "returns the selected organisation in the list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: absorbed_organisation.id, name: "Absorbed organisation"),
])
end
end
context "when a specific non related organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": create(:organisation).id }.to_json
end
it "returns an empty list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
context "when a non existing organisation is selected in the filters" do
before do
session[:lettings_logs_filters] = { "managing_organisation": 143_542_542 }.to_json
end
it "returns an empty list" do
expect(managing_organisation_filter_options(user.reload, "lettings_logs")).to eq([
OpenStruct.new(id: "", name: "Select an option"),
])
end
end
end
end

4
spec/models/user_spec.rb

@ -174,7 +174,7 @@ RSpec.describe User, type: :model do
end
it "can filter lettings logs by user, year, status, managing_organisation and owning_organisation" do
expect(user.logs_filters).to match_array(%w[years status needstypes assigned_to user managing_organisation owning_organisation bulk_upload_id])
expect(user.logs_filters).to match_array(%w[years status needstypes assigned_to user managing_organisation owning_organisation bulk_upload_id managing_organisation_text_search owning_organisation_text_search user_text_search])
end
end
end
@ -215,7 +215,7 @@ RSpec.describe User, type: :model do
end
it "can filter lettings logs by user, year, status, managing_organisation and owning_organisation" do
expect(user.logs_filters).to match_array(%w[years status needstypes assigned_to user owning_organisation managing_organisation bulk_upload_id])
expect(user.logs_filters).to match_array(%w[years status needstypes assigned_to user owning_organisation managing_organisation bulk_upload_id managing_organisation_text_search owning_organisation_text_search user_text_search])
end
end

Loading…
Cancel
Save