Browse Source

[CLDC-20] Submit for other orgs (#968)

* Add scopes to OrganisationRelationship

* Update seeds to have more than one org relationships

* Pass current_user to questions

* Add new questions

* Use feature flag

* Update specs

* Address comments
pull/998/head
Jack S 2 years ago committed by GitHub
parent
commit
fbb06bcb9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      app/helpers/question_attribute_helper.rb
  2. 2
      app/models/form/common/questions/created_by_id.rb
  3. 2
      app/models/form/common/questions/owning_organisation_id.rb
  4. 19
      app/models/form/lettings/pages/created_by.rb
  5. 30
      app/models/form/lettings/pages/housing_provider.rb
  6. 30
      app/models/form/lettings/pages/managing_organisation.rb
  7. 48
      app/models/form/lettings/questions/created_by_id.rb
  8. 68
      app/models/form/lettings/questions/housing_provider.rb
  9. 74
      app/models/form/lettings/questions/managing_organisation.rb
  10. 2
      app/models/form/lettings/questions/scheme_id.rb
  11. 38
      app/models/form/lettings/subsections/setup.rb
  12. 2
      app/models/form/question.rb
  13. 3
      app/models/organisation_relationship.rb
  14. 2
      app/views/form/_radio_question.html.erb
  15. 2
      app/views/form/_select_question.html.erb
  16. 4
      config/initializers/feature_toggle.rb
  17. 8
      db/schema.rb
  18. 42
      db/seeds.rb
  19. 23
      spec/features/lettings_log_spec.rb
  20. 55
      spec/models/form/lettings/pages/created_by_spec.rb
  21. 128
      spec/models/form/lettings/pages/housing_provider_spec.rb
  22. 130
      spec/models/form/lettings/pages/managing_organisation_spec.rb
  23. 82
      spec/models/form/lettings/questions/created_by_id_spec.rb
  24. 117
      spec/models/form/lettings/questions/housing_provider_spec.rb
  25. 155
      spec/models/form/lettings/questions/managing_organisation_spec.rb
  26. 66
      spec/models/form/lettings/subsections/setup_spec.rb
  27. 8
      spec/models/form_handler_spec.rb
  28. 40
      spec/requests/form_controller_spec.rb

2
app/helpers/question_attribute_helper.rb

@ -11,7 +11,7 @@ module QuestionAttributeHelper
{ {
"data-controller": "conditional-question", "data-controller": "conditional-question",
"data-action": "click->conditional-question#displayConditional", "data-action": "click->conditional-question#displayConditional",
"data-info": { conditional_questions: conditional_for, type: type }.to_json, "data-info": { conditional_questions: conditional_for, type: }.to_json,
} }
end end

2
app/models/form/common/questions/created_by_id.rb

@ -19,7 +19,7 @@ class Form::Common::Questions::CreatedById < ::Form::Question
end end
end end
def displayed_answer_options(log) def displayed_answer_options(log, _user = nil)
return answer_options unless log.owning_organisation return answer_options unless log.owning_organisation
user_ids = log.owning_organisation.users.pluck(:id) + [""] user_ids = log.owning_organisation.users.pluck(:id) + [""]

2
app/models/form/common/questions/owning_organisation_id.rb

@ -19,7 +19,7 @@ class Form::Common::Questions::OwningOrganisationId < ::Form::Question
end end
end end
def displayed_answer_options(_log) def displayed_answer_options(_log, _user = nil)
answer_options answer_options
end end

19
app/models/form/lettings/pages/created_by.rb

@ -0,0 +1,19 @@
class Form::Lettings::Pages::CreatedBy < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "created_by"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Lettings::Questions::CreatedById.new(nil, nil, self),
]
end
def routed_to?(_log, current_user)
!!current_user&.support?
end
end

30
app/models/form/lettings/pages/housing_provider.rb

@ -0,0 +1,30 @@
class Form::Lettings::Pages::HousingProvider < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "housing_provider"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Lettings::Questions::HousingProvider.new(nil, nil, self),
]
end
def routed_to?(log, current_user)
return false unless current_user
return true if current_user.support?
return true unless current_user.organisation.holds_own_stock?
housing_providers = current_user.organisation.housing_providers
return false if housing_providers.count.zero?
return true if housing_providers.count > 1
log.update!(owning_organisation: housing_providers.first)
false
end
end

30
app/models/form/lettings/pages/managing_organisation.rb

@ -0,0 +1,30 @@
class Form::Lettings::Pages::ManagingOrganisation < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "managing_organisation"
@header = ""
@description = ""
@subsection = subsection
end
def questions
@questions ||= [
Form::Lettings::Questions::ManagingOrganisation.new(nil, nil, self),
]
end
def routed_to?(log, current_user)
return false unless current_user
return true if current_user.support?
return true unless current_user.organisation.holds_own_stock?
managing_agents = current_user.organisation.managing_agents
return false if managing_agents.count.zero?
return true if managing_agents.count > 1
log.update!(managing_organisation: managing_agents.first)
false
end
end

48
app/models/form/lettings/questions/created_by_id.rb

@ -0,0 +1,48 @@
class Form::Lettings::Questions::CreatedById < ::Form::Question
def initialize(id, hsh, page)
super
@id = "created_by_id"
@check_answer_label = "Log owner"
@header = "Which user are you creating this log for?"
@hint_text = ""
@type = "select"
@page = page
end
def answer_options
answer_opts = { "" => "Select an option" }
return answer_opts unless ActiveRecord::Base.connected?
User.select(:id, :name, :email).each_with_object(answer_opts) do |user, hsh|
hsh[user.id] = "#{user.name} (#{user.email})"
hsh
end
end
def displayed_answer_options(log, _user = nil)
return answer_options unless log.owning_organisation
user_ids = log.owning_organisation.users.pluck(:id) + [""]
answer_options.select { |k, _v| user_ids.include?(k) }
end
def label_from_value(value)
return unless value
answer_options[value]
end
def hidden_in_check_answers?(_log, current_user)
!current_user.support?
end
def derived?
true
end
private
def selected_answer_option_is_derived?(_log)
true
end
end

68
app/models/form/lettings/questions/housing_provider.rb

@ -0,0 +1,68 @@
class Form::Lettings::Questions::HousingProvider < ::Form::Question
attr_accessor :current_user, :log
def initialize(id, hsh, page)
super
@id = "owning_organisation_id"
@check_answer_label = "Housing provider"
@header = "Which organisation owns this property?"
@type = "select"
@page = page
end
def answer_options
answer_opts = { "" => "Select an option" }
return answer_opts unless ActiveRecord::Base.connected?
return answer_opts unless current_user
if !current_user.support? && current_user.organisation.holds_own_stock?
answer_opts[current_user.organisation.id] = "#{current_user.organisation.name} (Your organisation)"
end
answer_opts.merge(housing_providers_answer_options)
end
def displayed_answer_options(log, user = nil)
@current_user = user
@log = log
answer_options
end
def label_from_value(value)
return unless value
answer_options[value]
end
def derived?
true
end
def hidden_in_check_answers?(_log, user = nil)
@current_user = user
return false unless @current_user
return false if @current_user.support?
housing_providers_answer_options.count < 2
end
def enabled
true
end
private
def selected_answer_option_is_derived?(_log)
true
end
def housing_providers_answer_options
@housing_providers_answer_options ||= if current_user.support?
Organisation
else
current_user.organisation.housing_providers
end.pluck(:id, :name).to_h
end
end

74
app/models/form/lettings/questions/managing_organisation.rb

@ -0,0 +1,74 @@
class Form::Lettings::Questions::ManagingOrganisation < ::Form::Question
attr_accessor :current_user, :log
def initialize(id, hsh, page)
super
@id = "managing_organisation_id"
@check_answer_label = "Managing agent"
@header = "Which organisation manages this letting?"
@type = "select"
@answer_options = answer_options
@page = page
end
def answer_options
opts = { "" => "Select an option" }
return opts unless ActiveRecord::Base.connected?
return opts unless current_user
return opts unless log
if current_user.support?
if log.owning_organisation.holds_own_stock?
opts[log.owning_organisation.id] = "#{log.owning_organisation.name} (Owning organisation)"
end
elsif current_user.organisation.holds_own_stock?
opts[current_user.organisation.id] = "#{current_user.organisation.name} (Your organisation)"
end
opts.merge(managing_organisations_answer_options)
end
def displayed_answer_options(log, user)
@current_user = user
@log = log
answer_options
end
def label_from_value(value)
return unless value
answer_options[value]
end
def derived?
true
end
def hidden_in_check_answers?(_log, user = nil)
@current_user = user
return false unless @current_user
return false if @current_user.support?
managing_organisations_answer_options.count < 2
end
def enabled
true
end
private
def selected_answer_option_is_derived?(_log)
true
end
def managing_organisations_answer_options
@managing_organisations_answer_options ||= if current_user.support?
log.owning_organisation
else
current_user.organisation
end.managing_agents.pluck(:id, :name).to_h
end
end

2
app/models/form/lettings/questions/scheme_id.rb

@ -20,7 +20,7 @@ class Form::Lettings::Questions::SchemeId < ::Form::Question
end end
end end
def displayed_answer_options(lettings_log) def displayed_answer_options(lettings_log, _user = nil)
organisation = lettings_log.owning_organisation || lettings_log.created_by&.organisation organisation = lettings_log.owning_organisation || lettings_log.created_by&.organisation
schemes = organisation ? Scheme.select(:id).where(owning_organisation_id: organisation.id, confirmed: true) : Scheme.select(:id).where(confirmed: true) schemes = organisation ? Scheme.select(:id).where(owning_organisation_id: organisation.id, confirmed: true) : Scheme.select(:id).where(confirmed: true)
filtered_scheme_ids = schemes.joins(:locations).merge(Location.where("startdate <= ? or startdate IS NULL", Time.zone.today)).map(&:id) filtered_scheme_ids = schemes.joins(:locations).merge(Location.where("startdate <= ? or startdate IS NULL", Time.zone.today)).map(&:id)

38
app/models/form/lettings/subsections/setup.rb

@ -8,8 +8,10 @@ class Form::Lettings::Subsections::Setup < ::Form::Subsection
def pages def pages
@pages ||= [ @pages ||= [
Form::Common::Pages::Organisation.new(nil, nil, self), organisation_page,
Form::Common::Pages::CreatedBy.new(nil, nil, self), housing_provider_page,
managing_organisation_page,
created_by_page,
Form::Lettings::Pages::NeedsType.new(nil, nil, self), Form::Lettings::Pages::NeedsType.new(nil, nil, self),
Form::Lettings::Pages::Scheme.new(nil, nil, self), Form::Lettings::Pages::Scheme.new(nil, nil, self),
Form::Lettings::Pages::Location.new(nil, nil, self), Form::Lettings::Pages::Location.new(nil, nil, self),
@ -18,11 +20,7 @@ class Form::Lettings::Subsections::Setup < ::Form::Subsection
Form::Lettings::Pages::RentType.new(nil, nil, self), Form::Lettings::Pages::RentType.new(nil, nil, self),
Form::Lettings::Pages::TenantCode.new(nil, nil, self), Form::Lettings::Pages::TenantCode.new(nil, nil, self),
Form::Lettings::Pages::PropertyReference.new(nil, nil, self), Form::Lettings::Pages::PropertyReference.new(nil, nil, self),
] ].compact
end
def applicable_questions(lettings_log)
questions.select { |q| support_only_questions.include?(q.id) } + super
end end
def enabled?(_lettings_log) def enabled?(_lettings_log)
@ -31,7 +29,29 @@ class Form::Lettings::Subsections::Setup < ::Form::Subsection
private private
def support_only_questions def organisation_page
%w[owning_organisation_id created_by_id].freeze return if FeatureToggle.managing_for_other_user_enabled?
Form::Common::Pages::Organisation.new(nil, nil, self)
end
def housing_provider_page
return unless FeatureToggle.managing_for_other_user_enabled?
Form::Lettings::Pages::HousingProvider.new(nil, nil, self)
end
def managing_organisation_page
return unless FeatureToggle.managing_for_other_user_enabled?
Form::Lettings::Pages::ManagingOrganisation.new(nil, nil, self)
end
def created_by_page
if FeatureToggle.managing_for_other_user_enabled?
Form::Lettings::Pages::CreatedBy.new(nil, nil, self)
else
Form::Common::Pages::CreatedBy.new(nil, nil, self)
end
end end
end end

2
app/models/form/question.rb

@ -107,7 +107,7 @@ class Form::Question
false false
end end
def displayed_answer_options(log) def displayed_answer_options(log, _current_user = nil)
answer_options.select do |_key, val| answer_options.select do |_key, val|
!val.is_a?(Hash) || !val["depends_on"] || form.depends_on_met(val["depends_on"], log) !val.is_a?(Hash) || !val["depends_on"] || form.depends_on_met(val["depends_on"], log)
end end

3
app/models/organisation_relationship.rb

@ -2,6 +2,9 @@ class OrganisationRelationship < ApplicationRecord
belongs_to :child_organisation, class_name: "Organisation" belongs_to :child_organisation, class_name: "Organisation"
belongs_to :parent_organisation, class_name: "Organisation" belongs_to :parent_organisation, class_name: "Organisation"
scope :owning, -> { where(relationship_type: OWNING) }
scope :managing, -> { where(relationship_type: MANAGING) }
OWNING = "owning".freeze OWNING = "owning".freeze
MANAGING = "managing".freeze MANAGING = "managing".freeze
RELATIONSHIP_TYPE = { RELATIONSHIP_TYPE = {

2
app/views/form/_radio_question.html.erb

@ -5,7 +5,7 @@
legend: legend(question, page_header, conditional), legend: legend(question, page_header, conditional),
hint: { text: question.hint_text&.html_safe } do %> hint: { text: question.hint_text&.html_safe } do %>
<% question.displayed_answer_options(@log).map do |key, options| %> <% question.displayed_answer_options(@log, current_user).map do |key, options| %>
<% if key.starts_with?("divider") %> <% if key.starts_with?("divider") %>
<%= f.govuk_radio_divider %> <%= f.govuk_radio_divider %>
<% else %> <% else %>

2
app/views/form/_select_question.html.erb

@ -1,7 +1,7 @@
<%= render partial: "form/guidance/#{question.guidance_partial}" if question.top_guidance? %> <%= render partial: "form/guidance/#{question.guidance_partial}" if question.top_guidance? %>
<% selected = @log.public_send(question.id) || "" %> <% selected = @log.public_send(question.id) || "" %>
<% answers = question.displayed_answer_options(@log).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } %> <% answers = question.displayed_answer_options(@log, current_user).map { |key, value| OpenStruct.new(id: key, name: value.respond_to?(:service_name) ? value.service_name : nil, resource: value) } %>
<%= f.govuk_select(question.id.to_sym, <%= f.govuk_select(question.id.to_sym,
label: legend(question, page_header, conditional), label: legend(question, page_header, conditional),
"data-controller": "accessible-autocomplete", "data-controller": "accessible-autocomplete",

4
config/initializers/feature_toggle.rb

@ -20,4 +20,8 @@ class FeatureToggle
false false
end end
def self.managing_for_other_user_enabled?
!Rails.env.production?
end
end end

8
db/schema.rb

@ -360,16 +360,16 @@ ActiveRecord::Schema[7.0].define(version: 2022_11_11_102656) do
t.integer "hholdcount" t.integer "hholdcount"
t.integer "age3" t.integer "age3"
t.integer "age3_known" t.integer "age3_known"
t.string "la"
t.integer "la_known"
t.integer "income1"
t.integer "income1nk"
t.integer "age4" t.integer "age4"
t.integer "age4_known" t.integer "age4_known"
t.integer "age5" t.integer "age5"
t.integer "age5_known" t.integer "age5_known"
t.integer "age6" t.integer "age6"
t.integer "age6_known" t.integer "age6_known"
t.string "la"
t.integer "la_known"
t.integer "income1"
t.integer "income1nk"
t.integer "details_known_2" t.integer "details_known_2"
t.integer "details_known_3" t.integer "details_known_3"
t.integer "details_known_4" t.integer "details_known_4"

42
db/seeds.rb

@ -8,8 +8,8 @@
# rubocop:disable Rails/Output # rubocop:disable Rails/Output
unless Rails.env.test? unless Rails.env.test?
housing_provider = Organisation.find_or_create_by!( housing_provider1 = Organisation.find_or_create_by!(
name: "Housing Provider", name: "Housing Provider 1",
address_line1: "2 Marsham Street", address_line1: "2 Marsham Street",
address_line2: "London", address_line2: "London",
postcode: "SW1P 4DF", postcode: "SW1P 4DF",
@ -18,8 +18,28 @@ unless Rails.env.test?
managing_agents_label: "None", managing_agents_label: "None",
provider_type: "LA", provider_type: "LA",
) )
managing_agent = Organisation.find_or_create_by!( housing_provider2 = Organisation.find_or_create_by!(
name: "Managing Agent", name: "Housing Provider 2",
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",
)
managing_agent1 = Organisation.find_or_create_by!(
name: "Managing Agent 1",
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",
)
managing_agent2 = Organisation.find_or_create_by!(
name: "Managing Agent 2",
address_line1: "2 Marsham Street", address_line1: "2 Marsham Street",
address_line2: "London", address_line2: "London",
postcode: "SW1P 4DF", postcode: "SW1P 4DF",
@ -49,11 +69,21 @@ unless Rails.env.test?
OrganisationRelationship.create!( OrganisationRelationship.create!(
child_organisation: org, child_organisation: org,
parent_organisation: housing_provider, parent_organisation: housing_provider1,
relationship_type: OrganisationRelationship::OWNING,
)
OrganisationRelationship.create!(
child_organisation: org,
parent_organisation: housing_provider2,
relationship_type: OrganisationRelationship::OWNING, relationship_type: OrganisationRelationship::OWNING,
) )
OrganisationRelationship.create!( OrganisationRelationship.create!(
child_organisation: managing_agent, child_organisation: managing_agent1,
parent_organisation: org,
relationship_type: OrganisationRelationship::MANAGING,
)
OrganisationRelationship.create!(
child_organisation: managing_agent2,
parent_organisation: org, parent_organisation: org,
relationship_type: OrganisationRelationship::MANAGING, relationship_type: OrganisationRelationship::MANAGING,
) )

23
spec/features/lettings_log_spec.rb

@ -3,10 +3,10 @@ require "rails_helper"
RSpec.describe "Lettings Log Features" do RSpec.describe "Lettings Log Features" do
context "when searching for specific logs" do context "when searching for specific logs" do
context "when I am signed in and there are logs in the database" do context "when I am signed in and there are logs in the database" do
let(:user) { FactoryBot.create(:user, last_sign_in_at: Time.zone.now) } let(:user) { create(:user, last_sign_in_at: Time.zone.now) }
let!(:log_to_search) { FactoryBot.create(:lettings_log, owning_organisation: user.organisation) } let!(:log_to_search) { create(:lettings_log, owning_organisation: user.organisation) }
let!(:same_organisation_log) { FactoryBot.create(:lettings_log, owning_organisation: user.organisation) } let!(:same_organisation_log) { create(:lettings_log, owning_organisation: user.organisation) }
let!(:another_organisation_log) { FactoryBot.create(:lettings_log) } let!(:another_organisation_log) { create(:lettings_log) }
before do before do
visit("/lettings-logs") visit("/lettings-logs")
@ -58,7 +58,7 @@ RSpec.describe "Lettings Log Features" do
end end
context "when the signed is user is a Support user" do context "when the signed is user is a Support user" do
let(:support_user) { FactoryBot.create(:user, :support, last_sign_in_at: Time.zone.now) } let(:support_user) { create(:user, :support, last_sign_in_at: Time.zone.now) }
let(:devise_notify_mailer) { DeviseNotifyMailer.new } let(:devise_notify_mailer) { DeviseNotifyMailer.new }
let(:notify_client) { instance_double(Notifications::Client) } let(:notify_client) { instance_double(Notifications::Client) }
let(:mfa_template_id) { User::MFA_TEMPLATE_ID } let(:mfa_template_id) { User::MFA_TEMPLATE_ID }
@ -77,26 +77,29 @@ RSpec.describe "Lettings Log Features" do
click_button("Submit") click_button("Submit")
end end
context "when completing the setup lettings log section" do context "when completing the setup lettings log section", :aggregate_failure do
it "includes the organisation and created by questions" do it "includes the organisation and created by questions" do
visit("/lettings-logs") visit("/lettings-logs")
click_button("Create a new lettings log") click_button("Create a new lettings log")
click_link("Set up this lettings log") click_link("Set up this lettings log")
select(support_user.organisation.name, from: "lettings-log-owning-organisation-id-field") select(support_user.organisation.name, from: "lettings-log-owning-organisation-id-field")
click_button("Save and continue") click_button("Save and continue")
select("#{support_user.organisation.name} (Owning organisation)", from: "lettings-log-managing-organisation-id-field")
click_button("Save and continue")
select(support_user.name, from: "lettings-log-created-by-id-field") select(support_user.name, from: "lettings-log-created-by-id-field")
click_button("Save and continue") click_button("Save and continue")
log_id = page.current_path.scan(/\d/).join log_id = page.current_path.scan(/\d/).join
visit("lettings-logs/#{log_id}/setup/check-answers") visit("lettings-logs/#{log_id}/setup/check-answers")
expect(page).to have_content("Owning organisation #{support_user.organisation.name}") expect(page).to have_content("Housing provider #{support_user.organisation.name}")
expect(page).to have_content("User #{support_user.name}") expect(page).to have_content("Managing agent #{support_user.organisation.name}")
expect(page).to have_content("You have answered 2 of 8 questions") expect(page).to have_content("Log owner #{support_user.name}")
expect(page).to have_content("You have answered 3 of 9 questions")
end end
end end
end end
context "when the signed is user is not a Support user" do context "when the signed is user is not a Support user" do
let(:support_user) { FactoryBot.create(:user) } let(:support_user) { create(:user) }
let(:devise_notify_mailer) { DeviseNotifyMailer.new } let(:devise_notify_mailer) { DeviseNotifyMailer.new }
let(:notify_client) { instance_double(Notifications::Client) } let(:notify_client) { instance_double(Notifications::Client) }

55
spec/models/form/lettings/pages/created_by_spec.rb

@ -0,0 +1,55 @@
require "rails_helper"
RSpec.describe Form::Lettings::Pages::CreatedBy, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form) }
let(:lettings_log) { instance_double(LettingsLog) }
describe "#routed_to?" do
context "when nil" do
it "is not shown" do
expect(page.routed_to?(nil, nil)).to eq(false)
end
end
context "when support" do
it "is shown" do
expect(page.routed_to?(nil, create(:user, :support))).to eq(true)
end
end
context "when not support" do
it "is not shown" do
expect(page.routed_to?(nil, create(:user, :data_coordinator))).to eq(false)
end
end
end
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[created_by_id])
end
it "has the correct id" do
expect(page.id).to eq("created_by")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has the correct depends_on" do
expect(page.depends_on).to be nil
end
end

128
spec/models/form/lettings/pages/housing_provider_spec.rb

@ -0,0 +1,128 @@
require "rails_helper"
RSpec.describe Form::Lettings::Pages::HousingProvider, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[owning_organisation_id])
end
it "has the correct id" do
expect(page.id).to eq("housing_provider")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has the correct depends_on" do
expect(page.depends_on).to be nil
end
describe "#routed_to?" do
let(:log) { create(:lettings_log, owning_organisation_id: nil) }
context "when user nil" do
it "is not shown" do
expect(page.routed_to?(log, nil)).to eq(false)
end
it "does not update owning_organisation_id" do
expect { page.routed_to?(log, nil) }.not_to change(log.reload, :owning_organisation).from(nil)
end
end
context "when support" do
let(:user) { create(:user, :support) }
it "is shown" do
expect(page.routed_to?(log, user)).to eq(true)
end
it "does not update owning_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :owning_organisation).from(nil)
end
end
context "when not support" do
context "when does not hold own stock" do
let(:user) do
create(:user, :data_coordinator, organisation: create(:organisation, holds_own_stock: false))
end
it "is shown" do
expect(page.routed_to?(log, user)).to eq(true)
end
it "does not update owning_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :owning_organisation).from(nil)
end
end
context "when holds own stock" do
let(:user) do
create(:user, :data_coordinator, organisation: create(:organisation, holds_own_stock: true))
end
context "with 0 housing_providers" do
it "is not shown" do
expect(page.routed_to?(log, user)).to eq(false)
end
it "does not update owning_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :owning_organisation).from(nil)
end
end
context "with >1 housing_providers" do
before do
create(:organisation_relationship, :owning, child_organisation: user.organisation)
create(:organisation_relationship, :owning, child_organisation: user.organisation)
end
it "is shown" do
expect(page.routed_to?(log, user)).to eq(true)
end
it "does not update owning_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :owning_organisation).from(nil)
end
end
context "with 1 housing_providers" do
let(:housing_provider) { create(:organisation) }
before do
create(
:organisation_relationship,
:owning,
child_organisation: user.organisation,
parent_organisation: housing_provider,
)
end
it "is not shown" do
expect(page.routed_to?(log, user)).to eq(false)
end
it "updates owning_organisation_id" do
expect { page.routed_to?(log, user) }.to change(log.reload, :owning_organisation).from(nil).to(housing_provider)
end
end
end
end
end
end

130
spec/models/form/lettings/pages/managing_organisation_spec.rb

@ -0,0 +1,130 @@
require "rails_helper"
RSpec.describe Form::Lettings::Pages::ManagingOrganisation, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_id) { nil }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form) }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[managing_organisation_id])
end
it "has the correct id" do
expect(page.id).to eq("managing_organisation")
end
it "has the correct header" do
expect(page.header).to eq("")
end
it "has the correct description" do
expect(page.description).to eq("")
end
it "has the correct depends_on" do
expect(page.depends_on).to be nil
end
describe "#routed_to?" do
let(:log) { create(:lettings_log) }
let(:organisation) { create(:organisation) }
context "when user nil" do
it "is not shown" do
expect(page.routed_to?(log, nil)).to eq(false)
end
it "does not update managing_organisation_id" do
expect { page.routed_to?(log, nil) }.not_to change(log.reload, :managing_organisation)
end
end
context "when support" do
let(:organisation) { create(:organisation) }
let(:user) { create(:user, :support, organisation:) }
it "is shown" do
expect(page.routed_to?(log, user)).to eq(true)
end
it "does not update managing_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :managing_organisation)
end
end
context "when not support" do
context "when does not hold own stock" do
let(:user) do
create(:user, :data_coordinator, organisation: create(:organisation, holds_own_stock: false))
end
it "is shown" do
expect(page.routed_to?(log, user)).to eq(true)
end
it "does not update managing_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :managing_organisation)
end
end
context "when holds own stock" do
let(:user) do
create(:user, :data_coordinator, organisation: create(:organisation, holds_own_stock: true))
end
context "with 0 managing_agents" do
it "is not shown" do
expect(page.routed_to?(log, user)).to eq(false)
end
it "does not update managing_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :managing_organisation)
end
end
context "with >1 managing_agents" do
before do
create(:organisation_relationship, :managing, parent_organisation: user.organisation)
create(:organisation_relationship, :managing, parent_organisation: user.organisation)
end
it "is shown" do
expect(page.routed_to?(log, user)).to eq(true)
end
it "does not update managing_organisation_id" do
expect { page.routed_to?(log, user) }.not_to change(log.reload, :managing_organisation)
end
end
context "with 1 managing_agents" do
let(:managing_agent) { create(:organisation) }
before do
create(
:organisation_relationship,
:managing,
child_organisation: managing_agent,
parent_organisation: user.organisation,
)
end
it "is not shown" do
expect(page.routed_to?(log, user)).to eq(false)
end
it "updates managing_organisation_id" do
expect { page.routed_to?(log, user) }.to change(log.reload, :managing_organisation).to(managing_agent)
end
end
end
end
end
end

82
spec/models/form/lettings/questions/created_by_id_spec.rb

@ -0,0 +1,82 @@
require "rails_helper"
RSpec.describe Form::Lettings::Questions::CreatedById, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form) }
let(:user_1) { FactoryBot.create(:user, name: "first user") }
let(:user_2) { FactoryBot.create(:user, name: "second user") }
let!(:expected_answer_options) do
{
"" => "Select an option",
user_1.id => "#{user_1.name} (#{user_1.email})",
user_2.id => "#{user_2.name} (#{user_2.email})",
}
end
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("created_by_id")
end
it "has the correct header" do
expect(question.header).to eq("Which user are you creating this log for?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Log owner")
end
it "has the correct type" do
expect(question.type).to eq("select")
end
it "has the correct hint_text" do
expect(question.hint_text).to eq("")
end
it "has the correct answer options" do
expect(question.answer_options).to eq(expected_answer_options)
end
it "is marked as derived" do
expect(question.derived?).to be true
end
context "when the current user is support" do
let(:support_user) { FactoryBot.build(:user, :support) }
it "is shown in check answers" do
expect(question.hidden_in_check_answers?(nil, support_user)).to be false
end
end
context "when the current user is not support" do
let(:user) { FactoryBot.build(:user) }
it "is not shown in check answers" do
expect(question.hidden_in_check_answers?(nil, user)).to be true
end
end
context "when the owning organisation is already set" do
let(:lettings_log) { FactoryBot.create(:lettings_log, owning_organisation: user_2.organisation) }
let(:expected_answer_options) do
{
"" => "Select an option",
user_2.id => "#{user_2.name} (#{user_2.email})",
}
end
it "only displays users that belong to that organisation" do
expect(question.displayed_answer_options(lettings_log)).to eq(expected_answer_options)
end
end
end

117
spec/models/form/lettings/questions/housing_provider_spec.rb

@ -0,0 +1,117 @@
require "rails_helper"
RSpec.describe Form::Lettings::Questions::HousingProvider, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("owning_organisation_id")
end
it "has the correct header" do
expect(question.header).to eq("Which organisation owns this property?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Housing provider")
end
it "has the correct type" do
expect(question.type).to eq("select")
end
it "has the correct hint_text" do
expect(question.hint_text).to be_nil
end
describe "answer options" do
let(:options) { { "" => "Select an option" } }
context "when current_user nil" do
it "shows default options" do
expect(question.answer_options).to eq(options)
end
end
context "when user not support and owns own stock" do
let(:user) { create(:user, :data_coordinator, organisation: create(:organisation, holds_own_stock: true)) }
let(:options) do
{
"" => "Select an option",
user.organisation.id => "#{user.organisation.name} (Your organisation)",
}
end
before do
question.current_user = user
end
it "shows housing providers with own org at the top" do
expect(question.answer_options).to eq(options)
end
end
context "when user support" do
before do
question.current_user = create(:user, :support)
end
let(:expected_opts) do
Organisation.all.each_with_object(options) do |organisation, hsh|
hsh[organisation.id] = organisation.name
hsh
end
end
it "shows all orgs" do
expect(question.answer_options).to eq(expected_opts)
end
end
end
it "is marked as derived" do
expect(question.derived?).to be true
end
describe "#hidden_in_check_answers?" do
context "when housing providers < 2" do
context "when not support user" do
let(:user) { create(:user) }
it "is hidden in check answers" do
expect(question.hidden_in_check_answers?(nil, user)).to be true
end
end
context "when support" do
let(:user) { create(:user, :support) }
it "is not hiddes in check answers" do
expect(question.hidden_in_check_answers?(nil, user)).to be false
end
end
end
context "when housing providers >= 2" do
let(:user) { create(:user) }
before do
create(:organisation_relationship, :owning, child_organisation: user.organisation)
create(:organisation_relationship, :owning, child_organisation: user.organisation)
end
it "is not hidden in check answers" do
expect(question.hidden_in_check_answers?(nil, user)).to be false
end
end
end
end

155
spec/models/form/lettings/questions/managing_organisation_spec.rb

@ -0,0 +1,155 @@
require "rails_helper"
RSpec.describe Form::Lettings::Questions::ManagingOrganisation, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { nil }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
let(:subsection) { instance_double(Form::Subsection) }
let(:form) { instance_double(Form) }
it "has correct page" do
expect(question.page).to eq(page)
end
it "has the correct id" do
expect(question.id).to eq("managing_organisation_id")
end
it "has the correct header" do
expect(question.header).to eq("Which organisation manages this letting?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Managing agent")
end
it "has the correct type" do
expect(question.type).to eq("select")
end
it "has the correct hint_text" do
expect(question.hint_text).to be_nil
end
describe "#displayed_answer_options" do
let(:options) { { "" => "Select an option" } }
context "when current_user nil" do
let(:log) { create(:lettings_log) }
it "shows default options" do
expect(question.displayed_answer_options(log, nil)).to eq(options)
end
end
context "when log nil" do
let(:user) { create(:user) }
it "shows default options" do
expect(question.displayed_answer_options(nil, user)).to eq(options)
end
end
context "when user not support and owns own stock" do
let(:user) { create(:user, :data_coordinator, organisation: create(:organisation, holds_own_stock: true)) }
let(:log) { create(:lettings_log) }
let!(:org_rel1) { create(:organisation_relationship, :managing, parent_organisation: user.organisation) }
let!(:org_rel2) { create(:organisation_relationship, :managing, parent_organisation: user.organisation) }
let(:options) do
{
"" => "Select an option",
user.organisation.id => "#{user.organisation.name} (Your organisation)",
org_rel1.child_organisation.id => org_rel1.child_organisation.name,
org_rel2.child_organisation.id => org_rel2.child_organisation.name,
}
end
it "shows managing agents with own org at the top" do
expect(question.displayed_answer_options(log, user)).to eq(options)
end
end
context "when support user and org does not own own stock" do
let(:user) { create(:user, :support) }
let(:log_owning_org) { create(:organisation, holds_own_stock: false) }
let(:log) { create(:lettings_log, owning_organisation: log_owning_org) }
let!(:org_rel1) { create(:organisation_relationship, :managing, parent_organisation: log_owning_org) }
let!(:org_rel2) { create(:organisation_relationship, :managing, parent_organisation: log_owning_org) }
let(:options) do
{
"" => "Select an option",
org_rel1.child_organisation.id => org_rel1.child_organisation.name,
org_rel2.child_organisation.id => org_rel2.child_organisation.name,
}
end
it "shows owning org managing agents with hint" do
expect(question.displayed_answer_options(log, user)).to eq(options)
end
end
context "when support user and org does own stock" do
let(:user) { create(:user, :support) }
let(:log_owning_org) { create(:organisation, holds_own_stock: true) }
let(:log) { create(:lettings_log, owning_organisation: log_owning_org) }
let!(:org_rel1) { create(:organisation_relationship, :managing, parent_organisation: log_owning_org) }
let!(:org_rel2) { create(:organisation_relationship, :managing, parent_organisation: log_owning_org) }
let(:options) do
{
"" => "Select an option",
log_owning_org.id => "#{log_owning_org.name} (Owning organisation)",
org_rel1.child_organisation.id => org_rel1.child_organisation.name,
org_rel2.child_organisation.id => org_rel2.child_organisation.name,
}
end
it "shows owning org managing agents
" do
expect(question.displayed_answer_options(log, user)).to eq(options)
end
end
end
it "is marked as derived" do
expect(question.derived?).to be true
end
describe "#hidden_in_check_answers?" do
context "when housing providers < 2" do
context "when not support user" do
let(:user) { create(:user) }
it "is hidden in check answers" do
expect(question.hidden_in_check_answers?(nil, user)).to be true
end
end
context "when support" do
let(:user) { create(:user, :support) }
it "is not hiddes in check answers" do
expect(question.hidden_in_check_answers?(nil, user)).to be false
end
end
end
context "when managing agents >= 2" do
let(:user) { create(:user) }
before do
create(:organisation_relationship, :managing, parent_organisation: user.organisation)
create(:organisation_relationship, :managing, parent_organisation: user.organisation)
end
it "is not hidden in check answers" do
expect(question.hidden_in_check_answers?(nil, user)).to be false
end
end
end
end

66
spec/models/form/lettings/subsections/setup_spec.rb

@ -13,16 +13,19 @@ RSpec.describe Form::Lettings::Subsections::Setup, type: :model do
it "has correct pages" do it "has correct pages" do
expect(setup.pages.map(&:id)).to eq( expect(setup.pages.map(&:id)).to eq(
%w[organisation %w[
created_by housing_provider
needs_type managing_organisation
scheme created_by
location needs_type
renewal scheme
tenancy_start_date location
rent_type renewal
tenant_code tenancy_start_date
property_reference], rent_type
tenant_code
property_reference
],
) )
end end
@ -33,4 +36,47 @@ RSpec.describe Form::Lettings::Subsections::Setup, type: :model do
it "has the correct label" do it "has the correct label" do
expect(setup.label).to eq("Set up this lettings log") expect(setup.label).to eq("Set up this lettings log")
end end
context "when not production" do
it "has correct pages" do
expect(setup.pages.map(&:id)).to eq(
%w[
housing_provider
managing_organisation
created_by
needs_type
scheme
location
renewal
tenancy_start_date
rent_type
tenant_code
property_reference
],
)
end
end
context "when production" do
before do
allow(Rails.env).to receive(:production?).and_return(true)
end
it "has the correct pages" do
expect(setup.pages.map(&:id)).to eq(
%w[
organisation
created_by
needs_type
scheme
location
renewal
tenancy_start_date
rent_type
tenant_code
property_reference
],
)
end
end
end end

8
spec/models/form_handler_spec.rb

@ -27,13 +27,13 @@ RSpec.describe FormHandler do
it "is able to load a current lettings form" do it "is able to load a current lettings form" do
form = form_handler.get_form("current_lettings") form = form_handler.get_form("current_lettings")
expect(form).to be_a(Form) expect(form).to be_a(Form)
expect(form.pages.count).to eq(45) expect(form.pages.count).to eq(46)
end end
it "is able to load a next lettings form" do it "is able to load a next lettings form" do
form = form_handler.get_form("next_lettings") form = form_handler.get_form("next_lettings")
expect(form).to be_a(Form) expect(form).to be_a(Form)
expect(form.pages.count).to eq(12) expect(form.pages.count).to eq(13)
end end
end end
@ -49,13 +49,13 @@ RSpec.describe FormHandler do
it "is able to load a current lettings form" do it "is able to load a current lettings form" do
form = form_handler.get_form("current_lettings") form = form_handler.get_form("current_lettings")
expect(form).to be_a(Form) expect(form).to be_a(Form)
expect(form.pages.count).to eq(12) expect(form.pages.count).to eq(13)
end end
it "is able to load a previous lettings form" do it "is able to load a previous lettings form" do
form = form_handler.get_form("previous_lettings") form = form_handler.get_form("previous_lettings")
expect(form).to be_a(Form) expect(form).to be_a(Form)
expect(form.pages.count).to eq(45) expect(form.pages.count).to eq(46)
end end
it "is able to load a current sales form" do it "is able to load a current sales form" do

40
spec/requests/form_controller_spec.rb

@ -2,18 +2,18 @@ require "rails_helper"
RSpec.describe FormController, type: :request do RSpec.describe FormController, type: :request do
let(:page) { Capybara::Node::Simple.new(response.body) } let(:page) { Capybara::Node::Simple.new(response.body) }
let(:user) { FactoryBot.create(:user) } let(:user) { create(:user) }
let(:organisation) { user.organisation } let(:organisation) { user.organisation }
let(:other_organisation) { FactoryBot.create(:organisation) } let(:other_organisation) { create(:organisation) }
let!(:unauthorized_lettings_log) do let!(:unauthorized_lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
owning_organisation: other_organisation, owning_organisation: other_organisation,
managing_organisation: other_organisation, managing_organisation: other_organisation,
) )
end end
let(:setup_complete_lettings_log) do let(:setup_complete_lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
:about_completed, :about_completed,
status: 1, status: 1,
@ -23,7 +23,7 @@ RSpec.describe FormController, type: :request do
) )
end end
let(:completed_lettings_log) do let(:completed_lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
:completed, :completed,
owning_organisation: organisation, owning_organisation: organisation,
@ -39,7 +39,7 @@ RSpec.describe FormController, type: :request do
context "when a user is not signed in" do context "when a user is not signed in" do
let!(:lettings_log) do let!(:lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
owning_organisation: organisation, owning_organisation: organisation,
managing_organisation: organisation, managing_organisation: organisation,
@ -68,7 +68,7 @@ RSpec.describe FormController, type: :request do
context "when a user is signed in" do context "when a user is signed in" do
let!(:lettings_log) do let!(:lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
owning_organisation: organisation, owning_organisation: organisation,
managing_organisation: organisation, managing_organisation: organisation,
@ -83,8 +83,8 @@ RSpec.describe FormController, type: :request do
describe "GET" do describe "GET" do
context "with form pages" do context "with form pages" do
context "when forms exist for multiple years" do context "when forms exist for multiple years" do
let(:lettings_log_year_1) { FactoryBot.create(:lettings_log, startdate: Time.zone.local(2021, 5, 1), owning_organisation: organisation, created_by: user) } let(:lettings_log_year_1) { create(:lettings_log, startdate: Time.zone.local(2021, 5, 1), owning_organisation: organisation, created_by: user) }
let(:lettings_log_year_2) { FactoryBot.create(:lettings_log, :about_completed, startdate: Time.zone.local(2022, 5, 1), owning_organisation: organisation, created_by: user) } let(:lettings_log_year_2) { create(:lettings_log, :about_completed, startdate: Time.zone.local(2022, 5, 1), owning_organisation: organisation, created_by: user) }
it "displays the correct question details for each lettings log based on form year" do it "displays the correct question details for each lettings log based on form year" do
get "/lettings-logs/#{lettings_log_year_1.id}/tenant-code-test", headers: headers, params: {} get "/lettings-logs/#{lettings_log_year_1.id}/tenant-code-test", headers: headers, params: {}
@ -110,11 +110,11 @@ RSpec.describe FormController, type: :request do
context "when viewing the setup section schemes page" do context "when viewing the setup section schemes page" do
context "when the user is support" do context "when the user is support" do
let(:user) { FactoryBot.create(:user, :support) } let(:user) { create(:user, :support) }
context "when organisation and user have not been selected yet" do context "when organisation and user have not been selected yet" do
let(:lettings_log) do let(:lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
owning_organisation: nil, owning_organisation: nil,
managing_organisation: nil, managing_organisation: nil,
@ -124,7 +124,7 @@ RSpec.describe FormController, type: :request do
end end
before do before do
locations = FactoryBot.create_list(:location, 5) locations = create_list(:location, 5)
locations.each { |location| location.scheme.update!(arrangement_type: "The same organisation that owns the housing stock", managing_organisation_id: location.scheme.owning_organisation_id) } locations.each { |location| location.scheme.update!(arrangement_type: "The same organisation that owns the housing stock", managing_organisation_id: location.scheme.owning_organisation_id) }
end end
@ -147,7 +147,7 @@ RSpec.describe FormController, type: :request do
context "when no other sections are enabled" do context "when no other sections are enabled" do
let(:lettings_log_2022) do let(:lettings_log_2022) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
startdate: Time.zone.local(2022, 12, 1), startdate: Time.zone.local(2022, 12, 1),
owning_organisation: organisation, owning_organisation: organisation,
@ -194,17 +194,17 @@ RSpec.describe FormController, type: :request do
context "when viewing a user dependent page" do context "when viewing a user dependent page" do
context "when the dependency is met" do context "when the dependency is met" do
let(:user) { FactoryBot.create(:user, :support) } let(:user) { create(:user, :support) }
it "routes to the page" do it "routes to the page" do
get "/lettings-logs/#{lettings_log.id}/organisation" get "/lettings-logs/#{lettings_log.id}/created-by"
expect(response).to have_http_status(:ok) expect(response).to have_http_status(:ok)
end end
end end
context "when the dependency is not met" do context "when the dependency is not met" do
it "redirects to the tasklist page" do it "redirects to the tasklist page" do
get "/lettings-logs/#{lettings_log.id}/organisation" get "/lettings-logs/#{lettings_log.id}/created-by"
expect(response).to redirect_to("/lettings-logs/#{lettings_log.id}") expect(response).to redirect_to("/lettings-logs/#{lettings_log.id}")
end end
end end
@ -213,10 +213,10 @@ RSpec.describe FormController, type: :request do
describe "Submit Form" do describe "Submit Form" do
context "with a form page" do context "with a form page" do
let(:user) { FactoryBot.create(:user) } let(:user) { create(:user) }
let(:organisation) { user.organisation } let(:organisation) { user.organisation }
let(:lettings_log) do let(:lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
owning_organisation: organisation, owning_organisation: organisation,
managing_organisation: organisation, managing_organisation: organisation,
@ -527,9 +527,9 @@ RSpec.describe FormController, type: :request do
context "with lettings logs that are not owned or managed by your organisation" do context "with lettings logs that are not owned or managed by your organisation" do
let(:answer) { 25 } let(:answer) { 25 }
let(:other_organisation) { FactoryBot.create(:organisation) } let(:other_organisation) { create(:organisation) }
let(:unauthorized_lettings_log) do let(:unauthorized_lettings_log) do
FactoryBot.create( create(
:lettings_log, :lettings_log,
owning_organisation: other_organisation, owning_organisation: other_organisation,
managing_organisation: other_organisation, managing_organisation: other_organisation,

Loading…
Cancel
Save