Browse Source

Merge branch 'main' into CLDC-2933-missing-address-data-import

pull/2021/head
natdeanlewissoftwire 3 years ago
parent
commit
a371ee889e
  1. 9
      app/controllers/application_controller.rb
  2. 7
      app/controllers/maintenance_controller.rb
  3. 4
      app/services/feature_toggle.rb
  4. 2
      app/views/layouts/application.html.erb
  5. 11
      app/views/maintenance/service_unavailable.html.erb
  6. 3
      config/initializers/sidekiq.rb
  7. 1
      config/routes.rb
  8. 27
      spec/controllers/maintenance_controller_spec.rb
  9. 13
      spec/features/user_spec.rb
  10. 36
      spec/requests/content_controller_spec.rb
  11. 42
      spec/requests/cookies_controller_spec.rb
  12. 85
      spec/requests/maintenance_controller_spec.rb

9
app/controllers/application_controller.rb

@ -3,8 +3,17 @@ class ApplicationController < ActionController::Base
rescue_from Pundit::NotAuthorizedError, with: :render_not_authorized
before_action :check_maintenance
before_action :set_paper_trail_whodunnit
def check_maintenance
if FeatureToggle.maintenance_mode_enabled? && !%w[service-unavailable accessibility-statement privacy-notice cookies].include?(request.fullpath.split("?")[0].delete("/"))
redirect_to service_unavailable_path
elsif !FeatureToggle.maintenance_mode_enabled? && request.fullpath.split("?")[0].delete("/") == "service-unavailable"
redirect_back(fallback_location: root_path)
end
end
def render_not_found
render "errors/not_found", status: :not_found
end

7
app/controllers/maintenance_controller.rb

@ -0,0 +1,7 @@
class MaintenanceController < ApplicationController
def service_unavailable
if current_user
sign_out
end
end
end

4
app/services/feature_toggle.rb

@ -37,4 +37,8 @@ class FeatureToggle
def self.duplicate_summary_enabled?
!Rails.env.production?
end
def self.maintenance_mode_enabled?
false
end
end

2
app/views/layouts/application.html.erb

@ -91,12 +91,14 @@
navigation_classes: "govuk-header__navigation--end",
) do |component|
component.product_name(name: t("service_name"))
unless FeatureToggle.maintenance_mode_enabled?
if current_user.nil?
component.navigation_item(text: "Sign in", href: user_session_path)
else
component.navigation_item(text: "Your account", href: account_path)
component.navigation_item(text: "Sign out", href: destroy_user_session_path)
end
end
end %>
<% feedback_link = govuk_link_to "giving us your feedback (opens in a new tab)", t("feedback_form"), rel: "noreferrer noopener", target: "_blank" %>

11
app/views/maintenance/service_unavailable.html.erb

@ -0,0 +1,11 @@
<h1 class="govuk-heading-l govuk-!-width-two-thirds">
Sorry, the service is unavailable
</h1>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds-from-desktop">
<p class="govuk-body">You will be able to use the service from 9am on Thursday 16 November 2023.</p>
<p class="govuk-body">Changes from the page you were on have not been saved. Changes on pages where you have selected 'save and continue' have been saved.</p>
<p class="govuk-body"><%= govuk_link_to "Contact the helpdesk", "https://dluhcdigital.atlassian.net/servicedesk/customer/portal/6/group/11" %> if you need help.</p>
</div>
</div>

3
config/initializers/sidekiq.rb

@ -32,8 +32,11 @@ Redis.silence_deprecations = true
Sidekiq.configure_server do |config|
config.on(:startup) do
Sidekiq::Cron::Job.all.each(&:destroy)
unless FeatureToggle.maintenance_mode_enabled?
Sidekiq::Cron::Job.load_from_hash YAML.load_file("config/sidekiq_cron_schedule.yml")
end
end
config.on(:shutdown) do
Sidekiq::CLI.instance.launcher.quiet

1
config/routes.rb

@ -35,6 +35,7 @@ Rails.application.routes.draw do
get "/accessibility-statement", to: "content#accessibility_statement"
get "/privacy-notice", to: "content#privacy_notice"
get "/data-sharing-agreement", to: "content#data_sharing_agreement"
get "/service-unavailable", to: "maintenance#service_unavailable"
get "/download-23-24-lettings-form", to: "start#download_23_24_lettings_form"
get "/download-22-23-lettings-form", to: "start#download_22_23_lettings_form"

27
spec/controllers/maintenance_controller_spec.rb

@ -0,0 +1,27 @@
require "rails_helper"
RSpec.describe MaintenanceController do
let(:user) { FactoryBot.create(:user) }
describe "GET #service_unavailable" do
context "when maintenance mode is enabled" do
it "logs the user out" do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(true)
sign_in user
expect(controller).to be_user_signed_in
get :service_unavailable
expect(controller).not_to be_user_signed_in
end
end
context "when maintenance mode is disabled" do
it "doesn't log the user out" do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(false)
sign_in user
expect(controller).to be_user_signed_in
get :service_unavailable
expect(controller).to be_user_signed_in
end
end
end
end

13
spec/features/user_spec.rb

@ -139,6 +139,12 @@ RSpec.describe "User Features" do
visit("/users/#{user.id}")
expect(page).to have_content("Sign in to your account to submit CORE data")
end
it "does not show 'Sign in' link if maintenance mode is enabled" do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(true)
visit("/lettings-logs")
expect(page).not_to have_link("Sign in")
end
end
context "when the user is trying to log in with incorrect credentials" do
@ -324,6 +330,13 @@ RSpec.describe "User Features" do
expect(page).to have_selector('[data-qa="change-data-protection-officer"]')
expect(page).to have_selector('[data-qa="change-key-contact"]')
end
it "does not show 'Your account' or 'Sign out' links if maintenance mode is enabled" do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(true)
visit("/lettings-logs")
expect(page).not_to have_link("Your account")
expect(page).not_to have_link("Sign out")
end
end
context "when adding a new user" do

36
spec/requests/content_controller_spec.rb

@ -4,6 +4,7 @@ RSpec.describe ContentController, type: :request do
let(:headers) { { "Accept" => "text/html" } }
let(:page) { Capybara::Node::Simple.new(response.body) }
describe "when maintenance mode is disabled" do
describe "render privacy notice content page" do
before do
get "/privacy-notice", headers:, params: {}
@ -46,3 +47,38 @@ RSpec.describe ContentController, type: :request do
end
end
end
describe "when maintenance mode is enabled" do
before do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(true)
end
describe "render privacy notice content page" do
before do
get "/privacy-notice", headers:, params: {}
end
it "returns a 200" do
expect(response).to have_http_status(:success)
end
it "returns the page" do
expect(page).to have_title("Privacy notice")
end
end
describe "render accessibility statement content page" do
before do
get "/accessibility-statement", headers:, params: {}
end
it "returns a 200" do
expect(response).to have_http_status(:success)
end
it "returns the page" do
expect(page).to have_title("Accessibility statement")
end
end
end
end

42
spec/requests/cookies_controller_spec.rb

@ -0,0 +1,42 @@
require "rails_helper"
RSpec.describe CookiesController, type: :request do
let(:headers) { { "Accept" => "text/html" } }
let(:page) { Capybara::Node::Simple.new(response.body) }
describe "when maintenance mode is disabled" do
describe "render cookies page" do
before do
get "/cookies", headers:, params: {}
end
it "returns a 200" do
expect(response).to have_http_status(:success)
end
it "returns the page" do
expect(page).to have_title("Cookies")
end
end
end
describe "when maintenance mode is enabled" do
before do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(true)
end
describe "render cookies page" do
before do
get "/cookies", headers:, params: {}
end
it "returns a 200" do
expect(response).to have_http_status(:success)
end
it "returns the page" do
expect(page).to have_title("Cookies")
end
end
end
end

85
spec/requests/maintenance_controller_spec.rb

@ -0,0 +1,85 @@
require "rails_helper"
RSpec.describe MaintenanceController, type: :request do
let(:page) { Capybara::Node::Simple.new(response.body) }
let(:user) { FactoryBot.create(:user) }
before do
sign_in user
end
describe "when maintenance mode is enabled" do
before do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(true)
end
context "when a user visits a page other than the maintenance page" do
before do
get "/lettings-logs"
end
it "redirects the user to the maintenance page" do
expect(response).to redirect_to(service_unavailable_path)
follow_redirect!
expect(page).to have_content("Sorry, the service is unavailable")
end
it "the cookie banner is visible" do
follow_redirect!
expect(page).to have_content("We’d like to use analytics cookies so we can understand how you use the service and make improvements.")
end
end
context "when a user visits the maintenance page" do
before do
get "/service-unavailable"
end
it "keeps the user on the maintenance page" do
expect(response).not_to redirect_to(service_unavailable_path)
expect(page).to have_content("Sorry, the service is unavailable")
end
it "the cookie banner is visible" do
expect(page).to have_content("We’d like to use analytics cookies so we can understand how you use the service and make improvements.")
end
end
end
describe "when maintenance mode is disabled" do
before do
allow(FeatureToggle).to receive(:maintenance_mode_enabled?).and_return(false)
end
context "when a user visits a page other than the maintenance page" do
before do
get "/lettings-logs"
end
it "doesn't redirect the user to the maintenance page" do
expect(response).not_to redirect_to(service_unavailable_path)
expect(page).to have_content("Create a new lettings log")
end
it "the cookie banner is visible" do
expect(page).to have_content("We’d like to use analytics cookies so we can understand how you use the service and make improvements.")
end
end
context "when a user visits the maintenance page" do
before do
get "/service-unavailable"
end
it "redirects the user to the start page" do
expect(response).to redirect_to(root_path)
end
it "the cookie banner is visible" do
follow_redirect!
follow_redirect!
expect(page).to have_content("We’d like to use analytics cookies so we can understand how you use the service and make improvements.")
end
end
end
end
Loading…
Cancel
Save