From ce78e50a84348b8df7c8131a6daa107b30579960 Mon Sep 17 00:00:00 2001 From: Laurent Deketelaere Date: Wed, 8 Feb 2023 13:49:41 +0100 Subject: [PATCH 1/4] Improve devise error_message Use Pajamas Alert instead of plain HTML Changelog: changed --- app/views/devise/shared/_error_messages.html.haml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 app/views/devise/shared/_error_messages.html.haml diff --git a/app/views/devise/shared/_error_messages.html.haml b/app/views/devise/shared/_error_messages.html.haml new file mode 100644 index 00000000000000..b9f832fe2ea226 --- /dev/null +++ b/app/views/devise/shared/_error_messages.html.haml @@ -0,0 +1,10 @@ +- if resource.errors.any? + = render Pajamas::AlertComponent.new(title: I18n.t("errors.messages.not_saved", count: resource.errors.count, resource: resource.class.model_name.human.downcase), + variant: :danger, + dismissible: false, + alert_options: { id: 'error_explanation', class: 'gl-mb-3'}) do |c| + = c.body do + %ul + - resource.errors.full_messages.each do |message| + %li + = message -- GitLab From c9e058dbcb29e7d3b576270b24e26ae5a38cf31d Mon Sep 17 00:00:00 2001 From: Tan Le Date: Thu, 16 Feb 2023 11:18:13 +0000 Subject: [PATCH 2/4] Apply review suggestions --- app/views/devise/shared/_error_messages.html.haml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/views/devise/shared/_error_messages.html.haml b/app/views/devise/shared/_error_messages.html.haml index b9f832fe2ea226..fec41de86a5751 100644 --- a/app/views/devise/shared/_error_messages.html.haml +++ b/app/views/devise/shared/_error_messages.html.haml @@ -4,7 +4,6 @@ dismissible: false, alert_options: { id: 'error_explanation', class: 'gl-mb-3'}) do |c| = c.body do - %ul - - resource.errors.full_messages.each do |message| - %li - = message + %ul.gl-pl-4 + - resource.errors.full_messages.each do |message| + %li= message -- GitLab From f33cae3c2c23d986e5f71486acc1fc8db1d14dba Mon Sep 17 00:00:00 2001 From: Laurent Deketelaere Date: Thu, 16 Feb 2023 14:03:38 +0100 Subject: [PATCH 3/4] Fix indentation --- app/views/devise/shared/_error_messages.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/devise/shared/_error_messages.html.haml b/app/views/devise/shared/_error_messages.html.haml index fec41de86a5751..b7589a4460e68a 100644 --- a/app/views/devise/shared/_error_messages.html.haml +++ b/app/views/devise/shared/_error_messages.html.haml @@ -6,4 +6,4 @@ = c.body do %ul.gl-pl-4 - resource.errors.full_messages.each do |message| - %li= message + %li= message -- GitLab From 4109435fb549eeb33240a0817bf4bf258406e14b Mon Sep 17 00:00:00 2001 From: Laurent Deketelaere Date: Thu, 16 Feb 2023 15:34:10 +0100 Subject: [PATCH 4/4] Add _error_messages.html.haml specs --- .../shared/_error_messages.html.haml_spec.rb | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 spec/views/devise/shared/_error_messages.html.haml_spec.rb diff --git a/spec/views/devise/shared/_error_messages.html.haml_spec.rb b/spec/views/devise/shared/_error_messages.html.haml_spec.rb new file mode 100644 index 00000000000000..afd3141f2c7791 --- /dev/null +++ b/spec/views/devise/shared/_error_messages.html.haml_spec.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'devise/shared/_error_messages', feature_category: :authentication_and_authorization do + describe 'Error messages' do + let(:resource) do + instance_spy(User, errors: errors, class: User) + end + + before do + allow(view).to receive(:resource).and_return(resource) + end + + context 'with errors', :aggregate_failures do + let(:errors) { errors_stub(['Invalid name', 'Invalid password']) } + + it 'shows errors' do + render + + expect(rendered).to have_selector('#error_explanation') + expect(rendered).to have_content('Invalid name') + expect(rendered).to have_content('Invalid password') + end + end + + context 'without errors' do + let(:errors) { [] } + + it 'does not show errors' do + render + + expect(rendered).not_to have_selector('#error_explanation') + end + end + end + + def errors_stub(*messages) + ActiveModel::Errors.new(double).tap do |errors| + messages.each { |msg| errors.add(:base, msg) } + end + end +end -- GitLab