From c710d642cc63aacdab7270d308dbdda1a6b6f3d8 Mon Sep 17 00:00:00 2001 From: Jack S <113976590+bibblobcode@users.noreply.github.com> Date: Fri, 21 Oct 2022 15:45:58 +0100 Subject: [PATCH 1/5] [CLDC-1659] new managing agent page (#948) * Add managing agents page * Rubocop fixes --- app/components/search_component.rb | 2 + .../organisation_relationships_controller.rb | 13 +++ app/helpers/navigation_items_helper.rb | 16 +++- app/models/bulk_upload.rb | 5 +- app/models/organisation.rb | 2 + .../_managing_agent_list.erb | 22 +++++ .../housing_providers.html.erb | 2 +- .../managing_agents.html.erb | 26 +++++ config/initializers/feature_toggle.rb | 6 ++ config/routes.rb | 1 + db/seeds.rb | 17 +++- spec/helpers/navigation_items_helper_spec.rb | 21 ++-- spec/models/organisation_spec.rb | 34 +++++++ spec/requests/form_controller_spec.rb | 4 +- spec/requests/locations_controller_spec.rb | 8 +- .../requests/organisations_controller_spec.rb | 96 +++++++++++++++++++ spec/requests/users_controller_spec.rb | 6 +- 17 files changed, 252 insertions(+), 29 deletions(-) create mode 100644 app/views/organisation_relationships/_managing_agent_list.erb create mode 100644 app/views/organisation_relationships/managing_agents.html.erb diff --git a/app/components/search_component.rb b/app/components/search_component.rb index 23b5ea65e..e9fe83a3a 100644 --- a/app/components/search_component.rb +++ b/app/components/search_component.rb @@ -17,6 +17,8 @@ class SearchComponent < ViewComponent::Base request.path elsif request.path.include?("organisations") && request.path.include?("housing-providers") request.path + elsif request.path.include?("organisations") && request.path.include?("managing-agents") + request.path elsif request.path.include?("users") user_path(current_user) elsif request.path.include?("organisations") diff --git a/app/controllers/organisation_relationships_controller.rb b/app/controllers/organisation_relationships_controller.rb index 98456ac7b..355650914 100644 --- a/app/controllers/organisation_relationships_controller.rb +++ b/app/controllers/organisation_relationships_controller.rb @@ -18,6 +18,19 @@ class OrganisationRelationshipsController < ApplicationController end end + def managing_agents + managing_agents = organisation.managing_agents + unpaginated_filtered_managing_agents = filtered_collection(managing_agents, search_term) + respond_to do |format| + format.html do + @pagy, @managing_agents = pagy(unpaginated_filtered_managing_agents) + @searched = search_term.presence + @total_count = managing_agents.size + render "organisation_relationships/managing_agents", layout: "application" + end + end + end + private def organisation diff --git a/app/helpers/navigation_items_helper.rb b/app/helpers/navigation_items_helper.rb index a8cbef13d..f8147ccd3 100644 --- a/app/helpers/navigation_items_helper.rb +++ b/app/helpers/navigation_items_helper.rb @@ -17,7 +17,8 @@ module NavigationItemsHelper NavigationItem.new("Schemes", "/schemes", subnav_supported_housing_schemes_path?(path)), NavigationItem.new("Users", users_organisation_path(current_user.organisation), subnav_users_path?(path)), NavigationItem.new("About your organisation", "/organisations/#{current_user.organisation.id}", subnav_details_path?(path)), - NavigationItem.new("Housing providers", housing_providers_organisation_path(current_user.organisation), housing_providers_path?(path)), + (NavigationItem.new("Housing providers", housing_providers_organisation_path(current_user.organisation), housing_providers_path?(path)) if FeatureToggle.managing_owning_enabled?), + (NavigationItem.new("Managing agents", managing_agents_organisation_path(current_user.organisation), managing_agents_path?(path)) if FeatureToggle.managing_owning_enabled?), ].compact else [ @@ -25,7 +26,8 @@ module NavigationItemsHelper FeatureToggle.sales_log_enabled? ? NavigationItem.new("Sales logs", sales_logs_path, sales_logs_current?(path)) : nil, NavigationItem.new("Users", users_organisation_path(current_user.organisation), subnav_users_path?(path)), NavigationItem.new("About your organisation", "/organisations/#{current_user.organisation.id}", subnav_details_path?(path)), - NavigationItem.new("Housing providers", housing_providers_organisation_path(current_user.organisation), housing_providers_path?(path)), + (NavigationItem.new("Housing providers", housing_providers_organisation_path(current_user.organisation), housing_providers_path?(path)) if FeatureToggle.managing_owning_enabled?), + (NavigationItem.new("Managing agents", managing_agents_organisation_path(current_user.organisation), managing_agents_path?(path)) if FeatureToggle.managing_owning_enabled?), ].compact end end @@ -38,7 +40,8 @@ module NavigationItemsHelper NavigationItem.new("Schemes", "/organisations/#{current_organisation_id}/schemes", subnav_supported_housing_schemes_path?(path)), NavigationItem.new("Users", "/organisations/#{current_organisation_id}/users", subnav_users_path?(path)), NavigationItem.new("About this organisation", "/organisations/#{current_organisation_id}", subnav_details_path?(path)), - NavigationItem.new("Housing providers", "/organisations/#{current_organisation_id}/housing-providers", housing_providers_path?(path)), + (NavigationItem.new("Housing providers", housing_providers_organisation_path(current_user.organisation), housing_providers_path?(path)) if FeatureToggle.managing_owning_enabled?), + (NavigationItem.new("Managing agents", managing_agents_organisation_path(current_user.organisation), managing_agents_path?(path)) if FeatureToggle.managing_owning_enabled?), ].compact else [ @@ -46,7 +49,8 @@ module NavigationItemsHelper FeatureToggle.sales_log_enabled? ? NavigationItem.new("Sales logs", "/organisations/#{current_organisation_id}/sales-logs", sales_logs_current?(path)) : nil, NavigationItem.new("Users", "/organisations/#{current_organisation_id}/users", subnav_users_path?(path)), NavigationItem.new("About this organisation", "/organisations/#{current_organisation_id}", subnav_details_path?(path)), - NavigationItem.new("Housing providers", "/organisations/#{current_organisation_id}/housing-providers", housing_providers_path?(path)), + (NavigationItem.new("Housing providers", housing_providers_organisation_path(current_user.organisation), housing_providers_path?(path)) if FeatureToggle.managing_owning_enabled?), + (NavigationItem.new("Managing agents", managing_agents_organisation_path(current_user.organisation), managing_agents_path?(path)) if FeatureToggle.managing_owning_enabled?), ].compact end end @@ -103,4 +107,8 @@ private def housing_providers_path?(path) path.include?("/housing-providers") end + + def managing_agents_path?(path) + path.include?("/managing-agents") + end end diff --git a/app/models/bulk_upload.rb b/app/models/bulk_upload.rb index 183dc274e..fa2a7a0e9 100644 --- a/app/models/bulk_upload.rb +++ b/app/models/bulk_upload.rb @@ -35,10 +35,7 @@ class BulkUpload created_by: current_user, ) map_row(row).each do |attr_key, attr_val| - update = lettings_log.update(attr_key => attr_val) - unless update - # TODO: determine what to do when a bulk upload contains field values that don't pass validations - end + _update = lettings_log.update(attr_key => attr_val) rescue ArgumentError # TODO: determine what we want to do when bulk upload contains totally invalid data for a field. end diff --git a/app/models/organisation.rb b/app/models/organisation.rb index cc7bb49fd..80dc9e6b3 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -15,6 +15,8 @@ class Organisation < ApplicationRecord has_many :housing_provider_relationships, -> { where(relationship_type: OrganisationRelationship::OWNING) }, foreign_key: :child_organisation_id, class_name: "OrganisationRelationship" has_many :housing_providers, through: :housing_provider_relationships, source: :parent_organisation + has_many :managing_agent_relationships, -> { where(relationship_type: OrganisationRelationship::MANAGING) }, foreign_key: :parent_organisation_id, class_name: "OrganisationRelationship" + has_many :managing_agents, through: :managing_agent_relationships, source: :child_organisation scope :search_by_name, ->(name) { where("name ILIKE ?", "%#{name}%") } scope :search_by, ->(param) { search_by_name(param) } diff --git a/app/views/organisation_relationships/_managing_agent_list.erb b/app/views/organisation_relationships/_managing_agent_list.erb new file mode 100644 index 000000000..3c69bbf71 --- /dev/null +++ b/app/views/organisation_relationships/_managing_agent_list.erb @@ -0,0 +1,22 @@ +
+ <%= govuk_table do |table| %> + <%= table.caption(classes: %w[govuk-!-font-size-19 govuk-!-font-weight-regular]) do |caption| %> + <%= render(SearchResultCaptionComponent.new(searched:, count: pagy.count, item_label:, total_count:, item: "agents", path: request.path)) %> + <% end %> + <% @managing_agents.each do |managing_agent| %> + <%= table.body do |body| %> + <%= body.row do |row| %> + <% row.cell(text: managing_agent.name) %> + <% if current_user.data_coordinator? || current_user.support? %> + <% row.cell(html_attributes: { + scope: "row", + class: "govuk-!-text-align-right", + }) do %> + <%= govuk_link_to("Remove", "managing-agents/#{managing_agent.id}") %> + <% end %> + <% end %> + <% end %> + <% end %> + <% end %> + <% end %> +
diff --git a/app/views/organisation_relationships/housing_providers.html.erb b/app/views/organisation_relationships/housing_providers.html.erb index 84f38cde6..9f839c58f 100644 --- a/app/views/organisation_relationships/housing_providers.html.erb +++ b/app/views/organisation_relationships/housing_providers.html.erb @@ -20,5 +20,5 @@ <% if @total_count != 0 %> <%= render SearchComponent.new(current_user:, search_label: "Search for a housing provider", value: @searched) %> <%= render partial: "organisation_relationships/housing_provider_list", locals: { index: @housing_providers, title: "Housing providers", pagy: @pagy, searched: @searched, item_label:, total_count: @total_count } %> - <%== render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "housing providers" } %> + <%= render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "housing providers" } %> <% end %> diff --git a/app/views/organisation_relationships/managing_agents.html.erb b/app/views/organisation_relationships/managing_agents.html.erb new file mode 100644 index 000000000..fc9eaa897 --- /dev/null +++ b/app/views/organisation_relationships/managing_agents.html.erb @@ -0,0 +1,26 @@ +<% item_label = format_label(@pagy.count, "managing agents") %> +<% title = "Managing agents" %> +<% content_for :title, title %> +<% if current_user.support? %> + <%= render partial: "organisations/headings", locals: { main: @organisation.name, sub: nil } %> + <%= render SubNavigationComponent.new( + items: secondary_items(request.path, @organisation.id), + ) %> +

managing agents

+

A managing agent can submit logs for your organisation.

+<% else %> + <%= render partial: "organisations/headings", locals: { main: "Your managing agents", sub: nil } %> + +

A managing agent can submit logs for your organisation.

+<% end %> +<% if @total_count == 0 %> +

You do not currently have any managing agents.

+<% end %> +<% if current_user.data_coordinator? || current_user.support? %> + <%= govuk_button_link_to "Add a managing agent", managing_agents_organisation_path(organisation_id: @organisation.id), html: { method: :get } %> +<% end %> +<% if @total_count != 0 %> + <%= render SearchComponent.new(current_user:, search_label: "Search for a managing agent", value: @searched) %> + <%= render partial: "organisation_relationships/managing_agent_list", locals: { index: @managing_agents, title: "Managing agents", pagy: @pagy, searched: @searched, item_label:, total_count: @total_count } %> + <%= render partial: "pagy/nav", locals: { pagy: @pagy, item_name: "Managing agents" } %> +<% end %> diff --git a/config/initializers/feature_toggle.rb b/config/initializers/feature_toggle.rb index 0e01531ca..ca4315e9e 100644 --- a/config/initializers/feature_toggle.rb +++ b/config/initializers/feature_toggle.rb @@ -8,4 +8,10 @@ class FeatureToggle false end + + def self.managing_owning_enabled? + return true unless Rails.env.production? + + false + end end diff --git a/config/routes.rb b/config/routes.rb index e703b853d..9474c5e3f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -80,6 +80,7 @@ Rails.application.routes.draw do get "logs/csv-confirmation", to: "lettings_logs#csv_confirmation" get "schemes", to: "organisations#schemes" get "housing-providers", to: "organisation_relationships#housing_providers" + get "managing-agents", to: "organisation_relationships#managing_agents" end end diff --git a/db/seeds.rb b/db/seeds.rb index 2ad174195..2d241677f 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -18,13 +18,23 @@ unless Rails.env.test? managing_agents_label: "None", provider_type: "LA", ) + managing_agent = Organisation.find_or_create_by!( + name: "Managing Agent", + address_line1: "2 Marsham Street", + address_line2: "London", + postcode: "SW1P 4DF", + holds_own_stock: true, + other_stock_owners: "None", + managing_agents_label: "None", + provider_type: "LA", + ) org = Organisation.find_or_create_by!( name: "DLUHC", address_line1: "2 Marsham Street", address_line2: "London", postcode: "SW1P 4DF", - holds_own_stock: false, + holds_own_stock: true, other_stock_owners: "None", managing_agents_label: "None", provider_type: "LA", @@ -42,6 +52,11 @@ unless Rails.env.test? parent_organisation: housing_provider, relationship_type: OrganisationRelationship::OWNING, ) + OrganisationRelationship.create!( + child_organisation: managing_agent, + parent_organisation: org, + relationship_type: OrganisationRelationship::MANAGING, + ) if Rails.env.development? && User.count.zero? User.create!( diff --git a/spec/helpers/navigation_items_helper_spec.rb b/spec/helpers/navigation_items_helper_spec.rb index 05599c3cf..35cf00725 100644 --- a/spec/helpers/navigation_items_helper_spec.rb +++ b/spec/helpers/navigation_items_helper_spec.rb @@ -20,7 +20,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", users_path, false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -36,7 +35,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", users_path, true), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -52,7 +50,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", users_path, false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, true), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -68,7 +65,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -84,7 +80,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", true), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -100,7 +95,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/schemes", true), NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -252,7 +246,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/organisations/#{current_user.organisation.id}/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -279,7 +272,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/organisations/#{current_user.organisation.id}/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", true), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -306,7 +298,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/organisations/#{current_user.organisation.id}/schemes", true), NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", false), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -333,7 +324,6 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Schemes", "/organisations/#{current_user.organisation.id}/schemes", false), NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", true), - NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), ] end @@ -357,6 +347,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", users_path, false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -374,6 +365,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", users_path, false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -391,6 +383,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", users_path, true), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -408,6 +401,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", users_path, false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, true), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -425,6 +419,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -442,6 +437,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", true), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -459,6 +455,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About your organisation", organisation_path, false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -636,6 +633,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -665,6 +663,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", true), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -694,6 +693,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", false), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end @@ -723,6 +723,7 @@ RSpec.describe NavigationItemsHelper do NavigationItemsHelper::NavigationItem.new("Users", "/organisations/#{current_user.organisation.id}/users", false), NavigationItemsHelper::NavigationItem.new("About this organisation", "/organisations/#{current_user.organisation.id}", true), NavigationItemsHelper::NavigationItem.new("Housing providers", "/organisations/#{current_user.organisation.id}/housing-providers", false), + NavigationItemsHelper::NavigationItem.new("Managing agents", "/organisations/#{current_user.organisation.id}/managing-agents", false), ] end diff --git a/spec/models/organisation_spec.rb b/spec/models/organisation_spec.rb index ec83e7469..d4d63b6a0 100644 --- a/spec/models/organisation_spec.rb +++ b/spec/models/organisation_spec.rb @@ -91,6 +91,40 @@ RSpec.describe Organisation, type: :model do end end + context "with managing association", :aggregate_failures do + let!(:child_organisation) { FactoryBot.create(:organisation, name: "DLUHC Child") } + let!(:grandchild_organisation) { FactoryBot.create(:organisation, name: "DLUHC Grandchild") } + + before do + FactoryBot.create( + :organisation_relationship, + :managing, + child_organisation:, + parent_organisation: organisation, + ) + + FactoryBot.create( + :organisation_relationship, + :owning, + child_organisation:, + parent_organisation: organisation, + ) + + FactoryBot.create( + :organisation_relationship, + :managing, + child_organisation: grandchild_organisation, + parent_organisation: child_organisation, + ) + end + + it "has correct managing_agents" do + expect(organisation.managing_agents).to eq([child_organisation]) + expect(child_organisation.managing_agents).to eq([grandchild_organisation]) + expect(grandchild_organisation.managing_agents).to eq([]) + end + end + context "with data protection confirmations" do before do FactoryBot.create(:data_protection_confirmation, organisation:, confirmed: false, created_at: Time.utc(2018, 0o6, 0o5, 10, 36, 49)) diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb index f879985b8..ade87cfde 100644 --- a/spec/requests/form_controller_spec.rb +++ b/spec/requests/form_controller_spec.rb @@ -158,7 +158,7 @@ RSpec.describe FormController, type: :request do before do Timecop.freeze(Time.zone.local(2022, 12, 1)) - get "/lettings-logs/#{lettings_log_2022.id}/setup/check-answers", headers: headers, params: {} + get "/lettings-logs/#{lettings_log_2022.id}/setup/check-answers", headers:, params: {} end after do @@ -267,7 +267,7 @@ RSpec.describe FormController, type: :request do it "logs that validation was triggered" do expect(Rails.logger).to receive(:info).with("User triggered validation(s) on: age1").once - post "/lettings-logs/#{lettings_log.id}/form", params: params + post "/lettings-logs/#{lettings_log.id}/form", params: end context "when the number of days is too high for the month" do diff --git a/spec/requests/locations_controller_spec.rb b/spec/requests/locations_controller_spec.rb index 66bd96c72..96b3d1b21 100644 --- a/spec/requests/locations_controller_spec.rb +++ b/spec/requests/locations_controller_spec.rb @@ -100,7 +100,7 @@ RSpec.describe LocationsController, type: :request do before do sign_in user - post "/schemes/#{scheme.id}/locations", params: params + post "/schemes/#{scheme.id}/locations", params: end it "creates a new location for scheme with valid params and redirects to correct page" do @@ -302,7 +302,7 @@ RSpec.describe LocationsController, type: :request do before do allow(user).to receive(:need_two_factor_authentication?).and_return(false) sign_in user - post "/schemes/#{scheme.id}/locations", params: params + post "/schemes/#{scheme.id}/locations", params: end it "creates a new location for scheme with valid params and redirects to correct page" do @@ -573,7 +573,7 @@ RSpec.describe LocationsController, type: :request do before do sign_in user - patch "/schemes/#{scheme.id}/locations/#{location.id}", params: params + patch "/schemes/#{scheme.id}/locations/#{location.id}", params: end it "updates existing location for scheme with valid params and redirects to correct page" do @@ -714,7 +714,7 @@ RSpec.describe LocationsController, type: :request do before do allow(user).to receive(:need_two_factor_authentication?).and_return(false) sign_in user - patch "/schemes/#{scheme.id}/locations/#{location.id}", params: params + patch "/schemes/#{scheme.id}/locations/#{location.id}", params: end it "updates a location for scheme with valid params and redirects to correct page" do diff --git a/spec/requests/organisations_controller_spec.rb b/spec/requests/organisations_controller_spec.rb index 25a1eb256..4268785c9 100644 --- a/spec/requests/organisations_controller_spec.rb +++ b/spec/requests/organisations_controller_spec.rb @@ -332,6 +332,54 @@ RSpec.describe OrganisationsController, type: :request do end end + context "when accessing the managing agents tab" do + context "with an organisation that the user belongs to" do + let!(:managing_agent) { FactoryBot.create(:organisation) } + let!(:other_org_managing_agent) { FactoryBot.create(:organisation, name: "Foobar LTD") } + let!(:other_organisation) { FactoryBot.create(:organisation, name: "Foobar LTD") } + + before do + FactoryBot.create(:organisation_relationship, parent_organisation: organisation, child_organisation: managing_agent, relationship_type: OrganisationRelationship.relationship_types[:managing]) + FactoryBot.create(:organisation_relationship, parent_organisation: other_organisation, child_organisation: other_org_managing_agent, relationship_type: OrganisationRelationship.relationship_types[:managing]) + get "/organisations/#{organisation.id}/managing-agents", headers:, params: {} + end + + it "shows the tab navigation" do + expected_html = "