import { fireEvent, render, screen } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; import { AdminSaveBar } from '../save-bar'; import { AdminShellContext } from '../shell-context'; describe('AdminSaveBar', () => { it('shows nothing while there is nothing to save', () => { render( {}} />); expect(screen.queryByTestId('admin-save-bar')).toBeNull(); }); it('offers Save and Discard once something changed', () => { const onSave = vi.fn(); const onDiscard = vi.fn(); render(); expect(screen.getByText('Unsaved changes')).toBeTruthy(); expect(screen.getByText(/Users see it on login/)).toBeTruthy(); fireEvent.click(screen.getByRole('button', { name: 'Save policy' })); expect(onSave).toHaveBeenCalledTimes(1); fireEvent.click(screen.getByRole('button', { name: 'Discard' })); expect(onDiscard).toHaveBeenCalledTimes(1); }); it('saves on Ctrl+S, but not while a save is running', () => { const onSave = vi.fn(); const { rerender } = render(); fireEvent.keyDown(window, { key: 's', ctrlKey: true }); expect(onSave).toHaveBeenCalledTimes(1); rerender(); fireEvent.keyDown(window, { key: 's', ctrlKey: true }); expect(onSave).toHaveBeenCalledTimes(1); }); it('ignores Ctrl+S when nothing is dirty', () => { const onSave = vi.fn(); render(); fireEvent.keyDown(window, { key: 's', ctrlKey: true }); expect(onSave).not.toHaveBeenCalled(); }); it('renders into the shell host when there is one', () => { const host = document.createElement('div'); document.body.appendChild(host); render( {} }}>
{}} />
, ); expect(host.querySelector('[data-testid="admin-save-bar"]')).not.toBeNull(); expect(screen.getByTestId('page').querySelector('[data-testid="admin-save-bar"]')).toBeNull(); host.remove(); }); });