dropdown_spec.js 3.42 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
define(['js/dashboard/dropdown', 'jquery.simulate'],
    function() {
        'use strict';
        var keys = $.simulate.keyCode,
            toggleButtonSelector = '#actions-dropdown-link-2',
            dropdownSelector = '#actions-dropdown-2',
            dropdownItemSelector = '#actions-dropdown-2 li a',
            clickToggleButton = function() {
                $(toggleButtonSelector).click();
            },
            verifyDropdownVisible = function() {
                expect($(dropdownSelector)).toBeVisible();
            },
            verifyDropdownNotVisible = function() {
                expect($(dropdownSelector)).not.toBeVisible();
            },
17
            waitForElementToBeFocused = function(element, done) {
18
                jasmine.waitUntil(function() {
19 20
                    return element === document.activeElement;
                }).always(done);
21 22 23 24 25 26 27
            },
            openDropDownMenu = function() {
                verifyDropdownNotVisible();
                clickToggleButton();
                verifyDropdownVisible();
            },
            keydown = function(keyInfo) {
28
                $(document.activeElement).simulate('keydown', keyInfo);
29 30
            };

31
        describe('edx.dashboard.dropdown.toggleCourseActionsDropdownMenu', function() {
32 33 34 35 36
            beforeEach(function() {
                loadFixtures('js/fixtures/dashboard/dashboard.html');
                window.edx.dashboard.dropdown.bindToggleButtons();
            });

37
            it('Clicking the .action-more button toggles the menu', function() {
38 39 40 41 42 43
                verifyDropdownNotVisible();
                clickToggleButton();
                verifyDropdownVisible();
                clickToggleButton();
                verifyDropdownNotVisible();
            });
44
            it('ESCAPE will close dropdown and return focus to the button', function(done) {
45
                openDropDownMenu();
46
                keydown({keyCode: keys.ESCAPE});
47
                verifyDropdownNotVisible();
48
                waitForElementToBeFocused($(toggleButtonSelector)[0], done);
49
            });
50
            it('SPACE will close dropdown and return focus to the button', function(done) {
51
                openDropDownMenu();
52
                keydown({keyCode: keys.SPACE});
53
                verifyDropdownNotVisible();
54
                waitForElementToBeFocused($(toggleButtonSelector)[0], done);
55 56
            });

57 58
            describe('Focus is trapped when navigating with', function() {
                it('TAB key', function(done) {
59
                    openDropDownMenu();
60
                    keydown({keyCode: keys.TAB});
61
                    waitForElementToBeFocused($(dropdownItemSelector)[0], done);
62
                });
63
                it('DOWN key', function(done) {
64
                    openDropDownMenu();
65
                    keydown({keyCode: keys.DOWN});
66
                    waitForElementToBeFocused($(dropdownItemSelector)[0], done);
67
                });
68
                it('TAB key + SHIFT key', function(done) {
69
                    openDropDownMenu();
70
                    keydown({keyCode: keys.TAB, shiftKey: true});
71
                    waitForElementToBeFocused($(dropdownItemSelector)[1], done);
72
                });
73
                it('UP key', function(done) {
74
                    openDropDownMenu();
75
                    keydown({keyCode: keys.UP});
76
                    waitForElementToBeFocused($(dropdownItemSelector)[1], done);
77 78 79 80 81
                });
            });
        });
    }
);