From 9020beed8a77851731c3298bca8aff3ba1e6d512 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Tue, 24 Oct 2023 15:29:13 -0400 Subject: [PATCH 1/5] Add feature specs for expected skip link behavior changelog: Internal, Automated Testing, Add feature test for accessible skip link behavior --- spec/features/accessibility/user_pages_spec.rb | 3 +++ spec/features/accessibility/visitor_pages_spec.rb | 3 +++ spec/support/matchers/accessibility.rb | 11 +++++++++++ 3 files changed, 17 insertions(+) diff --git a/spec/features/accessibility/user_pages_spec.rb b/spec/features/accessibility/user_pages_spec.rb index 5b33372668a..8cc43e03c70 100644 --- a/spec/features/accessibility/user_pages_spec.rb +++ b/spec/features/accessibility/user_pages_spec.rb @@ -108,6 +108,9 @@ visit account_path expect_page_to_have_no_accessibility_violations(page) + expect_page_to_have_skip_link(page) do + expect(page.active_element).to match_css('a', text: t('account.index.email_add'), wait: 5) + end end scenario 'delete email page' do diff --git a/spec/features/accessibility/visitor_pages_spec.rb b/spec/features/accessibility/visitor_pages_spec.rb index 25fb54905b6..d56d90b2178 100644 --- a/spec/features/accessibility/visitor_pages_spec.rb +++ b/spec/features/accessibility/visitor_pages_spec.rb @@ -6,6 +6,9 @@ visit root_path expect_page_to_have_no_accessibility_violations(page) + expect_page_to_have_skip_link(page) do + expect(page.active_element).to match_css('a', text: t('links.sign_in'), wait: 5) + end end scenario 'forgot password page' do diff --git a/spec/support/matchers/accessibility.rb b/spec/support/matchers/accessibility.rb index 86632bacb33..aba32ee634e 100644 --- a/spec/support/matchers/accessibility.rb +++ b/spec/support/matchers/accessibility.rb @@ -235,3 +235,14 @@ def expect_page_to_have_no_accessibility_violations(page, validate_markup: true) expect(page).to be_uniquely_titled expect(page).to have_valid_markup if validate_markup end + +def expect_page_to_have_skip_link(page, &block) + page.active_element.send_keys(:tab) + expect(page.active_element).to have_content(t('shared.skip_link'), wait: 5) + + if block.present? + page.active_element.send_keys(:enter) + page.active_element.send_keys(:tab) + yield + end +end From 1295c09e6382531cdada1b8636378d673bd70148 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Tue, 24 Oct 2023 16:23:44 -0400 Subject: [PATCH 2/5] Reorganize spec helpers for skip link activation --- spec/features/accessibility/user_pages_spec.rb | 7 ++++--- spec/features/accessibility/visitor_pages_spec.rb | 7 ++++--- spec/support/matchers/accessibility.rb | 10 +++------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/spec/features/accessibility/user_pages_spec.rb b/spec/features/accessibility/user_pages_spec.rb index 8cc43e03c70..fc65e07aca8 100644 --- a/spec/features/accessibility/user_pages_spec.rb +++ b/spec/features/accessibility/user_pages_spec.rb @@ -108,9 +108,10 @@ visit account_path expect_page_to_have_no_accessibility_violations(page) - expect_page_to_have_skip_link(page) do - expect(page.active_element).to match_css('a', text: t('account.index.email_add'), wait: 5) - end + + activate_skip_link + page.active_element.send_keys :tab + expect(page.active_element).to match_css('a', text: t('account.index.email_add'), wait: 5) end scenario 'delete email page' do diff --git a/spec/features/accessibility/visitor_pages_spec.rb b/spec/features/accessibility/visitor_pages_spec.rb index d56d90b2178..55e393a3d44 100644 --- a/spec/features/accessibility/visitor_pages_spec.rb +++ b/spec/features/accessibility/visitor_pages_spec.rb @@ -6,9 +6,10 @@ visit root_path expect_page_to_have_no_accessibility_violations(page) - expect_page_to_have_skip_link(page) do - expect(page.active_element).to match_css('a', text: t('links.sign_in'), wait: 5) - end + + activate_skip_link + page.active_element.send_keys :tab + expect(page.active_element).to match_css('a', text: t('links.sign_in'), wait: 5) end scenario 'forgot password page' do diff --git a/spec/support/matchers/accessibility.rb b/spec/support/matchers/accessibility.rb index aba32ee634e..d83501c9649 100644 --- a/spec/support/matchers/accessibility.rb +++ b/spec/support/matchers/accessibility.rb @@ -236,13 +236,9 @@ def expect_page_to_have_no_accessibility_violations(page, validate_markup: true) expect(page).to have_valid_markup if validate_markup end -def expect_page_to_have_skip_link(page, &block) +def activate_skip_link + page.evaluate_script('document.activeElement = null') if page.active_element.tag_name != 'body' page.active_element.send_keys(:tab) expect(page.active_element).to have_content(t('shared.skip_link'), wait: 5) - - if block.present? - page.active_element.send_keys(:enter) - page.active_element.send_keys(:tab) - yield - end + page.active_element.send_keys(:enter) end From 5f3bcca1b0ecf07e42c00d45f97a5d6c5b954720 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Tue, 24 Oct 2023 16:30:15 -0400 Subject: [PATCH 3/5] Null assignment doesn't actually work --- 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 d83501c9649..40711e67c75 100644 --- a/spec/support/matchers/accessibility.rb +++ b/spec/support/matchers/accessibility.rb @@ -237,7 +237,7 @@ def expect_page_to_have_no_accessibility_violations(page, validate_markup: true) end def activate_skip_link - page.evaluate_script('document.activeElement = null') if page.active_element.tag_name != 'body' + page.evaluate_script('document.activeElement.blur()') if page.active_element.tag_name != 'body' page.active_element.send_keys(:tab) expect(page.active_element).to have_content(t('shared.skip_link'), wait: 5) page.active_element.send_keys(:enter) From a7a49b90230e8cb27ccd2f0bcb6aabdea1d4db6b Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Tue, 24 Oct 2023 16:30:56 -0400 Subject: [PATCH 4/5] Blur should be a noop if already unfocused --- 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 40711e67c75..296212cd7c3 100644 --- a/spec/support/matchers/accessibility.rb +++ b/spec/support/matchers/accessibility.rb @@ -237,7 +237,7 @@ def expect_page_to_have_no_accessibility_violations(page, validate_markup: true) end def activate_skip_link - page.evaluate_script('document.activeElement.blur()') if page.active_element.tag_name != 'body' + page.evaluate_script('document.activeElement.blur()') page.active_element.send_keys(:tab) expect(page.active_element).to have_content(t('shared.skip_link'), wait: 5) page.active_element.send_keys(:enter) From 33643d4bf4d774b680ccf1f3dc77a63e32d6db90 Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Tue, 24 Oct 2023 16:31:51 -0400 Subject: [PATCH 5/5] Consistently use parantheses --- spec/features/accessibility/user_pages_spec.rb | 2 +- spec/features/accessibility/visitor_pages_spec.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/features/accessibility/user_pages_spec.rb b/spec/features/accessibility/user_pages_spec.rb index fc65e07aca8..de7fa0b1a95 100644 --- a/spec/features/accessibility/user_pages_spec.rb +++ b/spec/features/accessibility/user_pages_spec.rb @@ -110,7 +110,7 @@ expect_page_to_have_no_accessibility_violations(page) activate_skip_link - page.active_element.send_keys :tab + page.active_element.send_keys(:tab) expect(page.active_element).to match_css('a', text: t('account.index.email_add'), wait: 5) end diff --git a/spec/features/accessibility/visitor_pages_spec.rb b/spec/features/accessibility/visitor_pages_spec.rb index 55e393a3d44..ad6c980d1d3 100644 --- a/spec/features/accessibility/visitor_pages_spec.rb +++ b/spec/features/accessibility/visitor_pages_spec.rb @@ -8,7 +8,7 @@ expect_page_to_have_no_accessibility_violations(page) activate_skip_link - page.active_element.send_keys :tab + page.active_element.send_keys(:tab) expect(page.active_element).to match_css('a', text: t('links.sign_in'), wait: 5) end