From 948598b129f6866beb85dcc642531508d3b4eb6b Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 4 Apr 2024 09:23:42 -0400 Subject: [PATCH 1/7] Update accessibility checkers to latest version --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index d0258b2095f..8feb71e0c4c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -199,10 +199,10 @@ GEM aws-sigv4 (~> 1.1) aws-sigv4 (1.8.0) aws-eventstream (~> 1, >= 1.0.2) - axe-core-api (4.7.0) + axe-core-api (4.9.0) dumb_delegator virtus - axe-core-rspec (4.7.0) + axe-core-rspec (4.9.0) axe-core-api dumb_delegator virtus @@ -448,7 +448,7 @@ GEM net-ssh (6.1.0) newrelic_rpm (9.7.0) nio4r (2.7.0) - nokogiri (1.16.2) + nokogiri (1.16.3) mini_portile2 (~> 2.8.2) racc (~> 1.4) openssl (3.0.2) From eb3522b3640daa3de7c9a6a2c79fa033fba64eff Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 4 Apr 2024 09:24:46 -0400 Subject: [PATCH 2/7] Incorporate latest WCAG 2 AA (ideally 2.2) Section 508 is redundant with WCAG 2 AA: "The Revised 508 Standards incorporate by reference the WCAG 2.0 Level AA Success Criteria, and apply the WCAG 2.0 Level AA success criteria and conformance requirements to both web and non-web electronic content." https://www.section508.gov/develop/applicability-conformance/ --- spec/support/matchers/accessibility.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/spec/support/matchers/accessibility.rb b/spec/support/matchers/accessibility.rb index b9e295ecc66..32e2c02549d 100644 --- a/spec/support/matchers/accessibility.rb +++ b/spec/support/matchers/accessibility.rb @@ -310,10 +310,7 @@ def fieldset_legend_name(element) end def expect_page_to_have_no_accessibility_violations(page, validate_markup: true) - expect(page).to be_axe_clean.according_to( - :section508, :"best-practice", - :wcag21aa - ). + expect(page).to be_axe_clean.according_to(:wcag2aa, :"best-practice"). # Axe flags redundant img role on img elements, but is necessary for a Safari bug # See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#identifying_svg_as_an_image excluding('img[alt=""][src$=".svg" i]') From df587df0c601f593028df63dd32dd0ef8444c591 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 4 Apr 2024 09:25:10 -0400 Subject: [PATCH 3/7] Check duplicate element IDs in accessibility tests changelog: Internal, Automated Testing, Check duplicate element IDs in accessibility tests --- spec/support/matchers/accessibility.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/spec/support/matchers/accessibility.rb b/spec/support/matchers/accessibility.rb index 32e2c02549d..632c818b947 100644 --- a/spec/support/matchers/accessibility.rb +++ b/spec/support/matchers/accessibility.rb @@ -170,6 +170,23 @@ def landmarks(page) end end +RSpec::Matchers.define :have_unique_ids do + def ids(page) + page.all(:css, '[id]').map { |element| element[:id] } + end + + match do |page| + page_ids = ids(page) + page_ids.uniq.count == page_ids.count + end + + failure_message do |page| + page_ids = ids(page) + duplicate = page_ids.detect { |id| page_ids.count(id) > 1 } + "Expected no duplicate element IDs. Found duplicate: #{duplicate}" + end +end + RSpec::Matchers.define :tag_decorative_svgs_with_role do def decorative_svgs(page) page.all(:css, 'img[alt=""][src$=".svg" i]') @@ -314,6 +331,7 @@ def expect_page_to_have_no_accessibility_violations(page, validate_markup: true) # Axe flags redundant img role on img elements, but is necessary for a Safari bug # See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#identifying_svg_as_an_image excluding('img[alt=""][src$=".svg" i]') + expect(page).to have_unique_ids expect(page).to have_valid_idrefs expect(page).to label_required_fields expect(page).to have_valid_markup if validate_markup From 12ae6e40e06165df5473b29aab84e2d8fe64d1ef Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 4 Apr 2024 09:25:21 -0400 Subject: [PATCH 4/7] Temporary: Demonstrate failure --- app/views/devise/sessions/new.html.erb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 4740a47101c..90c9cce86fe 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -23,6 +23,8 @@

<% end %> +foofoo + <%= simple_form_for( resource, as: resource_name, From fe23652b08a4f8a0a3efe6d6e7807b0f7549272c Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 4 Apr 2024 11:04:42 -0400 Subject: [PATCH 5/7] Revert "Temporary: Demonstrate failure" This reverts commit 12ae6e40e06165df5473b29aab84e2d8fe64d1ef. --- app/views/devise/sessions/new.html.erb | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index 90c9cce86fe..4740a47101c 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -23,8 +23,6 @@

<% end %> -foofoo - <%= simple_form_for( resource, as: resource_name, From b6a35a0627913e16c568246e58ed0b5c063c86cb Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 4 Apr 2024 11:15:41 -0400 Subject: [PATCH 6/7] Fix duplicate form ID on how to verify page --- app/views/idv/how_to_verify/show.html.erb | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/app/views/idv/how_to_verify/show.html.erb b/app/views/idv/how_to_verify/show.html.erb index 2955d67dbce..7a2b5c96e9a 100644 --- a/app/views/idv/how_to_verify/show.html.erb +++ b/app/views/idv/how_to_verify/show.html.erb @@ -16,8 +16,11 @@
<%= simple_form_for( @idv_how_to_verify_form, - html: { autocomplete: 'off', - 'aria-label': t('forms.buttons.continue_remote') }, + html: { + autocomplete: 'off', + id: nil, + aria: { label: t('forms.buttons.continue_remote') }, + }, method: :put, url: idv_how_to_verify_url, ) do |f| @@ -53,8 +56,11 @@
<%= simple_form_for( @idv_how_to_verify_form, - html: { autocomplete: 'off', - 'aria-label': t('forms.buttons.continue_ipp') }, + html: { + autocomplete: 'off', + id: nil, + aria: { label: t('forms.buttons.continue_ipp') }, + }, method: :put, url: idv_how_to_verify_url, ) do |f| From 462ae07d28c7946f43a00d7b82314099a3f06a09 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 4 Apr 2024 11:17:18 -0400 Subject: [PATCH 7/7] Check WCAG 2.2 AA The intent of the previous code was "latest 2.x", meaning 2.2 currently. In reality, "wcag2aa" means "2.0" specifically. Ref: https://github.com/dequelabs/axe-core/blob/master/doc/API.md#axe-core-tags --- spec/support/matchers/accessibility.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/support/matchers/accessibility.rb b/spec/support/matchers/accessibility.rb index 632c818b947..f32e7e75dd6 100644 --- a/spec/support/matchers/accessibility.rb +++ b/spec/support/matchers/accessibility.rb @@ -327,7 +327,7 @@ def fieldset_legend_name(element) end def expect_page_to_have_no_accessibility_violations(page, validate_markup: true) - expect(page).to be_axe_clean.according_to(:wcag2aa, :"best-practice"). + expect(page).to be_axe_clean.according_to(:wcag22aa, :"best-practice"). # Axe flags redundant img role on img elements, but is necessary for a Safari bug # See: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#identifying_svg_as_an_image excluding('img[alt=""][src$=".svg" i]')