From dfb567d173a34a9982dc0cfcadb3e547764a98e5 Mon Sep 17 00:00:00 2001 From: Bogdanov Anton Date: Sun, 16 Mar 2025 18:35:04 +0300 Subject: [PATCH] IS-362 modified 500 error page --- CHANGELOG.md | 1 + app/controllers/application_controller.rb | 4 ++-- app/controllers/web/errors_controller.rb | 9 +++++++++ .../access.html.erb => errors/forbidden.html.erb} | 0 app/views/controllers/web/errors/internal.html.erb | 8 ++++++++ .../{shared/404.html.erb => errors/not_found.html.erb} | 0 config/application.rb | 2 ++ config/routes.rb | 2 ++ .../admin/companies/repositories_controller_spec.rb | 2 +- spec/controllers/admin/repositories_controller_spec.rb | 2 +- .../web/companies/configurations_controller_spec.rb | 6 +++--- .../web/companies/repositories_controller_spec.rb | 2 +- spec/controllers/web/companies_controller_spec.rb | 4 ++-- spec/controllers/web/repositories_controller_spec.rb | 4 ++-- spec/support/shared/required_admin_auth.rb | 2 +- 15 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 app/controllers/web/errors_controller.rb rename app/views/controllers/web/{shared/access.html.erb => errors/forbidden.html.erb} (100%) create mode 100644 app/views/controllers/web/errors/internal.html.erb rename app/views/controllers/web/{shared/404.html.erb => errors/not_found.html.erb} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39daafcc..2e6c9a7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## Unreleased ### Modified - migrate primary and foreign keys from ID to UUID +- 500 error page ### Fixed - pagy overflow bug diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index dea2e66b..159f6f09 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -27,10 +27,10 @@ def not_found = page_not_found private def page_not_found - render template: 'web/shared/404', status: :not_found, formats: [:html] + render template: 'web/errors/not_found', status: :not_found, formats: [:html] end def access_denied - render template: 'web/shared/access', status: :forbidden, formats: [:html] + render template: 'web/errors/forbidden', status: :forbidden, formats: [:html] end end diff --git a/app/controllers/web/errors_controller.rb b/app/controllers/web/errors_controller.rb new file mode 100644 index 00000000..41d0c634 --- /dev/null +++ b/app/controllers/web/errors_controller.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module Web + class ErrorsController < ApplicationController + skip_before_action :authenticate + + def internal; end + end +end diff --git a/app/views/controllers/web/shared/access.html.erb b/app/views/controllers/web/errors/forbidden.html.erb similarity index 100% rename from app/views/controllers/web/shared/access.html.erb rename to app/views/controllers/web/errors/forbidden.html.erb diff --git a/app/views/controllers/web/errors/internal.html.erb b/app/views/controllers/web/errors/internal.html.erb new file mode 100644 index 00000000..e1b836ca --- /dev/null +++ b/app/views/controllers/web/errors/internal.html.erb @@ -0,0 +1,8 @@ +<%= render PageWrappers::UserComponent.new(current_user: current_user) do %> +
+
+

Internal error occured

+

We will check debug info and fix the problem

+
+
+<% end %> diff --git a/app/views/controllers/web/shared/404.html.erb b/app/views/controllers/web/errors/not_found.html.erb similarity index 100% rename from app/views/controllers/web/shared/404.html.erb rename to app/views/controllers/web/errors/not_found.html.erb diff --git a/config/application.rb b/config/application.rb index 64eb5db0..8cebf819 100644 --- a/config/application.rb +++ b/config/application.rb @@ -27,6 +27,8 @@ class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 7.1 + config.exceptions_app = routes + config.middleware.use Rack::Deflater # Rack::Brotli goes directly under Rack::Deflater, if Rack::Deflater is present config.middleware.use Rack::Brotli diff --git a/config/routes.rb b/config/routes.rb index 268e833a..72a77c3d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -106,5 +106,7 @@ get 'access_tokens', to: 'welcome#access_tokens' end + get '/500', to: 'web/errors#internal' + root 'web/welcome#index' end diff --git a/spec/controllers/admin/companies/repositories_controller_spec.rb b/spec/controllers/admin/companies/repositories_controller_spec.rb index 71de8244..f9d30cd6 100644 --- a/spec/controllers/admin/companies/repositories_controller_spec.rb +++ b/spec/controllers/admin/companies/repositories_controller_spec.rb @@ -12,7 +12,7 @@ it 'renders 404 page' do do_request - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end diff --git a/spec/controllers/admin/repositories_controller_spec.rb b/spec/controllers/admin/repositories_controller_spec.rb index 6985b792..904e46f4 100644 --- a/spec/controllers/admin/repositories_controller_spec.rb +++ b/spec/controllers/admin/repositories_controller_spec.rb @@ -30,7 +30,7 @@ def do_request context 'for unexisting repository' do it 'does not destroy repository', :aggregate_failures do expect { do_request }.not_to change(Repository, :count) - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end diff --git a/spec/controllers/web/companies/configurations_controller_spec.rb b/spec/controllers/web/companies/configurations_controller_spec.rb index 053f0670..67425116 100644 --- a/spec/controllers/web/companies/configurations_controller_spec.rb +++ b/spec/controllers/web/companies/configurations_controller_spec.rb @@ -20,7 +20,7 @@ it 'renders 404 page' do do_request - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end @@ -28,7 +28,7 @@ it 'renders access page' do get :edit, params: { company_id: company.id, locale: 'en' } - expect(response).to render_template 'shared/access' + expect(response).to render_template 'errors/forbidden' end end @@ -42,7 +42,7 @@ it 'renders access page' do get :edit, params: { company_id: company.id, locale: 'en' } - expect(response).to render_template 'shared/access' + expect(response).to render_template 'errors/forbidden' end end diff --git a/spec/controllers/web/companies/repositories_controller_spec.rb b/spec/controllers/web/companies/repositories_controller_spec.rb index 5177fd40..b9698782 100644 --- a/spec/controllers/web/companies/repositories_controller_spec.rb +++ b/spec/controllers/web/companies/repositories_controller_spec.rb @@ -13,7 +13,7 @@ it 'renders access denied' do do_request - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end diff --git a/spec/controllers/web/companies_controller_spec.rb b/spec/controllers/web/companies_controller_spec.rb index 6d858eca..07b9e483 100644 --- a/spec/controllers/web/companies_controller_spec.rb +++ b/spec/controllers/web/companies_controller_spec.rb @@ -46,7 +46,7 @@ def do_request it 'renders 404 page' do do_request - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end @@ -54,7 +54,7 @@ def do_request it 'renders 404 page' do delete :destroy, params: { id: company.id, locale: 'en' } - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end diff --git a/spec/controllers/web/repositories_controller_spec.rb b/spec/controllers/web/repositories_controller_spec.rb index 62bb73ab..9c1b34c7 100644 --- a/spec/controllers/web/repositories_controller_spec.rb +++ b/spec/controllers/web/repositories_controller_spec.rb @@ -48,7 +48,7 @@ def do_request it 'renders 404 page' do do_request - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end @@ -56,7 +56,7 @@ def do_request it 'renders 404 page' do delete :destroy, params: { id: repository.id, locale: 'en' } - expect(response).to render_template 'shared/404' + expect(response).to render_template 'errors/not_found' end end diff --git a/spec/support/shared/required_admin_auth.rb b/spec/support/shared/required_admin_auth.rb index 98019fee..9cd65b50 100644 --- a/spec/support/shared/required_admin_auth.rb +++ b/spec/support/shared/required_admin_auth.rb @@ -7,7 +7,7 @@ it 'render shared error' do do_request - expect(response).to render_template 'web/shared/access' + expect(response).to render_template 'web/errors/forbidden' end end end