Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ exports[`burgerMenu, rendering tests Should render 1`] = `
class="c0"
>
<button
aria-controls=":r0:-menu"
aria-expanded="false"
aria-haspopup="menu"
aria-label="Kuvion valikko"
class="c1"
>
Expand Down
113 changes: 94 additions & 19 deletions src/react/components/burgerMenu/burgerMenu.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,14 @@ const mockTableToggle = {
}

describe('burgerMenu, functional tests', () => {
it('Should open the menu with correct menu elements', async () => {
it('Should open the menu with correct elements', async () => {
const view = convertPxGrafResponseToView(HORIZONTAL_BAR_CHART_ASCENDING, {});
render(<BurgerMenu locale="fi" viewData={view} tableToggle={mockTableToggle} accessibilityMode={false} toggleAccessibilityMode={jest.fn()} />);
act(() => {
screen.getByRole('button').click();
});
await waitFor(() => {
expect(screen.getAllByRole('button').length).toEqual(5);
expect(screen.getAllByRole('menuitem').length).toEqual(4);
expect(screen.getByText('Lataa taulukko (csv)')).toBeTruthy();
expect(screen.getByText('Lataa taulukko (xlsx)')).toBeTruthy();
expect(screen.getByText("N\u00E4yt\u00E4 taulukko")).toBeTruthy();
Expand All @@ -51,16 +51,14 @@ describe('burgerMenu, functional tests', () => {
screen.getByRole('button').click();
});
await waitFor(() => {
expect(screen.getAllByRole('button').length).toEqual(7);
expect(screen.getAllByRole('link').length).toEqual(2);
expect(screen.getAllByRole('menuitem').length).toEqual(8);
expect(screen.getByText('Lataa taulukko (csv)')).toBeTruthy();
expect(screen.getByText('Lataa taulukko (xlsx)')).toBeTruthy();
expect(screen.getByText('Foo')).toBeTruthy();
expect(screen.getByText('Bar')).toBeTruthy();
expect(screen.getByText('Baz')).toBeTruthy();
expect(screen.getByText('Ulkoinen linkki')).toBeTruthy();
expect(screen.getByText('Baz2')).toBeTruthy();
expect(screen.getAllByRole('link').length).toBe(2);
expect(screen.getByText("N\u00E4yt\u00E4 taulukko")).toBeTruthy();
expect(screen.getByText("N\u00E4yt\u00E4 kuviossa symbolit")).toBeTruthy();
});
Expand Down Expand Up @@ -102,12 +100,10 @@ describe('burgerMenu, functional tests', () => {
});
await waitFor(() => {
screen.getByText(btnText).click();
expect(mockFunction).toBeCalledTimes(1);
});
await waitFor(() => {
expect(screen.queryByText(btnText)).toBeNull();
expect(screen.queryByLabelText('Kuvion valikko')).not.toBeNull();
});
expect(mockFunction).toBeCalledTimes(1);
expect(screen.queryByText(btnText)).toBeNull();
expect(screen.queryByRole('menu')).toBeNull();
});

it('Should invoke the custom function and close the menu when link is clicked', async () => {
Expand All @@ -120,12 +116,10 @@ describe('burgerMenu, functional tests', () => {
});
await waitFor(() => {
screen.getByText(btnText).click();
expect(mockFunction).toBeCalledTimes(1);
});
await waitFor(() => {
expect(screen.queryByText(btnText)).toBeNull();
expect(screen.queryByLabelText('Kuvion valikko')).not.toBeNull();
});
expect(mockFunction).toBeCalledTimes(1);
expect(screen.queryByText(btnText)).toBeNull();
expect(screen.queryByRole('menu')).toBeNull();
});

it('Should close the menu when ESC is pressed', async () => {
Expand All @@ -134,12 +128,22 @@ describe('burgerMenu, functional tests', () => {
act(() => {
screen.getByRole('button').click();
});
await waitFor(() => {
window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }));
act(() => {
fireEvent.keyDown(screen.getByRole('button'), { key: 'Escape' });
});
await waitFor(() => {
expect(screen.queryByLabelText('Kuvion valikko')).not.toBeNull();
expect(screen.queryByRole('menu')).toBeNull();
});

it('Should close the menu when TAB is pressed', async () => {
const view = convertPxGrafResponseToView(HORIZONTAL_BAR_CHART_ASCENDING, {});
render(<BurgerMenu locale="fi" viewData={view} />);
act(() => {
screen.getByRole('button').click();
});
act(() => {
fireEvent.keyDown(screen.getByRole('button'), { key: 'Tab' });
});
expect(screen.queryByRole('menu')).toBeNull();
});

it('Should calculate correct export dimensions when aspect ratio is too low', () => {
Expand Down Expand Up @@ -261,4 +265,75 @@ describe('burgerMenu, functional tests', () => {
scale: 1
}, {});
});

it('should change focus and tabIndex when up and down arrows are pressed with the menu open', async () => {
const view = convertPxGrafResponseToView(HORIZONTAL_BAR_CHART_ASCENDING, {});
render(<BurgerMenu locale="fi" viewData={view} menuItemDefinitions={[{ text: 'Item1', onClick: jest.fn() }, { text: 'Item2', onClick: jest.fn() }]} />);
act(() => {
screen.getByRole('button').click();
});
await waitFor(() => {
expect(screen.getByText('Item1').closest('button')?.getAttribute('tabIndex')).toBe('0');
expect(screen.getByText('Item2').closest('button')?.getAttribute('tabIndex')).toBe('-1');
});
act(() => {
fireEvent.keyDown(screen.getByRole('button'), { key: 'ArrowDown' }); // window?
});
await waitFor(() => {
expect(screen.getByText('Item1').closest('button')?.getAttribute('tabIndex')).toBe('-1');
expect(screen.getByText('Item2').closest('button')?.getAttribute('tabIndex')).toBe('0');
});
act(() => {
fireEvent.keyDown(screen.getByRole('button'), { key: 'ArrowUp' }); // window?
});
await waitFor(() => {
expect(screen.getByText('Item1').closest('button')?.getAttribute('tabIndex')).toBe('0');
expect(screen.getByText('Item2').closest('button')?.getAttribute('tabIndex')).toBe('-1');
});
});

it('should cycle the focus of menu items back to start if down arrow is pressed on the last item', async () => {
const view = convertPxGrafResponseToView(HORIZONTAL_BAR_CHART_ASCENDING, {});
render(<BurgerMenu locale="fi" viewData={view}/>);
act(() => {
screen.getByRole('button').click();
});
await waitFor(() => {
expect(screen.getByText('Lataa taulukko (xlsx)').closest('button')?.getAttribute('tabIndex')).toBe('0');
expect(screen.getByText('Lataa taulukko (csv)').closest('button')?.getAttribute('tabIndex')).toBe('-1');
});
act(() => {
fireEvent.keyDown(screen.getByRole('button'), { key: 'ArrowDown' });
});
await waitFor(() => {
expect(screen.getByText('Lataa taulukko (xlsx)').closest('button')?.getAttribute('tabIndex')).toBe('-1');
expect(screen.getByText('Lataa taulukko (csv)').closest('button')?.getAttribute('tabIndex')).toBe('0');
});
act(() => {
fireEvent.keyDown(screen.getByRole('button'), { key: 'ArrowDown' });
});
await waitFor(() => {
expect(screen.getByText('Lataa taulukko (xlsx)').closest('button')?.getAttribute('tabIndex')).toBe('0');
expect(screen.getByText('Lataa taulukko (csv)').closest('button')?.getAttribute('tabIndex')).toBe('-1');
});
});

it('should cycle from first to last item if up arrow is pressed on the first item', async () => {
const view = convertPxGrafResponseToView(HORIZONTAL_BAR_CHART_ASCENDING, {});
render(<BurgerMenu locale="fi" viewData={view} />);
act(() => {
screen.getByRole('button').click();
});
await waitFor(() => {
expect(screen.getByText('Lataa taulukko (xlsx)').closest('button')?.getAttribute('tabIndex')).toBe('0');
expect(screen.getByText('Lataa taulukko (csv)').closest('button')?.getAttribute('tabIndex')).toBe('-1');
});
act(() => {
fireEvent.keyDown(screen.getByRole('button'), { key: 'ArrowUp' });
});
await waitFor(() => {
expect(screen.getByText('Lataa taulukko (xlsx)').closest('button')?.getAttribute('tabIndex')).toBe('-1');
expect(screen.getByText('Lataa taulukko (csv)').closest('button')?.getAttribute('tabIndex')).toBe('0');
});
});
});
Loading
Loading