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 = "