From 8ffc5c6dafc0e456c2326ef9eaed5ff6e9f070a6 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Fri, 13 Dec 2024 14:39:53 +0000 Subject: [PATCH 1/7] Update rails to 7.2.2 (#2856) * Update rails and puma * Update factory bot, fixture_paths, lint and populate LAs for tests * Remove enum deprecation warnings * Fix prefic syntax * Update paper_trail, add missing translations, lint * Update some tests * Update some more gems * Update npm package * Update Rails to 7.2.2.1 --- Gemfile | 6 +- Gemfile.lock | 217 ++++++++++-------- app/components/search_component.html.erb | 2 +- app/controllers/logs_controller.rb | 2 +- app/controllers/sessions_controller.rb | 12 +- app/helpers/filters_helper.rb | 4 +- app/models/bulk_upload.rb | 6 +- app/models/csv_download.rb | 2 +- app/models/form/lettings/questions/offered.rb | 1 - app/models/location.rb | 7 +- app/models/log.rb | 12 +- app/models/merge_request.rb | 4 +- app/models/organisation.rb | 2 +- app/models/scheme.rb | 18 +- app/models/user.rb | 2 +- app/views/devise/sessions/new.html.erb | 2 +- bin/rubocop | 8 + bin/setup | 3 +- config/application.rb | 13 +- config/environments/development.rb | 19 +- config/environments/production.rb | 78 +++---- config/environments/test.rb | 34 +-- config/initializers/assets.rb | 6 + .../initializers/content_security_policy.rb | 13 +- .../initializers/filter_parameter_logging.rb | 6 +- config/initializers/permissions_policy.rb | 20 +- config/locales/en.yml | 4 + config/locales/test.en.yml | 17 ++ config/puma.rb | 48 ++-- ..._to_active_storage_blobs.active_storage.rb | 22 ++ ..._storage_variant_records.active_storage.rb | 28 +++ ...e_storage_blobs_checksum.active_storage.rb | 8 + db/schema.rb | 2 +- db/seeds.rb | 12 +- package.json | 2 +- spec/controllers/errors_controller_spec.rb | 2 +- spec/features/organisation_spec.rb | 6 +- spec/features/schemes_spec.rb | 4 +- spec/features/user_spec.rb | 6 +- spec/rails_helper.rb | 2 +- .../auth/passwords_controller_spec.rb | 2 +- spec/requests/delete_logs_controller_spec.rb | 32 ++- spec/requests/form_controller_spec.rb | 2 - .../requests/lettings_logs_controller_spec.rb | 4 +- spec/requests/locations_controller_spec.rb | 32 +-- .../merge_requests_controller_spec.rb | 20 +- .../requests/notifications_controller_spec.rb | 2 +- .../requests/organisations_controller_spec.rb | 6 +- spec/requests/sales_logs_controller_spec.rb | 2 +- spec/requests/schemes_controller_spec.rb | 28 +-- spec/requests/users_controller_spec.rb | 58 +++-- .../merge/merge_organisations_service_spec.rb | 70 +++--- yarn.lock | 12 +- 53 files changed, 536 insertions(+), 396 deletions(-) create mode 100755 bin/rubocop create mode 100644 config/locales/test.en.yml create mode 100644 db/migrate/20241206142942_add_service_name_to_active_storage_blobs.active_storage.rb create mode 100644 db/migrate/20241206142943_create_active_storage_variant_records.active_storage.rb create mode 100644 db/migrate/20241206142944_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb diff --git a/Gemfile b/Gemfile index 1028f921a..98479cd34 100644 --- a/Gemfile +++ b/Gemfile @@ -6,11 +6,11 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby "3.1.4" # Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main' -gem "rails", "~> 7.0.8.7" +gem "rails", "~> 7.2.2" # Use postgresql as the database for Active Record gem "pg", "~> 1.1" # Use Puma as the app server -gem "puma", "~> 5.6" +gem "puma", "~> 6.4" # The modern asset pipeline for Rails [https://github.com/rails/propshaft] gem "propshaft" # Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails] @@ -44,7 +44,7 @@ gem "view_component", "~> 3.9" # Use the AWS S3 SDK as storage mechanism gem "aws-sdk-s3" # Track changes to models for auditing or versioning. -gem "paper_trail" +gem "paper_trail", "~> 15.2" # Store active record objects in version whodunnits gem "paper_trail-globalid" diff --git a/Gemfile.lock b/Gemfile.lock index 66e4c9c41..8a678576c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,75 +1,81 @@ GEM remote: https://rubygems.org/ specs: - actioncable (7.0.8.7) - actionpack (= 7.0.8.7) - activesupport (= 7.0.8.7) + actioncable (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailbox (7.0.8.7) - actionpack (= 7.0.8.7) - activejob (= 7.0.8.7) - activerecord (= 7.0.8.7) - activestorage (= 7.0.8.7) - activesupport (= 7.0.8.7) - mail (>= 2.7.1) - net-imap - net-pop - net-smtp - actionmailer (7.0.8.7) - actionpack (= 7.0.8.7) - actionview (= 7.0.8.7) - activejob (= 7.0.8.7) - activesupport (= 7.0.8.7) - mail (~> 2.5, >= 2.5.4) - net-imap - net-pop - net-smtp - rails-dom-testing (~> 2.0) - actionpack (7.0.8.7) - actionview (= 7.0.8.7) - activesupport (= 7.0.8.7) - rack (~> 2.0, >= 2.2.4) + zeitwerk (~> 2.6) + actionmailbox (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) + mail (>= 2.8.0) + actionmailer (7.2.2.1) + actionpack (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activesupport (= 7.2.2.1) + mail (>= 2.8.0) + rails-dom-testing (~> 2.2) + actionpack (7.2.2.1) + actionview (= 7.2.2.1) + activesupport (= 7.2.2.1) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4, < 3.2) + rack-session (>= 1.0.1) rack-test (>= 0.6.3) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.2.0) - actiontext (7.0.8.7) - actionpack (= 7.0.8.7) - activerecord (= 7.0.8.7) - activestorage (= 7.0.8.7) - activesupport (= 7.0.8.7) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + useragent (~> 0.16) + actiontext (7.2.2.1) + actionpack (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.6.0) nokogiri (>= 1.8.5) - actionview (7.0.8.7) - activesupport (= 7.0.8.7) + actionview (7.2.2.1) + activesupport (= 7.2.2.1) builder (~> 3.1) - erubi (~> 1.4) - rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.1, >= 1.2.0) - activejob (7.0.8.7) - activesupport (= 7.0.8.7) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.2.2.1) + activesupport (= 7.2.2.1) globalid (>= 0.3.6) - activemodel (7.0.8.7) - activesupport (= 7.0.8.7) - activemodel-serializers-xml (1.0.2) - activemodel (> 5.x) - activesupport (> 5.x) + activemodel (7.2.2.1) + activesupport (= 7.2.2.1) + activemodel-serializers-xml (1.0.3) + activemodel (>= 5.0.0.a) + activesupport (>= 5.0.0.a) builder (~> 3.1) - activerecord (7.0.8.7) - activemodel (= 7.0.8.7) - activesupport (= 7.0.8.7) - activestorage (7.0.8.7) - actionpack (= 7.0.8.7) - activejob (= 7.0.8.7) - activerecord (= 7.0.8.7) - activesupport (= 7.0.8.7) + activerecord (7.2.2.1) + activemodel (= 7.2.2.1) + activesupport (= 7.2.2.1) + timeout (>= 0.4.0) + activestorage (7.2.2.1) + actionpack (= 7.2.2.1) + activejob (= 7.2.2.1) + activerecord (= 7.2.2.1) + activesupport (= 7.2.2.1) marcel (~> 1.0) - mini_mime (>= 1.1.0) - activesupport (7.0.8.7) - concurrent-ruby (~> 1.0, >= 1.0.2) + activesupport (7.2.2.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - tzinfo (~> 2.0) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) addressable (2.8.6) public_suffix (>= 2.0.2, < 6.0) ast (2.4.2) @@ -104,6 +110,7 @@ GEM thread_safe (~> 0.3, >= 0.3.1) base64 (0.2.0) bcrypt (3.1.20) + benchmark (0.4.0) better_html (2.0.2) actionview (>= 6.0) activesupport (>= 6.0) @@ -111,7 +118,7 @@ GEM erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.6) + bigdecimal (3.1.8) bindex (0.8.1) bootsnap (1.18.3) msgpack (~> 1.2) @@ -149,6 +156,7 @@ GEM crass (1.0.6) cssbundling-rails (1.4.0) railties (>= 6.0.0) + csv (3.3.0) date (3.4.1) descendants_tracker (0.0.4) thread_safe (~> 0.3, >= 0.3.1) @@ -170,6 +178,7 @@ GEM dotenv-rails (3.0.2) dotenv (= 3.0.2) railties (>= 6.1) + drb (2.2.1) dumb_delegator (1.0.0) encryptor (3.0.0) erb_lint (0.5.0) @@ -184,10 +193,10 @@ GEM tzinfo event_stream_parser (1.0.0) excon (0.111.0) - factory_bot (6.4.6) + factory_bot (6.5.0) activesupport (>= 5.0.0) - factory_bot_rails (6.4.3) - factory_bot (~> 6.4) + factory_bot_rails (6.4.4) + factory_bot (~> 6.5) railties (>= 5.0.0) faker (3.2.3) i18n (>= 1.8.11, < 2) @@ -222,6 +231,10 @@ GEM concurrent-ruby (~> 1.0) ice_nine (0.11.2) iniparse (1.5.0) + io-console (0.8.0) + irb (1.14.1) + rdoc (>= 4.0.0) + reline (>= 0.4.2) jmespath (1.6.2) jsbundling-rails (1.3.0) railties (>= 6.0.0) @@ -246,6 +259,7 @@ GEM listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.6.2) loofah (2.23.1) crass (~> 1.0.2) nokogiri (>= 1.12.0) @@ -288,7 +302,7 @@ GEM iniparse (~> 1.4) rexml (~> 3.2) pagy (9.3.2) - paper_trail (15.1.0) + paper_trail (15.2.0) activerecord (>= 6.1) request_store (~> 1.4) paper_trail-globalid (0.2.0) @@ -313,34 +327,41 @@ GEM pry-byebug (3.10.1) byebug (~> 11.0) pry (>= 0.13, < 0.15) + psych (5.2.1) + date + stringio public_suffix (5.0.4) - puma (5.6.9) + puma (6.5.0) nio4r (~> 2.0) pundit (2.3.1) activesupport (>= 3.0.0) raabro (1.4.0) racc (1.8.1) - rack (2.2.10) + rack (3.1.8) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-mini-profiler (2.3.4) rack (>= 1.2.0) + rack-session (2.0.0) + rack (>= 3.0.0) rack-test (2.1.0) rack (>= 1.3) - rails (7.0.8.7) - actioncable (= 7.0.8.7) - actionmailbox (= 7.0.8.7) - actionmailer (= 7.0.8.7) - actionpack (= 7.0.8.7) - actiontext (= 7.0.8.7) - actionview (= 7.0.8.7) - activejob (= 7.0.8.7) - activemodel (= 7.0.8.7) - activerecord (= 7.0.8.7) - activestorage (= 7.0.8.7) - activesupport (= 7.0.8.7) + rackup (2.2.1) + rack (>= 3) + rails (7.2.2.1) + actioncable (= 7.2.2.1) + actionmailbox (= 7.2.2.1) + actionmailer (= 7.2.2.1) + actionpack (= 7.2.2.1) + actiontext (= 7.2.2.1) + actionview (= 7.2.2.1) + activejob (= 7.2.2.1) + activemodel (= 7.2.2.1) + activerecord (= 7.2.2.1) + activestorage (= 7.2.2.1) + activesupport (= 7.2.2.1) bundler (>= 1.15.0) - railties (= 7.0.8.7) + railties (= 7.2.2.1) rails-dom-testing (2.2.0) activesupport (>= 5.0.0) minitest @@ -348,31 +369,37 @@ GEM rails-html-sanitizer (1.6.1) loofah (~> 2.21) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - rails_admin (3.1.3) + rails_admin (3.3.0) activemodel-serializers-xml (>= 1.0) + csv kaminari (>= 0.14, < 2.0) nested_form (~> 0.3) - rails (>= 6.0, < 8) - turbo-rails (~> 1.0) - railties (7.0.8.7) - actionpack (= 7.0.8.7) - activesupport (= 7.0.8.7) - method_source + rails (>= 6.0, < 9) + turbo-rails (>= 1.0, < 3) + railties (7.2.2.1) + actionpack (= 7.2.2.1) + activesupport (= 7.2.2.1) + irb (~> 1.13) + rackup (>= 1.0.0) rake (>= 12.2) - thor (~> 1.0) - zeitwerk (~> 2.5) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) rainbow (3.1.1) rake (13.2.1) randexp (0.1.7) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) + rdoc (6.8.1) + psych (>= 4.0.0) redcarpet (3.6.0) redis (4.8.1) redis-client (0.22.1) connection_pool regexp_parser (2.9.0) - request_store (1.6.0) + reline (0.5.12) + io-console (~> 0.5) + request_store (1.7.0) rack (>= 1.4) responders (3.1.1) actionpack (>= 5.2) @@ -434,6 +461,7 @@ GEM ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) + securerandom (0.4.0) selenium-webdriver (4.18.1) base64 (~> 0.2) rexml (~> 3.2, >= 3.2.5) @@ -462,21 +490,22 @@ GEM smart_properties (1.17.0) stimulus-rails (1.3.3) railties (>= 6.0.0) + stringio (3.1.2) thor (1.3.2) thread_safe (0.3.6) timecop (0.9.8) timeout (0.4.2) - turbo-rails (1.5.0) + turbo-rails (2.0.11) actionpack (>= 6.0.0) - activejob (>= 6.0.0) railties (>= 6.0.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uk_postcode (2.1.8) unicode-display_width (2.5.0) - unread (0.13.1) + unread (0.14.0) activerecord (>= 6.1) uri (0.13.0) + useragent (0.16.11) view_component (3.10.0) activesupport (>= 5.2.0, < 8.0) concurrent-ruby (~> 1.0) @@ -541,19 +570,19 @@ DEPENDENCIES method_source (~> 1.1) notifications-ruby-client overcommit (>= 0.37.0) - paper_trail + paper_trail (~> 15.2) paper_trail-globalid parallel_tests pg (~> 1.1) possessive propshaft pry-byebug - puma (~> 5.6) + puma (~> 6.4) pundit rack (>= 2.2.6.3) rack-attack rack-mini-profiler (~> 2.0) - rails (~> 7.0.8.7) + rails (~> 7.2.2) rails_admin (~> 3.1) redcarpet (~> 3.6) redis (~> 4.8) diff --git a/app/components/search_component.html.erb b/app/components/search_component.html.erb index 5e3eb4ae3..62dca0ec2 100644 --- a/app/components/search_component.html.erb +++ b/app/components/search_component.html.erb @@ -1,4 +1,4 @@ -<%= form_with model: @user, url: path(current_user), method: "get", local: true do |f| %> +<%= form_with url: path(current_user), method: "get", local: true do |f| %>
Schemes are attached to the organisation that owns the property. Check you have correctly answered question 1 \"Which organisation owns this property?\"
+If your organisation’s schemes were migrated from old CORE, they may have new names and codes. Search by postcode to find your scheme.
" + scheme_changes_link_text: "Read more about how schemes have changed" + view_schemes_link_text: "View your organisation’s schemes" + soft_validations: + net_income: + hint_text: "hint text" diff --git a/config/puma.rb b/config/puma.rb index d9b3e836c..5d0898ea5 100644 --- a/config/puma.rb +++ b/config/puma.rb @@ -1,9 +1,25 @@ -# Puma can serve each request in a thread from an internal thread pool. -# The `threads` method setting takes two numbers: a minimum and maximum. -# Any libraries that use thread pools should be configured to match -# the maximum value specified for Puma. Default is set to 5 threads for minimum -# and maximum; this matches the default thread size of Active Record. +# This configuration file will be evaluated by Puma. The top-level methods that +# are invoked here are part of Puma's configuration DSL. For more information +# about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html. + +# Puma starts a configurable number of processes (workers) and each process +# serves each request in a thread from an internal thread pool. +# +# The ideal number of threads per worker depends both on how much time the +# application spends waiting for IO operations and on how much you wish to +# to prioritize throughput over latency. +# +# As a rule of thumb, increasing the number of threads will increase how much +# traffic a given process can handle (throughput), but due to CRuby's +# Global VM Lock (GVL) it has diminishing returns and will degrade the +# response time (latency) of the application. # +# The default is set to 3 threads as it's deemed a decent compromise between +# throughput and latency for the average Rails application. +# +# Any libraries that use a connection pool or another resource pool should +# be configured to provide at least as many connections as the number of +# threads. This includes Active Record's `pool` parameter in `database.yml`. max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } threads min_threads_count, max_threads_count @@ -14,30 +30,16 @@ threads min_threads_count, max_threads_count worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development" # Specifies the `port` that Puma will listen on to receive requests; default is 3000. -# +# port ENV.fetch("PORT") { 3000 } # Specifies the `environment` that Puma will run in. # environment ENV.fetch("RAILS_ENV") { "development" } -# Specifies the `pidfile` that Puma will use. +# Specify the PID file. Defaults to tmp/pids/server.pid in development. +# In other environments, only set the PID file if requested. pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } -# Specifies the number of `workers` to boot in clustered mode. -# Workers are forked web server processes. If using threads and workers together -# the concurrency of the application would be max `threads` * `workers`. -# Workers do not work on JRuby or Windows (both of which do not support -# processes). -# -# workers ENV.fetch("WEB_CONCURRENCY") { 2 } - -# Use the `preload_app!` method when specifying a `workers` number. -# This directive tells Puma to first boot the application and load code -# before forking the application. This takes advantage of Copy On Write -# process behavior so workers use less memory. -# -# preload_app! - -# Allow puma to be restarted by `rails restart` command. +# Allow puma to be restarted by `bin/rails restart` command. plugin :tmp_restart diff --git a/db/migrate/20241206142942_add_service_name_to_active_storage_blobs.active_storage.rb b/db/migrate/20241206142942_add_service_name_to_active_storage_blobs.active_storage.rb new file mode 100644 index 000000000..0a13344fc --- /dev/null +++ b/db/migrate/20241206142942_add_service_name_to_active_storage_blobs.active_storage.rb @@ -0,0 +1,22 @@ +# This migration comes from active_storage (originally 20190112182829) +class AddServiceNameToActiveStorageBlobs < ActiveRecord::Migration[6.0] + def up + return unless table_exists?(:active_storage_blobs) + + unless column_exists?(:active_storage_blobs, :service_name) + add_column :active_storage_blobs, :service_name, :string + + if configured_service = ActiveStorage::Blob.service.name # rubocop:disable Lint/AssignmentInCondition + ActiveStorage::Blob.unscoped.update_all(service_name: configured_service) + end + + change_column :active_storage_blobs, :service_name, :string, null: false + end + end + + def down + return unless table_exists?(:active_storage_blobs) + + remove_column :active_storage_blobs, :service_name + end +end diff --git a/db/migrate/20241206142943_create_active_storage_variant_records.active_storage.rb b/db/migrate/20241206142943_create_active_storage_variant_records.active_storage.rb new file mode 100644 index 000000000..78b8564cf --- /dev/null +++ b/db/migrate/20241206142943_create_active_storage_variant_records.active_storage.rb @@ -0,0 +1,28 @@ +# This migration comes from active_storage (originally 20191206030411) +class CreateActiveStorageVariantRecords < ActiveRecord::Migration[6.0] + def change + return unless table_exists?(:active_storage_blobs) + + # Use Active Record's configured type for primary key + create_table :active_storage_variant_records, id: primary_key_type, if_not_exists: true do |t| # rubocop:disable Rails/CreateTableWithTimestamps + t.belongs_to :blob, null: false, index: false, type: blobs_primary_key_type + t.string :variation_digest, null: false + + t.index %i[blob_id variation_digest], name: "index_active_storage_variant_records_uniqueness", unique: true + t.foreign_key :active_storage_blobs, column: :blob_id + end + end + +private + + def primary_key_type + config = Rails.configuration.generators + config.options[config.orm][:primary_key_type] || :primary_key + end + + def blobs_primary_key_type + pkey_name = connection.primary_key(:active_storage_blobs) + pkey_column = connection.columns(:active_storage_blobs).find { |c| c.name == pkey_name } + pkey_column.bigint? ? :bigint : pkey_column.type + end +end diff --git a/db/migrate/20241206142944_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb b/db/migrate/20241206142944_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb new file mode 100644 index 000000000..93c8b85ad --- /dev/null +++ b/db/migrate/20241206142944_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb @@ -0,0 +1,8 @@ +# This migration comes from active_storage (originally 20211119233751) +class RemoveNotNullOnActiveStorageBlobsChecksum < ActiveRecord::Migration[6.0] + def change + return unless table_exists?(:active_storage_blobs) + + change_column_null(:active_storage_blobs, :checksum, true) + end +end diff --git a/db/schema.rb b/db/schema.rb index 1a1c127c6..bd7672c24 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_12_04_100518) do +ActiveRecord::Schema[7.2].define(version: 2024_12_06_142944) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" diff --git a/db/seeds.rb b/db/seeds.rb index 2f018be91..f3dcb688d 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -12,13 +12,13 @@ def find_or_create_user(organisation, email, name, role) end end -unless Rails.env.test? - if LocalAuthority.count.zero? - la_path = "config/local_authorities_data/initial_local_authorities.csv" - service = Imports::LocalAuthoritiesService.new(path: la_path) - service.call - end +if LocalAuthority.count.zero? + la_path = "config/local_authorities_data/initial_local_authorities.csv" + service = Imports::LocalAuthoritiesService.new(path: la_path) + service.call +end +unless Rails.env.test? if LaRentRange.count.zero? Dir.glob("config/rent_range_data/*.csv").each do |path| start_year = File.basename(path, ".csv") diff --git a/package.json b/package.json index 32063907c..c5734b348 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "html5shiv": "^3.7.3", "intersection-observer": "^0.12.0", "mini-css-extract-plugin": "^2.6.0", - "rails_admin": "3.1.3", + "rails_admin": "3.3.0", "regenerator-runtime": "^0.13.9", "sass": "^1.49.9", "sass-loader": "^12.6.0", diff --git a/spec/controllers/errors_controller_spec.rb b/spec/controllers/errors_controller_spec.rb index d8ae16165..30361ea42 100644 --- a/spec/controllers/errors_controller_spec.rb +++ b/spec/controllers/errors_controller_spec.rb @@ -18,7 +18,7 @@ RSpec.describe ErrorsController, type: :controller do describe "GET #unprocessable_entity" do it "returns unprocessable_entity" do get :unprocessable_entity - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) end end end diff --git a/spec/features/organisation_spec.rb b/spec/features/organisation_spec.rb index 6f90428be..15bfecf39 100644 --- a/spec/features/organisation_spec.rb +++ b/spec/features/organisation_spec.rb @@ -206,14 +206,14 @@ RSpec.describe "User Features" do it "can filter lettings logs by year" do check("years-2022-field") click_button("Apply filters") - expect(page).to have_current_path("/organisations/#{org_id}/lettings-logs?years[]=&years[]=2022&status[]=&needstypes[]=&assigned_to=all&user_text_search=&user=&owning_organisation_select=all&owning_organisation_text_search=&owning_organisation=&managing_organisation_select=all&managing_organisation_text_search=&managing_organisation=") + expect(page).to have_current_path("/organisations/#{org_id}/lettings-logs?%5Byears%5D[]=&years[]=2022&%5Bstatus%5D[]=&%5Bneedstypes%5D[]=&assigned_to=all&user_text_search=&user=&owning_organisation_select=all&owning_organisation_text_search=&owning_organisation=&managing_organisation_select=all&managing_organisation_text_search=&managing_organisation=") expect(page).not_to have_link first_log.id.to_s, href: "/lettings-logs/#{first_log.id}" end it "can filter lettings logs by needstype" do check("needstypes-1-field") click_button("Apply filters") - expect(page).to have_current_path("/organisations/#{org_id}/lettings-logs?years[]=&status[]=&needstypes[]=&needstypes[]=1&assigned_to=all&user_text_search=&user=&owning_organisation_select=all&owning_organisation_text_search=&owning_organisation=&managing_organisation_select=all&managing_organisation_text_search=&managing_organisation=") + expect(page).to have_current_path("/organisations/#{org_id}/lettings-logs?%5Byears%5D[]=&%5Bstatus%5D[]=&%5Bneedstypes%5D[]=&needstypes[]=1&assigned_to=all&user_text_search=&user=&owning_organisation_select=all&owning_organisation_text_search=&owning_organisation=&managing_organisation_select=all&managing_organisation_text_search=&managing_organisation=") other_general_needs_logs.each do |general_needs_log| expect(page).to have_link general_needs_log.id.to_s, href: "/lettings-logs/#{general_needs_log.id}" end @@ -256,7 +256,7 @@ RSpec.describe "User Features" do end check("years-2022-field") click_button("Apply filters") - expect(page).to have_current_path("/organisations/#{org_id}/sales-logs?years[]=&years[]=2022&status[]=&assigned_to=all&user_text_search=&user=&owning_organisation_select=all&owning_organisation_text_search=&owning_organisation=&managing_organisation_select=all&managing_organisation_text_search=&managing_organisation=") + expect(page).to have_current_path("/organisations/#{org_id}/sales-logs?%5Byears%5D[]=&years[]=2022&%5Bstatus%5D[]=&assigned_to=all&user_text_search=&user=&owning_organisation_select=all&owning_organisation_text_search=&owning_organisation=&managing_organisation_select=all&managing_organisation_text_search=&managing_organisation=") expect(page).not_to have_link first_log.id.to_s, href: "/sales-logs/#{first_log.id}" end end diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb index dfb56665b..84572f35b 100644 --- a/spec/features/schemes_spec.rb +++ b/spec/features/schemes_spec.rb @@ -87,7 +87,7 @@ RSpec.describe "Schemes scheme Features" do it "displays the filters component with a correct count and clear button" do expect(page).to have_content("2 filters applied") - expect(page).to have_link("Clear", href: /clear-filters\?filter_type=schemes/) + expect(page).to have_link("Clear", href: /clear-filters\?.*filter_type=schemes/) end context "when clearing the filters" do @@ -326,7 +326,7 @@ RSpec.describe "Schemes scheme Features" do it "displays the filters component with a correct count and clear button" do expect(page).to have_content("2 filters applied") - expect(page).to have_link("Clear", href: /\/clear-filters\?filter_type=scheme_locations/) + expect(page).to have_link("Clear", href: /\/clear-filters\?.*filter_type=scheme_locations/) end context "when clearing the filters" do diff --git a/spec/features/user_spec.rb b/spec/features/user_spec.rb index 2e837abe2..de3f2cbc5 100644 --- a/spec/features/user_spec.rb +++ b/spec/features/user_spec.rb @@ -269,7 +269,7 @@ RSpec.describe "User Features" do it "displays the filters component with a correct count and clear button" do expect(page).to have_content("2 filters applied") - expect(page).to have_link("Clear", href: /clear-filters\?filter_type=users/) + expect(page).to have_link("Clear", href: /clear-filters\?.*filter_type=users/) end context "when clearing the filters" do @@ -678,7 +678,7 @@ RSpec.describe "User Features" do fill_in("code", with: otp) click_button("Submit") expect(page).to have_content("Check your email") - expect(page).to have_http_status(:unprocessable_entity) + expect(page).to have_http_status(:unprocessable_content) expect(page).to have_title("Error") expect(page).to have_selector(".govuk-error-summary__title") end @@ -691,7 +691,7 @@ RSpec.describe "User Features" do fill_in("code", with: otp) click_button("Submit") expect(page).to have_content("Check your email") - expect(page).to have_http_status(:unprocessable_entity) + expect(page).to have_http_status(:unprocessable_content) expect(page).to have_title("Error") expect(page).to have_selector(".govuk-error-summary__title") end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 5f7529554..c663087d5 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -51,7 +51,7 @@ rescue ActiveRecord::PendingMigrationError => e end RSpec.configure do |config| # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures - config.fixture_path = "#{::Rails.root}/spec/fixtures" + config.fixture_paths = ["#{::Rails.root}/spec/fixtures"] # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false diff --git a/spec/requests/auth/passwords_controller_spec.rb b/spec/requests/auth/passwords_controller_spec.rb index f35df1c5a..2685e19ab 100644 --- a/spec/requests/auth/passwords_controller_spec.rb +++ b/spec/requests/auth/passwords_controller_spec.rb @@ -107,7 +107,7 @@ RSpec.describe Auth::PasswordsController, type: :request do it "shows an error on the same page" do put "/account/password", headers: headers, params: params - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_css("h1", text: "Reset your password") expect(page).to have_content("passwords you entered do not match") end diff --git a/spec/requests/delete_logs_controller_spec.rb b/spec/requests/delete_logs_controller_spec.rb index cde0848f6..b055e9dd1 100644 --- a/spec/requests/delete_logs_controller_spec.rb +++ b/spec/requests/delete_logs_controller_spec.rb @@ -61,8 +61,9 @@ RSpec.describe "DeleteLogs", type: :request do allow(FilterManager).to receive(:filter_logs).and_return LettingsLog.all end - it "throws an error if selected ids are not provided" do - expect { post delete_logs_lettings_logs_path }.to raise_error ActionController::ParameterMissing + it "returns bad request if selected ids are not provided" do + post delete_logs_lettings_logs_path + expect(response).to have_http_status(:bad_request) end it "calls the filter service with the filters in the session and the search term from the query params" do @@ -120,7 +121,8 @@ RSpec.describe "DeleteLogs", type: :request do end it "requires delete logs form data to be provided" do - expect { post delete_logs_confirmation_lettings_logs_path }.to raise_error(ActionController::ParameterMissing) + post delete_logs_confirmation_lettings_logs_path + expect(response).to have_http_status(:bad_request) end it "shows the correct title" do @@ -346,8 +348,9 @@ RSpec.describe "DeleteLogs", type: :request do allow(FilterManager).to receive(:filter_logs).and_return SalesLog.all end - it "throws an error if selected ids are not provided" do - expect { post delete_logs_sales_logs_path }.to raise_error ActionController::ParameterMissing + it "returns bad request if selected ids are not provided" do + post delete_logs_sales_logs_path + expect(response).to have_http_status(:bad_request) end it "calls the filter service with the filters in the session and the search term from the query params" do @@ -405,7 +408,8 @@ RSpec.describe "DeleteLogs", type: :request do end it "requires delete logs form data to be provided" do - expect { post delete_logs_confirmation_sales_logs_path }.to raise_error(ActionController::ParameterMissing) + post delete_logs_confirmation_sales_logs_path + expect(response).to have_http_status(:bad_request) end it "shows the correct title" do @@ -635,8 +639,9 @@ RSpec.describe "DeleteLogs", type: :request do allow(FilterManager).to receive(:filter_logs).and_return LettingsLog.all end - it "throws an error if selected ids are not provided" do - expect { post delete_lettings_logs_organisation_path(id: organisation) }.to raise_error ActionController::ParameterMissing + it "returns bad request if selected ids are not provided" do + post delete_lettings_logs_organisation_path(id: organisation) + expect(response).to have_http_status(:bad_request) end it "calls the filter service with the filters in the session and the search term from the query params" do @@ -694,7 +699,8 @@ RSpec.describe "DeleteLogs", type: :request do end it "requires delete logs form data to be provided" do - expect { post delete_lettings_logs_confirmation_organisation_path(id: organisation) }.to raise_error(ActionController::ParameterMissing) + post delete_lettings_logs_confirmation_organisation_path(id: organisation) + expect(response).to have_http_status(:bad_request) end it "shows the correct title" do @@ -858,8 +864,9 @@ RSpec.describe "DeleteLogs", type: :request do allow(FilterManager).to receive(:filter_logs).and_return SalesLog.all end - it "throws an error if selected ids are not provided" do - expect { post delete_sales_logs_organisation_path(id: organisation) }.to raise_error ActionController::ParameterMissing + it "returns bad request if selected ids are not provided" do + post delete_sales_logs_organisation_path(id: organisation) + expect(response).to have_http_status(:bad_request) end it "calls the filter service with the filters in the session and the search term from the query params" do @@ -917,7 +924,8 @@ RSpec.describe "DeleteLogs", type: :request do end it "requires delete logs form data to be provided" do - expect { post delete_sales_logs_confirmation_organisation_path(id: organisation) }.to raise_error(ActionController::ParameterMissing) + post delete_sales_logs_confirmation_organisation_path + expect(response).to have_http_status(:bad_request) end it "shows the correct title" do diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb index 0cbec27d2..6ab49e302 100644 --- a/spec/requests/form_controller_spec.rb +++ b/spec/requests/form_controller_spec.rb @@ -1159,7 +1159,6 @@ RSpec.describe FormController, type: :request do it "displays a success banner" do follow_redirect! - follow_redirect! expect(response.body).to include("You have successfully updated Q31: lead tenant’s age") end @@ -1182,7 +1181,6 @@ RSpec.describe FormController, type: :request do end it "displays a success banner without crashing" do - follow_redirect! follow_redirect! expect(response.body).to include("You have successfully updated") end diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index b902305ad..14cd3095c 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -81,7 +81,7 @@ RSpec.describe LettingsLogsController, type: :request do it "validates lettings log parameters" do json_response = JSON.parse(response.body) - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(json_response["errors"]).to match_array([["offered", [I18n.t("validations.shared.numeric.within_range", field: "Times previously offered since becoming available", min: 0, max: 20)]], ["age1", [I18n.t("validations.shared.numeric.within_range", field: "Lead tenant’s age", min: 16, max: 120)]]]) end end @@ -1612,7 +1612,7 @@ RSpec.describe LettingsLogsController, type: :request do let(:params) { { age1: 200 } } it "returns 422" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) end it "returns an error message" do diff --git a/spec/requests/locations_controller_spec.rb b/spec/requests/locations_controller_spec.rb index 6de8e7d33..9afdc94f2 100644 --- a/spec/requests/locations_controller_spec.rb +++ b/spec/requests/locations_controller_spec.rb @@ -1192,7 +1192,7 @@ RSpec.describe LocationsController, type: :request do end it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.startdate_invalid")) end end @@ -1266,7 +1266,7 @@ RSpec.describe LocationsController, type: :request do end it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.startdate_invalid")) end end @@ -1702,7 +1702,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { "deactivation_date": "" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.not_selected")) end end @@ -1711,7 +1711,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "44", "deactivation_date(1i)": "2022" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -1720,7 +1720,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "4", "deactivation_date(1i)": "2020" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.out_of_range", date: "1 April 2022")) end end @@ -1729,7 +1729,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "", "deactivation_date(2i)": "2", "deactivation_date(1i)": "2022" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -1738,7 +1738,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "2", "deactivation_date(2i)": "", "deactivation_date(1i)": "2022" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -1747,7 +1747,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "2", "deactivation_date(2i)": "2", "deactivation_date(1i)": "" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -1758,7 +1758,7 @@ RSpec.describe LocationsController, type: :request do let(:add_deactivations) { create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 5, 5), reactivation_date: Time.zone.local(2022, 10, 12), location:) } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.deactivation.during_deactivated_period")) end end @@ -2110,7 +2110,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { "reactivation_date": "" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.not_selected")) end end @@ -2119,7 +2119,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "10", "reactivation_date(2i)": "44", "reactivation_date(1i)": "2022" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -2128,7 +2128,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "10", "reactivation_date(2i)": "4", "reactivation_date(1i)": "2020" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.out_of_range", date: "1 April 2022")) end end @@ -2137,7 +2137,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "", "reactivation_date(2i)": "2", "reactivation_date(1i)": "2022" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -2146,7 +2146,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "2", "reactivation_date(2i)": "", "reactivation_date(1i)": "2022" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -2155,7 +2155,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "2", "reactivation_date(2i)": "2", "reactivation_date(1i)": "" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.toggle_date.invalid")) end end @@ -2165,7 +2165,7 @@ RSpec.describe LocationsController, type: :request do let(:params) { { location_deactivation_period: { reactivation_date_type: "other", "reactivation_date(3i)": "8", "reactivation_date(2i)": "9", "reactivation_date(1i)": "2022" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.location.reactivation.before_deactivation", date: "10 October 2022")) end end diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb index 074d2186c..4c07dbfb7 100644 --- a/spec/requests/merge_requests_controller_spec.rb +++ b/spec/requests/merge_requests_controller_spec.rb @@ -95,7 +95,7 @@ RSpec.describe MergeRequestsController, type: :request do end it "displays the page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Another merge request records #{another_organisation.name} as merging into #{other_merge_request.absorbing_organisation&.name} on 4 May 2022. Select another organisation or remove this organisation from the other merge request.") end end @@ -113,7 +113,7 @@ RSpec.describe MergeRequestsController, type: :request do it "does not update the merge request" do merge_request.reload expect(merge_request.merging_organisations.count).to eq(0) - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.merge_request.organisation_part_of_another_merge")) end end @@ -159,7 +159,7 @@ RSpec.describe MergeRequestsController, type: :request do it "does not update the merge request" do merge_request.reload expect(merge_request.merging_organisations.count).to eq(0) - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.merge_request.organisation_not_selected")) end end @@ -174,7 +174,7 @@ RSpec.describe MergeRequestsController, type: :request do it "does not update the merge request" do merge_request.reload expect(merge_request.merging_organisations.count).to eq(0) - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.merge_request.organisation_not_selected")) end end @@ -363,7 +363,7 @@ RSpec.describe MergeRequestsController, type: :request do it "renders the error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Enter a merge date") end @@ -385,7 +385,7 @@ RSpec.describe MergeRequestsController, type: :request do it "displays the page with an error message" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Enter a valid merge date") end end @@ -426,7 +426,7 @@ RSpec.describe MergeRequestsController, type: :request do it "displays the page with an error message" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("The merge date must not be later than a year from today’s date.") end end @@ -467,7 +467,7 @@ RSpec.describe MergeRequestsController, type: :request do it "renders the error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("You must answer absorbing organisation already active?") end @@ -490,7 +490,7 @@ RSpec.describe MergeRequestsController, type: :request do it "renders the error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("You must answer was this merge reported by a helpdesk ticket?") end @@ -511,7 +511,7 @@ RSpec.describe MergeRequestsController, type: :request do it "renders the error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("You must answer the ticket number") end diff --git a/spec/requests/notifications_controller_spec.rb b/spec/requests/notifications_controller_spec.rb index 0982057ab..367c64550 100644 --- a/spec/requests/notifications_controller_spec.rb +++ b/spec/requests/notifications_controller_spec.rb @@ -37,7 +37,7 @@ RSpec.describe NotificationsController, type: :request do it "gives an error response" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) end end diff --git a/spec/requests/organisations_controller_spec.rb b/spec/requests/organisations_controller_spec.rb index af9027753..0a5614be3 100644 --- a/spec/requests/organisations_controller_spec.rb +++ b/spec/requests/organisations_controller_spec.rb @@ -1889,7 +1889,7 @@ RSpec.describe OrganisationsController, type: :request do it "displays the form with an error message" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.organisation.name_missing")) expect(page).to have_content(I18n.t("validations.organisation.provider_type_missing")) end @@ -2055,7 +2055,7 @@ RSpec.describe OrganisationsController, type: :request do end it "has clear filters link" do - expect(page).to have_link("Clear", href: clear_filters_path(filter_type: "lettings_logs", path_params: { organisation_id: organisation.id })) + expect(page).to have_link("Clear", href: clear_filters_path(filter_type: "lettings_logs", filter_path_params: { organisation_id: organisation.id })) end end end @@ -2417,7 +2417,7 @@ RSpec.describe OrganisationsController, type: :request do it "displays an error" do post "/organisations/#{organisation.id}/schemes/duplicates", headers: headers, params: params - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("You must resolve all duplicates or indicate that there are no duplicates") end end diff --git a/spec/requests/sales_logs_controller_spec.rb b/spec/requests/sales_logs_controller_spec.rb index 840613458..06461bf4f 100644 --- a/spec/requests/sales_logs_controller_spec.rb +++ b/spec/requests/sales_logs_controller_spec.rb @@ -92,7 +92,7 @@ RSpec.describe SalesLogsController, type: :request do it "validates sales log parameters" do json_response = JSON.parse(response.body) - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(json_response["errors"]).to match_array([["beds", ["Number of bedrooms must be 1 if the property is a bedsit."]], ["proptype", ["Answer cannot be 'Bedsit' if the property has 2 or more bedrooms."]]]) end end diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb index 2eb2330c8..713e54142 100644 --- a/spec/requests/schemes_controller_spec.rb +++ b/spec/requests/schemes_controller_spec.rb @@ -1057,7 +1057,7 @@ RSpec.describe SchemesController, type: :request do it "renders the same page with error message" do post "/schemes", params: params - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Create a new supported housing scheme") expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.scheme_type.invalid")) expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.registered_under_care_act.invalid")) @@ -1185,7 +1185,7 @@ RSpec.describe SchemesController, type: :request do it "renders the same page with error message" do post "/schemes", params: params - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Create a new supported housing scheme") expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.scheme_type.invalid")) expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.registered_under_care_act.invalid")) @@ -1318,7 +1318,7 @@ RSpec.describe SchemesController, type: :request do it "renders the same page with error message" do post "/schemes", params: params - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Create a new supported housing scheme") expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.scheme_type.invalid")) expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.registered_under_care_act.invalid")) @@ -1334,7 +1334,7 @@ RSpec.describe SchemesController, type: :request do it "displays the new page with an error message" do post "/schemes", params: params - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Enter an organisation that owns housing stock") end end @@ -1375,7 +1375,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme: { owning_organisation_id: user.organisation.id, arrangement_type: nil, confirmed: true, page: "check-answers" } } } it "does not allow the scheme to be confirmed" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.arrangement_type.invalid")) end end @@ -1417,7 +1417,7 @@ RSpec.describe SchemesController, type: :request do end it "renders the same page with error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Create a new supported housing scheme") expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.service_name.invalid")) expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.scheme_type.invalid")) @@ -1684,7 +1684,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme: { owning_organisation_id: user.organisation.id, arrangement_type: nil, confirmed: true, page: "check-answers" } } } it "does not allow the scheme to be confirmed" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.arrangement_type.invalid")) end end @@ -1728,7 +1728,7 @@ RSpec.describe SchemesController, type: :request do end it "renders the same page with error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Create a new supported housing scheme") expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.owning_organisation_id.invalid")) expect(page).to have_content(I18n.t("activerecord.errors.models.scheme.attributes.service_name.invalid")) @@ -2895,7 +2895,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme_deactivation_period: { "deactivation_date": "" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.scheme.toggle_date.not_selected")) end end @@ -2904,7 +2904,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "44", "deactivation_date(1i)": "2022" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.scheme.toggle_date.invalid")) end end @@ -2913,7 +2913,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "4", "deactivation_date(1i)": "2020" } } } it "displays the new page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.scheme.toggle_date.out_of_range", date: "1 April 2022")) end end @@ -2922,7 +2922,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "", "deactivation_date(2i)": "2", "deactivation_date(1i)": "2022" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.scheme.toggle_date.invalid")) end end @@ -2931,7 +2931,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "2", "deactivation_date(2i)": "", "deactivation_date(1i)": "2022" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.scheme.toggle_date.invalid")) end end @@ -2940,7 +2940,7 @@ RSpec.describe SchemesController, type: :request do let(:params) { { scheme_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "2", "deactivation_date(2i)": "2", "deactivation_date(1i)": "" } } } it "displays page with an error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.scheme.toggle_date.invalid")) end end diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 12418d532..257bd681a 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -67,7 +67,7 @@ RSpec.describe UsersController, type: :request do end it "shows an error on the same page if passwords don't match" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_css("h1", class: "govuk-heading-l", text: "Change your password") expect(page).to have_selector(".govuk-error-summary__title") expect(page).to have_content("passwords you entered do not match") @@ -349,7 +349,7 @@ RSpec.describe UsersController, type: :request do end it "show an error" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) end end @@ -377,7 +377,7 @@ RSpec.describe UsersController, type: :request do end it "shows an error if passwords don't match" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_selector(".govuk-error-summary__title") end end @@ -792,9 +792,8 @@ RSpec.describe UsersController, type: :request do context "when the current user does not match the user ID" do it "there is no route" do - expect { - get "/users/#{other_user.id}/password/edit", headers:, params: {} - }.to raise_error(ActionController::RoutingError) + get "/users/#{other_user.id}/password/edit", headers:, params: {} + expect(response).to have_http_status(:not_found) end end end @@ -840,7 +839,7 @@ RSpec.describe UsersController, type: :request do end it "shows an error if passwords don't match" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_selector(".govuk-error-summary__title") end end @@ -955,7 +954,7 @@ RSpec.describe UsersController, type: :request do end it "show an error" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) end end @@ -976,7 +975,7 @@ RSpec.describe UsersController, type: :request do let(:phone) { "" } it "validates telephone number" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.phone.blank")) end end @@ -985,7 +984,7 @@ RSpec.describe UsersController, type: :request do let(:phone) { "randomstring" } it "validates telephone number" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.phone.invalid")) end end @@ -994,7 +993,7 @@ RSpec.describe UsersController, type: :request do let(:phone) { "123" } it "validates telephone number" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.phone.invalid")) end end @@ -1075,7 +1074,7 @@ RSpec.describe UsersController, type: :request do it "shows an error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.email.taken")) end end @@ -1093,7 +1092,7 @@ RSpec.describe UsersController, type: :request do it "shows an error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("validations.role.invalid")) end end @@ -1111,7 +1110,7 @@ RSpec.describe UsersController, type: :request do it "shows an error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.name.blank")) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.email.blank")) end @@ -1131,7 +1130,7 @@ RSpec.describe UsersController, type: :request do it "validates telephone number" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.phone.invalid")) end end @@ -1141,7 +1140,7 @@ RSpec.describe UsersController, type: :request do it "validates telephone number" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.phone.invalid")) end end @@ -1748,9 +1747,8 @@ RSpec.describe UsersController, type: :request do context "when the current user does not match the user ID" do it "there is no route" do - expect { - get "/users/#{other_user.id}/password/edit", headers:, params: {} - }.to raise_error(ActionController::RoutingError) + get "/users/#{other_user.id}/password/edit", headers:, params: {} + expect(response).to have_http_status(:not_found) end end end @@ -1912,7 +1910,7 @@ RSpec.describe UsersController, type: :request do end it "shows an error if passwords don't match" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_selector(".govuk-error-summary__title") end end @@ -1928,7 +1926,7 @@ RSpec.describe UsersController, type: :request do let(:params) { { id: user.id, user: { organisation_id: "" } } } it "does not update the organisation" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_selector(".govuk-error-summary__title") end end @@ -2097,7 +2095,7 @@ RSpec.describe UsersController, type: :request do let(:params) { { id: other_user.id, user: { organisation_id: "" } } } it "does not update the organisation" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_selector(".govuk-error-summary__title") end end @@ -2136,7 +2134,7 @@ RSpec.describe UsersController, type: :request do end it "displays the error message" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("Select if you want to reassign logs") end end @@ -2184,7 +2182,7 @@ RSpec.describe UsersController, type: :request do end it "required the new org to have stock owner relationship with the current user org" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("New org must be a stock owner of #{other_user.organisation_name} to make this change.") end end @@ -2198,7 +2196,7 @@ RSpec.describe UsersController, type: :request do end it "required the new org to have stock owner relationship with the managing organisations" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("New org must be a stock owner of #{other_user.organisation_name}, #{new_organisation_2.name}, and #{new_organisation_3.name} to make this change.") end end @@ -2215,7 +2213,7 @@ RSpec.describe UsersController, type: :request do end it "required the new org to have managing agent relationship with the current user org" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("New org must be a managing agent of #{other_user.organisation_name} to make this change.") end end @@ -2229,7 +2227,7 @@ RSpec.describe UsersController, type: :request do end it "required the new org to have managing agent relationship with owning organisations" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content("New org must be a managing agent of #{other_user.organisation.name}, #{new_organisation_2.name}, and #{new_organisation_3.name} to make this change.") end end @@ -2246,7 +2244,7 @@ RSpec.describe UsersController, type: :request do end it "show an error" do - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) end end end @@ -2309,7 +2307,7 @@ RSpec.describe UsersController, type: :request do it "shows an error messages for all failed validations" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.name.blank")) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.email.blank")) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.organisation_id.blank")) @@ -2324,7 +2322,7 @@ RSpec.describe UsersController, type: :request do it "shows an error" do request - expect(response).to have_http_status(:unprocessable_entity) + expect(response).to have_http_status(:unprocessable_content) expect(page).to have_content(I18n.t("activerecord.errors.models.user.attributes.email.taken")) end end diff --git a/spec/services/merge/merge_organisations_service_spec.rb b/spec/services/merge/merge_organisations_service_spec.rb index fbb52c2a5..f20e16a16 100644 --- a/spec/services/merge/merge_organisations_service_spec.rb +++ b/spec/services/merge/merge_organisations_service_spec.rb @@ -16,7 +16,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "when merging a single organisation into an existing organisation" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: nil) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: nil) } let(:absorbing_organisation) { create(:organisation, holds_own_stock: false, name: "absorbing org") } let(:absorbing_organisation_user) { create(:user, organisation: absorbing_organisation) } @@ -53,7 +53,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -97,7 +97,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -134,7 +134,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -327,7 +327,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and deactivation is after the merge date and before an open collection window" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.today - 6.years) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.today - 6.years) } let!(:scheme) { create(:scheme, owning_organisation: merging_organisation, old_id: "scheme_old_id", old_visible_id: "scheme_old_visible_id", startdate: nil) } let!(:location) { create(:location, scheme:, old_id: "location_old_id", old_visible_id: "location_old_visible_id", startdate: nil) } @@ -551,7 +551,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -584,7 +584,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -596,7 +596,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "with merge date in closed collection year" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.local(2021, 3, 3)) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.local(2021, 3, 3)) } it "does not validate saledate for closed collection years" do sales_log.saledate = Time.zone.local(2022, 5, 1) @@ -611,7 +611,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and merge date is provided" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.yesterday) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.yesterday) } it "sets merge date on merged organisation" do merge_organisations_service.call @@ -646,7 +646,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -682,7 +682,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -706,7 +706,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "with merge date in closed collection year" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.local(2021, 3, 3)) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.local(2021, 3, 3)) } it "does not validate startdate for closed collection years" do owned_lettings_log.startdate = Time.zone.local(2022, 4, 1) @@ -825,7 +825,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -842,7 +842,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and absorbing_organisation_active_from_merge_date is true" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.yesterday, absorbing_organisation_active_from_merge_date: true) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.yesterday, absorbing_organisation_active_from_merge_date: true) } it "sets available from to merge_date for absorbing organisation" do merge_organisations_service.call @@ -854,7 +854,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and absorbing_organisation_active_from_merge_date is true" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], absorbing_organisation_active_from_merge_date: true) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, absorbing_organisation_active_from_merge_date: true) } it "sets available from to merge_date (today) for absorbing organisation" do merge_organisations_service.call @@ -910,7 +910,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "when merging a multiple organisations into an existing organisation" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: nil) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: nil) } let(:absorbing_organisation) { create(:organisation, holds_own_stock: false, name: "absorbing org") } let(:absorbing_organisation_user) { create(:user, organisation: absorbing_organisation) } @@ -944,7 +944,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1069,7 +1069,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1086,7 +1086,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and merge date is provided" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.yesterday) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.yesterday) } it "sets merge date and absorbing organisation on merged organisations" do merge_organisations_service.call @@ -1102,7 +1102,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "when merging a single organisation into a new organisation" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: nil) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids:, merge_date: nil) } let(:new_absorbing_organisation) { create(:organisation, :without_dpc, holds_own_stock: false) } let(:new_absorbing_organisation_user) { create(:user, organisation: new_absorbing_organisation) } @@ -1139,7 +1139,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1183,7 +1183,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1220,7 +1220,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1325,7 +1325,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1357,7 +1357,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1370,7 +1370,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and merge date is provided" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.yesterday) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.yesterday) } it "sets merge date on merged organisation" do merge_organisations_service.call @@ -1396,7 +1396,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1432,7 +1432,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1538,7 +1538,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1555,7 +1555,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and absorbing_organisation_active_from_merge_date is true" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.yesterday, absorbing_organisation_active_from_merge_date: true) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.yesterday, absorbing_organisation_active_from_merge_date: true) } it "sets available from to merge_date for absorbing organisation" do merge_organisations_service.call @@ -1567,7 +1567,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and absorbing_organisation_active_from_merge_date is true" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], absorbing_organisation_active_from_merge_date: true) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids:, absorbing_organisation_active_from_merge_date: true) } it "sets available from to merge_date (today) for absorbing organisation" do merge_organisations_service.call @@ -1579,7 +1579,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "when merging multiple organisations into a new organisation" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: nil) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids:, merge_date: nil) } let(:new_absorbing_organisation) { create(:organisation, :without_dpc, holds_own_stock: false) } let(:new_absorbing_organisation_user) { create(:user, organisation: new_absorbing_organisation) } @@ -1628,7 +1628,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1670,7 +1670,7 @@ RSpec.describe Merge::MergeOrganisationsService do end it "rolls back if there's an error" do - allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(merging_organisation_ids).and_return(Organisation.find(merging_organisation_ids)) allow(Organisation).to receive(:find).with(new_absorbing_organisation.id).and_return(new_absorbing_organisation) allow(new_absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") @@ -1687,7 +1687,7 @@ RSpec.describe Merge::MergeOrganisationsService do end context "and merge date is provided" do - subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: Time.zone.yesterday) } + subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: new_absorbing_organisation.id, merging_organisation_ids:, merge_date: Time.zone.yesterday) } it "sets merge date and absorbing organisation on merged organisations" do merge_organisations_service.call diff --git a/yarn.lock b/yarn.lock index 483095046..0c84d632e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3961,7 +3961,7 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" -jquery-ui@^1.12.1: +"jquery-ui@^1.12.1 <1.14.0": version "1.13.3" resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.13.3.tgz#d9f5292b2857fa1f2fdbbe8f2e66081664eb9bc5" integrity sha512-D2YJfswSJRh/B8M/zCowDpNFfwsDmtfnMPwjJTyvl+CBqzpYwQ+gFYIbUUlzijy/Qvoy30H1YhoSui4MNYpRwA== @@ -4824,10 +4824,10 @@ queue-tick@^1.0.1: resolved "https://registry.yarnpkg.com/queue-tick/-/queue-tick-1.0.1.tgz#f6f07ac82c1fd60f82e098b417a80e52f1f4c142" integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== -rails_admin@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/rails_admin/-/rails_admin-3.1.3.tgz#1da3f2214876f4ffd3a1db01452c28a8f7d4d989" - integrity sha512-79CBB2BMB3fSGPz1P8eNxCboHVlkBWBaxKxfo4QwCAFxsA3WAjfM0MeWUtGHI8Mn8XEZxCdEDz9oYlvlBpMtng== +rails_admin@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/rails_admin/-/rails_admin-3.3.0.tgz#58701b189e40b7c7f9a0a8ba2b996a41d5842017" + integrity sha512-sgdLMdJDOQmkEWYXY0uqLYxi7eMdhCEU4ZuKpVKdSssMoOr9iqCX8/sOP4ErRiC8Iez5x1vXVOv0Iki4ZKCNug== dependencies: "@babel/runtime" "^7.16.7" "@fortawesome/fontawesome-free" ">=5.15.0 <7.0.0" @@ -4837,7 +4837,7 @@ rails_admin@3.1.3: bootstrap "^5.1.3" flatpickr "^4.6.9" jquery "^3.6.0" - jquery-ui "^1.12.1" + jquery-ui "^1.12.1 <1.14.0" random-bytes@~1.0.0: version "1.0.0" From dace19377402cefccf43d40e808ae0040844013b Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 16 Dec 2024 09:07:36 +0000 Subject: [PATCH 2/7] CLDC-3677 Update BU content (#2845) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Change instances of “reupload” to “upload again”, remove inset text * Change bu filter wording * Update heading * Update fix choice content --- app/components/bulk_upload_error_row_component.html.erb | 2 +- app/helpers/logs_helper.rb | 2 +- .../forms/bulk_upload_lettings_resume/fix_choice.rb | 2 +- app/models/forms/bulk_upload_sales_resume/fix_choice.rb | 2 +- .../forms/prepare_your_file_2024.html.erb | 2 -- .../bulk_upload_lettings_resume/deletion_report.html.erb | 2 +- .../confirm.html.erb | 2 +- .../bulk_upload_sales_resume/deletion_report.html.erb | 2 +- .../confirm.html.erb | 2 +- app/views/bulk_upload_shared/_moved_user_banner.html.erb | 4 ++-- app/views/bulk_upload_shared/guidance.html.erb | 2 +- .../bulk_upload_lettings_results_controller_spec.rb | 8 ++++---- ...oad_lettings_soft_validations_check_controller_spec.rb | 2 +- .../requests/bulk_upload_sales_results_controller_spec.rb | 8 ++++---- ...upload_sales_soft_validations_check_controller_spec.rb | 2 +- spec/requests/lettings_logs_controller_spec.rb | 4 ++-- spec/requests/sales_logs_controller_spec.rb | 4 ++-- 17 files changed, 25 insertions(+), 27 deletions(-) diff --git a/app/components/bulk_upload_error_row_component.html.erb b/app/components/bulk_upload_error_row_component.html.erb index 4bd303957..db1ceab7a 100644 --- a/app/components/bulk_upload_error_row_component.html.erb +++ b/app/components/bulk_upload_error_row_component.html.erb @@ -38,7 +38,7 @@ <% if potential_errors.any? %>The following groups of cells might have conflicting data. Check the answers and fix any incorrect data.
If the answers are correct, fix the critical errors and reupload the file. You'll need to confirm that the following data is correct when the file only contains potential errors.
The following groups of cells might have conflicting data. Check the answers and fix any incorrect data.
If the answers are correct, fix the critical errors and upload the file again. You'll need to confirm that the following data is correct when the file only contains potential errors.
<%= logs_and_soft_validations_warning(@bulk_upload) %>
diff --git a/app/views/bulk_upload_sales_resume/deletion_report.html.erb b/app/views/bulk_upload_sales_resume/deletion_report.html.erb index bcc044439..e9013a4e2 100644 --- a/app/views/bulk_upload_sales_resume/deletion_report.html.erb +++ b/app/views/bulk_upload_sales_resume/deletion_report.html.erb @@ -28,6 +28,6 @@ diff --git a/app/views/bulk_upload_sales_soft_validations_check/confirm.html.erb b/app/views/bulk_upload_sales_soft_validations_check/confirm.html.erb index 2b4a6e981..5c81c179d 100644 --- a/app/views/bulk_upload_sales_soft_validations_check/confirm.html.erb +++ b/app/views/bulk_upload_sales_soft_validations_check/confirm.html.erb @@ -5,7 +5,7 @@<%= logs_and_soft_validations_warning(@bulk_upload) %>
diff --git a/app/views/bulk_upload_shared/_moved_user_banner.html.erb b/app/views/bulk_upload_shared/_moved_user_banner.html.erb index 9ab97022e..220405cc5 100644 --- a/app/views/bulk_upload_shared/_moved_user_banner.html.erb +++ b/app/views/bulk_upload_shared/_moved_user_banner.html.erb @@ -4,9 +4,9 @@ This error report is out of date.<% if current_user.id == @bulk_upload.moved_user_id %> - You moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report. + You moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report. <% else %> - Some logs in this upload are assigned to <%= @bulk_upload.moved_user_name %>, who has moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report. + Some logs in this upload are assigned to <%= @bulk_upload.moved_user_name %>, who has moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report. <% end %> <% end %> <% end %> diff --git a/app/views/bulk_upload_shared/guidance.html.erb b/app/views/bulk_upload_shared/guidance.html.erb index d3950fff7..54e8063f0 100644 --- a/app/views/bulk_upload_shared/guidance.html.erb +++ b/app/views/bulk_upload_shared/guidance.html.erb @@ -75,7 +75,7 @@
Once you've saved your CSV file, you can upload it via a button at the top of the lettings and sales logs pages.
When your file is done processing, you will receive an email explaining your next steps. If all your data is valid, your logs will be created. If some data is invalid, you’ll receive an email with instructions about how to resolve the errors.
If your file has errors on fields 1 through 15 for lettings, or 1 through 18 for sales, you must fix these in the CSV. This is because we need to know these answers to validate the rest of the data. Any errors in these fields will be featured in the error report’s summary tab.
-If none of your errors are in fields 1 through 15 for lettings, or 1 through 18 for sales, you can choose how to fix the errors. You can either fix them in the CSV and reupload, or create partially complete logs and answer the remaining questions on the CORE site. Any errors that affect a significant number of logs will be featured in the error report’s summary tab to help you decide.
+If none of your errors are in fields 1 through 15 for lettings, or 1 through 18 for sales, you can choose how to fix the errors. You can either fix them in the CSV and upload the file again, or create partially complete logs and answer the remaining questions on the CORE site. Any errors that affect a significant number of logs will be featured in the error report’s summary tab to help you decide.
<% end %> diff --git a/spec/requests/bulk_upload_lettings_results_controller_spec.rb b/spec/requests/bulk_upload_lettings_results_controller_spec.rb index b23cb2c17..3c84487ac 100644 --- a/spec/requests/bulk_upload_lettings_results_controller_spec.rb +++ b/spec/requests/bulk_upload_lettings_results_controller_spec.rb @@ -68,7 +68,7 @@ RSpec.describe BulkUploadLettingsResultsController, type: :request do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(CGI.unescapeHTML(response.body)).to include("Some logs in this upload are assigned to #{user.name}, who has moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(CGI.unescapeHTML(response.body)).to include("Some logs in this upload are assigned to #{user.name}, who has moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end @@ -79,7 +79,7 @@ RSpec.describe BulkUploadLettingsResultsController, type: :request do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(response.body).to include("You moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(response.body).to include("You moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end end @@ -138,7 +138,7 @@ RSpec.describe BulkUploadLettingsResultsController, type: :request do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(response.body).to include("Some logs in this upload are assigned to #{other_user.name}, who has moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(response.body).to include("Some logs in this upload are assigned to #{other_user.name}, who has moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end @@ -149,7 +149,7 @@ RSpec.describe BulkUploadLettingsResultsController, type: :request do get "/lettings-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(response.body).to include("You moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(response.body).to include("You moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end end diff --git a/spec/requests/bulk_upload_lettings_soft_validations_check_controller_spec.rb b/spec/requests/bulk_upload_lettings_soft_validations_check_controller_spec.rb index 315235e0e..2a2668d60 100644 --- a/spec/requests/bulk_upload_lettings_soft_validations_check_controller_spec.rb +++ b/spec/requests/bulk_upload_lettings_soft_validations_check_controller_spec.rb @@ -98,7 +98,7 @@ RSpec.describe BulkUploadLettingsSoftValidationsCheckController, type: :request expect(response).to be_successful - expect(response.body).to include("You have chosen to upload all logs from this bulk upload.") + expect(response.body).to include("Are you sure you want to upload all logs from this bulk upload?") expect(response.body).to include("You will upload 2 logs. There are unexpected answers in 2 logs, and 2 unexpected answers in total. These unexpected answers will be marked as correct.") expect(response.body).not_to include("You’ve successfully uploaded") end diff --git a/spec/requests/bulk_upload_sales_results_controller_spec.rb b/spec/requests/bulk_upload_sales_results_controller_spec.rb index b7bb7a10c..e58303d68 100644 --- a/spec/requests/bulk_upload_sales_results_controller_spec.rb +++ b/spec/requests/bulk_upload_sales_results_controller_spec.rb @@ -30,7 +30,7 @@ RSpec.describe BulkUploadSalesResultsController, type: :request do get "/sales-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(response.body).to include("Some logs in this upload are assigned to #{user.name}, who has moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(response.body).to include("Some logs in this upload are assigned to #{user.name}, who has moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end @@ -41,7 +41,7 @@ RSpec.describe BulkUploadSalesResultsController, type: :request do get "/sales-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(response.body).to include("You moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(response.body).to include("You moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end end @@ -113,7 +113,7 @@ RSpec.describe BulkUploadSalesResultsController, type: :request do get "/sales-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(response.body).to include("Some logs in this upload are assigned to #{other_user.name}, who has moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(response.body).to include("Some logs in this upload are assigned to #{other_user.name}, who has moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end @@ -124,7 +124,7 @@ RSpec.describe BulkUploadSalesResultsController, type: :request do get "/sales-logs/bulk-upload-results/#{bulk_upload.id}/summary" expect(response.body).to include("This error report is out of date.") - expect(response.body).to include("You moved to a different organisation since this file was uploaded. Reupload the file to get an accurate error report.") + expect(response.body).to include("You moved to a different organisation since this file was uploaded. Upload the file again to get an accurate error report.") end end end diff --git a/spec/requests/bulk_upload_sales_soft_validations_check_controller_spec.rb b/spec/requests/bulk_upload_sales_soft_validations_check_controller_spec.rb index 90e44a4f7..a3a826ad3 100644 --- a/spec/requests/bulk_upload_sales_soft_validations_check_controller_spec.rb +++ b/spec/requests/bulk_upload_sales_soft_validations_check_controller_spec.rb @@ -98,7 +98,7 @@ RSpec.describe BulkUploadSalesSoftValidationsCheckController, type: :request do expect(response).to be_successful - expect(response.body).to include("You have chosen to upload all logs from this bulk upload.") + expect(response.body).to include("Are you sure you want to upload all logs from this bulk upload?") expect(response.body).to include("You will upload 2 logs. There are unexpected answers in 2 logs, and 2 unexpected answers in total. These unexpected answers will be marked as correct.") expect(response.body).not_to include("You’ve successfully uploaded") end diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index 14cd3095c..05d83a162 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -609,7 +609,7 @@ RSpec.describe LettingsLogsController, type: :request do it "displays filter" do get "/lettings-logs?bulk_upload_id[]=#{bulk_upload.id}" - expect(page).to have_content("With logs from bulk upload") + expect(page).to have_content("Only logs from this bulk upload") end it "hides collection year filter" do @@ -695,7 +695,7 @@ RSpec.describe LettingsLogsController, type: :request do context "without bulk_upload_id" do it "does not display filter" do get "/lettings-logs" - expect(page).not_to have_content("With logs from bulk upload") + expect(page).not_to have_content("Only logs from this bulk upload") end it "displays button to create a new log" do diff --git a/spec/requests/sales_logs_controller_spec.rb b/spec/requests/sales_logs_controller_spec.rb index 06461bf4f..d8209fa1d 100644 --- a/spec/requests/sales_logs_controller_spec.rb +++ b/spec/requests/sales_logs_controller_spec.rb @@ -452,7 +452,7 @@ RSpec.describe SalesLogsController, type: :request do it "displays filter" do get "/sales-logs?bulk_upload_id[]=#{bulk_upload.id}" - expect(page).to have_content("With logs from bulk upload") + expect(page).to have_content("Only logs from this bulk upload") end it "hides collection year filter" do @@ -536,7 +536,7 @@ RSpec.describe SalesLogsController, type: :request do context "without bulk_upload_id" do it "does not display filter" do get "/sales-logs" - expect(page).not_to have_content("With logs from bulk upload") + expect(page).not_to have_content("Only logs from this bulk upload") end it "displays button to create a new log" do From 6c97ba7634a594ff542296341834516d22bf6c4c Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:03:21 +0000 Subject: [PATCH 3/7] Bug fix (#2870) --- config/locales/validations/sales/2024/bulk_upload.en.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/validations/sales/2024/bulk_upload.en.yml b/config/locales/validations/sales/2024/bulk_upload.en.yml index 2621386c1..4a2d88b46 100644 --- a/config/locales/validations/sales/2024/bulk_upload.en.yml +++ b/config/locales/validations/sales/2024/bulk_upload.en.yml @@ -18,8 +18,8 @@ en: owning_organisation: not_found: "The owning organisation code is incorrect." not_stock_owner: "The owning organisation code provided is for an organisation that does not own stock." - not_permitted: - support: "This owning organisation is not affiliated with %(name)." + not_permitted: + support: "This owning organisation is not affiliated with %{name}." not_support: "You do not have permission to add logs for this owning organisation." assigned_to: not_found: "User with the specified email could not be found." From 456d1e658628720808e03e376866bfeb733b9c92 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:20:19 +0000 Subject: [PATCH 4/7] Do not run pregnancy validations if hhmemb is over 8 (#2869) --- app/models/validations/soft_validations.rb | 4 +++ .../validations/soft_validations_spec.rb | 28 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index 0b76f792b..1a2c61138 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -84,6 +84,8 @@ module Validations::SoftValidations end def all_tenants_age_and_gender_information_completed? + return false if hhmemb.present? && hhmemb > 8 + person_count = hhmemb || 8 (1..person_count).all? do |n| @@ -235,6 +237,8 @@ private end def all_male_tenants_in_the_household? + return false if hhmemb.present? && hhmemb > 8 + person_count = hhmemb || 8 (1..person_count).all? do |n| diff --git a/spec/models/validations/soft_validations_spec.rb b/spec/models/validations/soft_validations_spec.rb index 8c7380fde..b4188ba8c 100644 --- a/spec/models/validations/soft_validations_spec.rb +++ b/spec/models/validations/soft_validations_spec.rb @@ -174,6 +174,20 @@ RSpec.describe Validations::SoftValidations do end end + context "when all tenants are male and household members are over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "M") + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + end + end + context "when female tenants are under 16" do it "shows the interruption screen" do record.age2 = 14 @@ -219,6 +233,20 @@ RSpec.describe Validations::SoftValidations do expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false end end + + context "when number of household members is over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "F") + record.send("age#{n}=", 50) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false + end + end end describe "major repairs date soft validations" do From b8503aa0c663eb221c7b1a6ce84edfe0ca858f42 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:20:34 +0000 Subject: [PATCH 5/7] Remove old feature flags (#2862) --- app/controllers/lettings_logs_controller.rb | 2 +- app/controllers/organisations_controller.rb | 4 ++-- app/controllers/sales_logs_controller.rb | 2 +- app/services/feature_toggle.rb | 16 ---------------- app/views/locations/check_answers.html.erb | 2 +- app/views/locations/show.html.erb | 2 +- app/views/schemes/check_answers.html.erb | 2 +- app/views/schemes/show.html.erb | 2 +- app/views/users/show.html.erb | 2 +- 9 files changed, 9 insertions(+), 25 deletions(-) diff --git a/app/controllers/lettings_logs_controller.rb b/app/controllers/lettings_logs_controller.rb index af3a6c32f..7fef9499b 100644 --- a/app/controllers/lettings_logs_controller.rb +++ b/app/controllers/lettings_logs_controller.rb @@ -22,7 +22,7 @@ class LettingsLogsController < LogsController @total_count = all_logs.size @unresolved_count = all_logs.unresolved.assigned_to(current_user).count @filter_type = "lettings_logs" - @duplicate_sets_count = FeatureToggle.duplicate_summary_enabled? && !current_user.support? ? duplicate_sets_count(current_user, current_user.organisation) : 0 + @duplicate_sets_count = !current_user.support? ? duplicate_sets_count(current_user, current_user.organisation) : 0 render "logs/index" end diff --git a/app/controllers/organisations_controller.rb b/app/controllers/organisations_controller.rb index 93b667a99..a6d9fb61e 100644 --- a/app/controllers/organisations_controller.rb +++ b/app/controllers/organisations_controller.rb @@ -186,7 +186,7 @@ class OrganisationsController < ApplicationController @total_count = organisation_logs.size @log_type = :lettings @filter_type = "lettings_logs" - @duplicate_sets_count = FeatureToggle.duplicate_summary_enabled? ? duplicate_sets_count(current_user, @organisation) : 0 + @duplicate_sets_count = duplicate_sets_count(current_user, @organisation) render "logs", layout: "application" end @@ -218,7 +218,7 @@ class OrganisationsController < ApplicationController @total_count = organisation_logs.size @log_type = :sales @filter_type = "sales_logs" - @duplicate_sets_count = FeatureToggle.duplicate_summary_enabled? ? duplicate_sets_count(current_user, @organisation) : 0 + @duplicate_sets_count = duplicate_sets_count(current_user, @organisation) render "logs", layout: "application" end diff --git a/app/controllers/sales_logs_controller.rb b/app/controllers/sales_logs_controller.rb index 8799fe528..237fd94d7 100644 --- a/app/controllers/sales_logs_controller.rb +++ b/app/controllers/sales_logs_controller.rb @@ -24,7 +24,7 @@ class SalesLogsController < LogsController @searched = search_term.presence @total_count = all_logs.size @filter_type = "sales_logs" - @duplicate_sets_count = FeatureToggle.duplicate_summary_enabled? && !current_user.support? ? duplicate_sets_count(current_user, current_user.organisation) : 0 + @duplicate_sets_count = !current_user.support? ? duplicate_sets_count(current_user, current_user.organisation) : 0 render "logs/index" end diff --git a/app/services/feature_toggle.rb b/app/services/feature_toggle.rb index 065c3b54e..8c3fe9362 100644 --- a/app/services/feature_toggle.rb +++ b/app/services/feature_toggle.rb @@ -11,10 +11,6 @@ class FeatureToggle !Rails.env.development? end - def self.duplicate_summary_enabled? - true - end - def self.service_unavailable? false end @@ -23,18 +19,6 @@ class FeatureToggle false end - def self.delete_scheme_enabled? - true - end - - def self.delete_location_enabled? - true - end - - def self.delete_user_enabled? - true - end - def self.local_storage? Rails.env.development? end diff --git a/app/views/locations/check_answers.html.erb b/app/views/locations/check_answers.html.erb index 8cd8bde2a..7a3a72e13 100644 --- a/app/views/locations/check_answers.html.erb +++ b/app/views/locations/check_answers.html.erb @@ -42,7 +42,7 @@ <% if LocationPolicy.new(current_user, @location).create? %> From 9a164dfa687515d2f06b111f2df667a433655078 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:26:29 +0000 Subject: [PATCH 6/7] Export dates as iso8601 (#2871) --- app/services/exports/organisation_export_service.rb | 6 ++++-- app/services/exports/user_export_service.rb | 1 + spec/fixtures/exports/user.xml | 2 +- spec/services/exports/organisation_export_service_spec.rb | 2 +- spec/services/exports/user_export_service_spec.rb | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/services/exports/organisation_export_service.rb b/app/services/exports/organisation_export_service.rb index 2b2da71c8..afcf16cb0 100644 --- a/app/services/exports/organisation_export_service.rb +++ b/app/services/exports/organisation_export_service.rb @@ -56,11 +56,13 @@ module Exports def apply_cds_transformation(organisation) attribute_hash = organisation.attributes - attribute_hash["deleted_at"] = organisation.discarded_at + attribute_hash["deleted_at"] = organisation.discarded_at&.iso8601 attribute_hash["dsa_signed"] = organisation.data_protection_confirmed? - attribute_hash["dsa_signed_at"] = organisation.data_protection_confirmation&.signed_at + attribute_hash["dsa_signed_at"] = organisation.data_protection_confirmation&.signed_at&.iso8601 attribute_hash["dpo_email"] = organisation.data_protection_confirmation&.data_protection_officer_email attribute_hash["provider_type"] = organisation.provider_type_before_type_cast + attribute_hash["merge_date"] = organisation.merge_date&.iso8601 + attribute_hash["available_from"] = organisation.available_from&.iso8601 attribute_hash["profit_status"] = nil # will need update when we add the field to the org attribute_hash["group"] = nil # will need update when we add the field to the org diff --git a/app/services/exports/user_export_service.rb b/app/services/exports/user_export_service.rb index aaa30c424..707d13c14 100644 --- a/app/services/exports/user_export_service.rb +++ b/app/services/exports/user_export_service.rb @@ -60,6 +60,7 @@ module Exports attribute_hash["organisation_name"] = user.organisation.name attribute_hash["active"] = user.active? attribute_hash["phone"] = [user.phone, user.phone_extension].compact.join(" ") + attribute_hash["last_sign_in_at"] = user.last_sign_in_at&.iso8601 attribute_hash end end diff --git a/spec/fixtures/exports/user.xml b/spec/fixtures/exports/user.xml index d29a33225..4c5286c68 100644 --- a/spec/fixtures/exports/user.xml +++ b/spec/fixtures/exports/user.xml @@ -6,7 +6,7 @@