import 'mocha' import { assert } from 'chai' import * as React from 'react' import { mount, ReactWrapper } from 'enzyme' import * as sinon from 'sinon' import keycode = require('keycode') import a11yTest from '../testutils/a11yTest' import ItemWrapper from './ItemWrapper' const noop = () => { // Nothing. } describe('', () => { it('should render without errors', () => { assert.doesNotThrow(() => { mount( hello ) }) }) it('should set `aria-controls` properly', () => { const m = mount( hello ) const el = m.find('#test_title') const node = el.getDOMNode() assert.equal(node.getAttribute('aria-controls'), 'test_content') }) it('should set `aria-labelledby` properly', () => { const m = mount( hello ) const el = m.find('#test_content') const node = el.getDOMNode() assert.equal(node.getAttribute('aria-labelledby'), 'test_title') }) it('should set `role=region` on the content', () => { const m = mount( hello ) const el = m.find('#test_content') const node = el.getDOMNode() assert.equal(node.getAttribute('role'), 'region') }) describe('given a custom className', () => { it('appends the class to the list', () => { const m = mount( hello ) const el = m.find('.potato-item.Hello') assert.equal(el.length, 1) }) }) describe('given open=true', () => { let m: ReactWrapper before(() => { m = mount( hello ) }) it('should set `aria-expanded=true` on the trigger', () => { const el = m.find('.potato-item-trigger') const node = el.getDOMNode() assert.equal(node.getAttribute('aria-expanded'), 'true') }) it('should set not set `hidden` on the content', () => { const el = m.find('.potato-item-content') const node = el.getDOMNode() assert.isFalse(node.hasAttribute('hidden')) }) }) describe('clicking the title', () => { it('should fire onToggle', () => { const onToggle = sinon.stub() const m = mount( hello ) const el = m.find('.potato-item-trigger') el.simulate('click') assert.isTrue(onToggle.called) assert.isTrue(onToggle.calledWith('itemid')) }) }) describe('keyboard events on the title', () => { const tests = [ ['down', 'forwards'], ['page down', 'forwards'], ['up', 'backwards'], ['page up', 'backwards'], ['home', 'start'], ['end', 'end'] ] tests.forEach(([key, direction]) => { describe(`pressing "${key}"`, () => { it(`should fire onFocusShift with direction="${direction}"`, () => { const onFocusShift = sinon.stub() const m = mount( hello ) const el = m.find('.potato-item-trigger') el.simulate('keydown', { which: keycode.codes[key] }) assert.isTrue(onFocusShift.called) assert.isTrue(onFocusShift.calledWith(direction, 'itemid')) }) }) }) }) a11yTest(() => ( hello )) })