Commit 1ca0fa2b by Christine Lytwynec

Merge pull request #10328 from edx/clytwynec/custom-a11y-rules-part2

Clytwynec/custom a11y rules part2
parents 8ce94d2b a40f286e
...@@ -14,7 +14,6 @@ from ...pages.lms.dashboard import DashboardPage ...@@ -14,7 +14,6 @@ from ...pages.lms.dashboard import DashboardPage
from ..helpers import EventsTestMixin from ..helpers import EventsTestMixin
@attr('shard_5')
class AccountSettingsTestMixin(EventsTestMixin, WebAppTest): class AccountSettingsTestMixin(EventsTestMixin, WebAppTest):
""" """
Mixin with helper methods to test the account settings page. Mixin with helper methods to test the account settings page.
...@@ -460,4 +459,10 @@ class AccountSettingsA11yTest(AccountSettingsTestMixin, WebAppTest): ...@@ -460,4 +459,10 @@ class AccountSettingsA11yTest(AccountSettingsTestMixin, WebAppTest):
""" """
self.log_in_as_unique_user() self.log_in_as_unique_user()
self.visit_account_settings_page() self.visit_account_settings_page()
self.account_settings_page.a11y_audit.config.set_rules({
'ignore': [
'link-href', # TODO: AC-233, AC-230
'skip-link', # TODO: AC-179
],
})
self.account_settings_page.a11y_audit.check_for_accessibility_errors() self.account_settings_page.a11y_audit.check_for_accessibility_errors()
...@@ -765,10 +765,12 @@ class LearnerProfileA11yTest(LearnerProfileTestMixin, WebAppTest): ...@@ -765,10 +765,12 @@ class LearnerProfileA11yTest(LearnerProfileTestMixin, WebAppTest):
username, _ = self.log_in_as_unique_user() username, _ = self.log_in_as_unique_user()
profile_page = self.visit_profile_page(username) profile_page = self.visit_profile_page(username)
# TODO: There are several existing color contrast errors on this page,
# we will ignore this error in the test until we fix them.
profile_page.a11y_audit.config.set_rules({ profile_page.a11y_audit.config.set_rules({
"ignore": ['color-contrast'], "ignore": [
'color-contrast', # TODO: AC-232
'skip-link', # TODO: AC-179
'link-href', # TODO: AC-231
],
}) })
profile_page.a11y_audit.check_for_accessibility_errors() profile_page.a11y_audit.check_for_accessibility_errors()
...@@ -791,4 +793,12 @@ class LearnerProfileA11yTest(LearnerProfileTestMixin, WebAppTest): ...@@ -791,4 +793,12 @@ class LearnerProfileA11yTest(LearnerProfileTestMixin, WebAppTest):
different_username, _ = self.initialize_different_user(privacy=self.PRIVACY_PUBLIC) different_username, _ = self.initialize_different_user(privacy=self.PRIVACY_PUBLIC)
self.log_in_as_unique_user() self.log_in_as_unique_user()
profile_page = self.visit_profile_page(different_username) profile_page = self.visit_profile_page(different_username)
profile_page.a11y_audit.config.set_rules({
"ignore": [
'skip-link', # TODO: AC-179
'link-href', # TODO: AC-231
],
})
profile_page.a11y_audit.check_for_accessibility_errors() profile_page.a11y_audit.check_for_accessibility_errors()
...@@ -233,10 +233,11 @@ class LmsDashboardA11yTest(BaseLmsDashboardTest): ...@@ -233,10 +233,11 @@ class LmsDashboardA11yTest(BaseLmsDashboardTest):
course_listings = self.dashboard_page.get_course_listings() course_listings = self.dashboard_page.get_course_listings()
self.assertEqual(len(course_listings), 1) self.assertEqual(len(course_listings), 1)
# There are several existing color contrast errors on this page,
# we will ignore this error in the test until we fix them.
self.dashboard_page.a11y_audit.config.set_rules({ self.dashboard_page.a11y_audit.config.set_rules({
"ignore": ['color-contrast'], "ignore": [
'skip-link', # TODO: AC-179
'link-href', # TODO: AC-230
],
}) })
self.dashboard_page.a11y_audit.check_for_accessibility_errors() self.dashboard_page.a11y_audit.check_for_accessibility_errors()
...@@ -656,7 +656,13 @@ class StudioLibraryA11yTest(StudioLibraryTest): ...@@ -656,7 +656,13 @@ class StudioLibraryA11yTest(StudioLibraryTest):
# There are several existing color contrast errors on this page, # There are several existing color contrast errors on this page,
# we will ignore this error in the test until we fix them. # we will ignore this error in the test until we fix them.
lib_page.a11y_audit.config.set_rules({ lib_page.a11y_audit.config.set_rules({
"ignore": ['color-contrast'], "ignore": [
'color-contrast', # TODO: AC-225
'link-href', # TODO: AC-226
'nav-aria-label', # TODO: AC-227
'skip-link', # TODO: AC-228
'icon-aria-hidden', # TODO: AC-229
],
}) })
lib_page.a11y_audit.check_for_accessibility_errors() lib_page.a11y_audit.check_for_accessibility_errors()
...@@ -344,6 +344,11 @@ class CMSVideoA11yTest(CMSVideoBaseTest): ...@@ -344,6 +344,11 @@ class CMSVideoA11yTest(CMSVideoBaseTest):
def test_video_player_a11y(self): def test_video_player_a11y(self):
# Limit the scope of the audit to the video player only. # Limit the scope of the audit to the video player only.
self.outline.a11y_audit.config.set_scope(include=["div.video"]) self.outline.a11y_audit.config.set_scope(include=["div.video"])
self.outline.a11y_audit.config.set_rules({
"ignore": [
'link-href', # TODO: AC-223
],
})
self._create_course_unit() self._create_course_unit()
self.outline.a11y_audit.check_for_accessibility_errors() self.outline.a11y_audit.check_for_accessibility_errors()
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
""" """
Acceptance tests for Video. Acceptance tests for Video.
""" """
import os
from mock import patch
from nose.plugins.attrib import attr from nose.plugins.attrib import attr
from unittest import skipIf, skip from unittest import skipIf, skip
from ..helpers import UniqueCourseTest, is_youtube_available, YouTubeStubConfig from ..helpers import UniqueCourseTest, is_youtube_available, YouTubeStubConfig
...@@ -30,7 +33,6 @@ HTML5_SOURCES_INCORRECT = [ ...@@ -30,7 +33,6 @@ HTML5_SOURCES_INCORRECT = [
] ]
@attr('shard_4')
@skipIf(is_youtube_available() is False, 'YouTube is not available!') @skipIf(is_youtube_available() is False, 'YouTube is not available!')
class VideoBaseTest(UniqueCourseTest): class VideoBaseTest(UniqueCourseTest):
""" """
...@@ -192,6 +194,7 @@ class VideoBaseTest(UniqueCourseTest): ...@@ -192,6 +194,7 @@ class VideoBaseTest(UniqueCourseTest):
self.video.wait_for_video_player_render() self.video.wait_for_video_player_render()
@attr('shard_4')
class YouTubeVideoTest(VideoBaseTest): class YouTubeVideoTest(VideoBaseTest):
""" Test YouTube Video Player """ """ Test YouTube Video Player """
...@@ -849,6 +852,7 @@ class YouTubeVideoTest(VideoBaseTest): ...@@ -849,6 +852,7 @@ class YouTubeVideoTest(VideoBaseTest):
execute_video_steps(tab1_video_names) execute_video_steps(tab1_video_names)
@attr('shard_4')
class YouTubeHtml5VideoTest(VideoBaseTest): class YouTubeHtml5VideoTest(VideoBaseTest):
""" Test YouTube HTML5 Video Player """ """ Test YouTube HTML5 Video Player """
...@@ -870,6 +874,7 @@ class YouTubeHtml5VideoTest(VideoBaseTest): ...@@ -870,6 +874,7 @@ class YouTubeHtml5VideoTest(VideoBaseTest):
self.assertTrue(self.video.is_video_rendered('youtube')) self.assertTrue(self.video.is_video_rendered('youtube'))
@attr('shard_4')
class Html5VideoTest(VideoBaseTest): class Html5VideoTest(VideoBaseTest):
""" Test HTML5 Video Player """ """ Test HTML5 Video Player """
...@@ -1055,6 +1060,7 @@ class Html5VideoTest(VideoBaseTest): ...@@ -1055,6 +1060,7 @@ class Html5VideoTest(VideoBaseTest):
self.assertTrue(all([source in HTML5_SOURCES for source in self.video.sources])) self.assertTrue(all([source in HTML5_SOURCES for source in self.video.sources]))
@attr('shard_4')
class YouTubeQualityTest(VideoBaseTest): class YouTubeQualityTest(VideoBaseTest):
""" Test YouTube Video Quality Button """ """ Test YouTube Video Quality Button """
...@@ -1099,3 +1105,36 @@ class YouTubeQualityTest(VideoBaseTest): ...@@ -1099,3 +1105,36 @@ class YouTubeQualityTest(VideoBaseTest):
self.video.click_player_button('quality') self.video.click_player_button('quality')
self.assertTrue(self.video.is_quality_button_active) self.assertTrue(self.video.is_quality_button_active)
@attr('a11y')
class LMSVideoModuleA11yTest(VideoBaseTest):
"""
LMS Video Accessibility Test Class
"""
def setUp(self):
browser = os.environ.get('SELENIUM_BROWSER', 'firefox')
# the a11y tests run in CI under phantomjs which doesn't
# support html5 video or flash player, so the video tests
# don't work in it. We still want to be able to run these
# tests in CI, so override the browser setting if it is
# phantomjs.
if browser == 'phantomjs':
browser = 'firefox'
with patch.dict(os.environ, {'SELENIUM_BROWSER': browser}):
super(LMSVideoModuleA11yTest, self).setUp()
def test_video_player_a11y(self):
self.navigate_to_video()
# Limit the scope of the audit to the video player only.
self.video.a11y_audit.config.set_scope(include=["div.video"])
self.video.a11y_audit.config.set_rules({
"ignore": [
'link-href', # TODO: AC-223
],
})
self.video.a11y_audit.check_for_accessibility_errors()
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"uglify-js": "2.4.24" "uglify-js": "2.4.24"
}, },
"devDependencies": { "devDependencies": {
"jshint": "^2.7.0" "jshint": "^2.7.0",
"edx-custom-a11y-rules": "edx/edx-custom-a11y-rules"
} }
} }
...@@ -25,6 +25,7 @@ class TestPaverBokChoyCmd(unittest.TestCase): ...@@ -25,6 +25,7 @@ class TestPaverBokChoyCmd(unittest.TestCase):
"DEFAULT_STORE={default_store} " "DEFAULT_STORE={default_store} "
"SCREENSHOT_DIR='{repo_dir}/test_root/log{shard_str}' " "SCREENSHOT_DIR='{repo_dir}/test_root/log{shard_str}' "
"BOK_CHOY_HAR_DIR='{repo_dir}/test_root/log{shard_str}/hars' " "BOK_CHOY_HAR_DIR='{repo_dir}/test_root/log{shard_str}/hars' "
"BOKCHOY_A11Y_CUSTOM_RULES_FILE='{repo_dir}/{a11y_custom_file}' "
"SELENIUM_DRIVER_LOG_DIR='{repo_dir}/test_root/log{shard_str}' " "SELENIUM_DRIVER_LOG_DIR='{repo_dir}/test_root/log{shard_str}' "
"nosetests {repo_dir}/common/test/acceptance/{exp_text} " "nosetests {repo_dir}/common/test/acceptance/{exp_text} "
"--with-xunit " "--with-xunit "
...@@ -35,6 +36,7 @@ class TestPaverBokChoyCmd(unittest.TestCase): ...@@ -35,6 +36,7 @@ class TestPaverBokChoyCmd(unittest.TestCase):
repo_dir=REPO_DIR, repo_dir=REPO_DIR,
shard_str='/shard_' + self.shard if self.shard else '', shard_str='/shard_' + self.shard if self.shard else '',
exp_text=name, exp_text=name,
a11y_custom_file='node_modules/edx-custom-a11y-rules/lib/custom_a11y_rules.js',
) )
return expected_statement return expected_statement
......
...@@ -32,6 +32,10 @@ class Env(object): ...@@ -32,6 +32,10 @@ class Env(object):
BOK_CHOY_A11Y_REPORT_DIR = REPORT_DIR / "a11y" BOK_CHOY_A11Y_REPORT_DIR = REPORT_DIR / "a11y"
BOK_CHOY_COVERAGERC = BOK_CHOY_DIR / ".coveragerc" BOK_CHOY_COVERAGERC = BOK_CHOY_DIR / ".coveragerc"
BOK_CHOY_A11Y_COVERAGERC = BOK_CHOY_DIR / ".a11ycoveragerc" BOK_CHOY_A11Y_COVERAGERC = BOK_CHOY_DIR / ".a11ycoveragerc"
BOK_CHOY_A11Y_CUSTOM_RULES_FILE = (
REPO_ROOT / "node_modules" / "edx-custom-a11y-rules" /
"lib" / "custom_a11y_rules.js"
)
# If set, put reports for run in "unique" directories. # If set, put reports for run in "unique" directories.
# The main purpose of this is to ensure that the reports can be 'slurped' # The main purpose of this is to ensure that the reports can be 'slurped'
......
...@@ -55,6 +55,7 @@ class BokChoyTestSuite(TestSuite): ...@@ -55,6 +55,7 @@ class BokChoyTestSuite(TestSuite):
self.num_processes = kwargs.get('num_processes', DEFAULT_NUM_PROCESSES) self.num_processes = kwargs.get('num_processes', DEFAULT_NUM_PROCESSES)
self.extra_args = kwargs.get('extra_args', '') self.extra_args = kwargs.get('extra_args', '')
self.har_dir = self.log_dir / 'hars' self.har_dir = self.log_dir / 'hars'
self.a11y_file = Env.BOK_CHOY_A11Y_CUSTOM_RULES_FILE
self.imports_dir = kwargs.get('imports_dir', None) self.imports_dir = kwargs.get('imports_dir', None)
self.coveragerc = kwargs.get('coveragerc', None) self.coveragerc = kwargs.get('coveragerc', None)
...@@ -205,6 +206,7 @@ class BokChoyTestSuite(TestSuite): ...@@ -205,6 +206,7 @@ class BokChoyTestSuite(TestSuite):
"DEFAULT_STORE={}".format(self.default_store), "DEFAULT_STORE={}".format(self.default_store),
"SCREENSHOT_DIR='{}'".format(self.log_dir), "SCREENSHOT_DIR='{}'".format(self.log_dir),
"BOK_CHOY_HAR_DIR='{}'".format(self.har_dir), "BOK_CHOY_HAR_DIR='{}'".format(self.har_dir),
"BOKCHOY_A11Y_CUSTOM_RULES_FILE='{}'".format(self.a11y_file),
"SELENIUM_DRIVER_LOG_DIR='{}'".format(self.log_dir), "SELENIUM_DRIVER_LOG_DIR='{}'".format(self.log_dir),
"nosetests", "nosetests",
test_spec, test_spec,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment