Automerge backed Markdown editor for the Atmosphere
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162// src/plugin/sidebar/__tests__/SortMenuButton.test.tsximport { describe, it, expect, vi, afterEach } from 'vitest'import { render, screen, fireEvent, cleanup } from '@testing-library/react'import { SortMenuButton } from '../SortMenuButton'import { SORT_MODES, getSortModeMetadata, type SortMode } from '../sort-mode'
afterEach(() => { cleanup() // Tear down any leftover menus rendered into document.body so the next // test doesn't see a `.menu` from the prior test. document.querySelectorAll('.menu').forEach((m) => m.remove())})
function setup(currentMode: SortMode = 'name-asc', onChange = vi.fn()) { render(<SortMenuButton currentMode={currentMode} onChange={onChange} />) return { onChange }}
describe('SortMenuButton', () => { it('renders a single sort button with an accessible name including the active mode label', () => { setup('created-desc') const btn = screen.getByRole('button') expect(btn.getAttribute('aria-label')).toContain(getSortModeMetadata('created-desc').label) expect(btn.hasAttribute('data-sort-button')).toBe(true) })
it('button title also reflects the active mode label', () => { setup('created-desc') const btn = screen.getByRole('button') expect(btn.getAttribute('title')).toContain(getSortModeMetadata('created-desc').label) })
it('opens a menu with six items in the documented order', () => { setup('name-asc') fireEvent.click(screen.getByRole('button')) const items = document.querySelectorAll('.menu .menu-item') expect(items.length).toBe(SORT_MODES.length) for (let i = 0; i < SORT_MODES.length; i++) { const expected = getSortModeMetadata(SORT_MODES[i]).label expect(items[i].textContent).toContain(expected) } })
it('marks the active mode with .is-checked', () => { setup('modified-desc') fireEvent.click(screen.getByRole('button')) const items = document.querySelectorAll('.menu .menu-item') const idx = SORT_MODES.indexOf('modified-desc') expect(items[idx].classList.contains('is-checked')).toBe(true) })
it('invokes onChange and closes the menu when an item is picked', () => { const { onChange } = setup('name-asc') fireEvent.click(screen.getByRole('button')) const items = document.querySelectorAll('.menu .menu-item') const idx = SORT_MODES.indexOf('modified-asc') fireEvent.click(items[idx]) expect(onChange).toHaveBeenCalledWith('modified-asc') expect(document.querySelector('.menu')).toBeNull() })})