import {beforeEach, describe, expect, test, vi} from 'vitest'; import {initInstanceNotice} from './instance-notice.ts'; import {localUserSettings} from '../modules/user-settings.ts'; vi.mock('../modules/user-settings.ts', () => ({ localUserSettings: { getString: vi.fn(), setString: vi.fn(), }, })); function createBannerDOM(dismissKey: string) { document.body.innerHTML = `
Maintenance in progress
`; } describe('Instance Notice Banner Dismiss', () => { beforeEach(() => { vi.clearAllMocks(); document.body.innerHTML = ''; }); test('no banner in DOM does nothing', () => { initInstanceNotice(); expect(localUserSettings.getString).not.toHaveBeenCalled(); }); test('hides banner when dismiss key matches stored value', () => { createBannerDOM('abc123'); vi.mocked(localUserSettings.getString).mockReturnValue('abc123'); initInstanceNotice(); const banner = document.querySelector('#instance-notice-banner')!; expect(banner.style.display).toBe('none'); expect(localUserSettings.setString).not.toHaveBeenCalled(); }); test('does not hide banner when stored key differs', () => { createBannerDOM('abc123'); vi.mocked(localUserSettings.getString).mockReturnValue('old-key'); initInstanceNotice(); const banner = document.querySelector('#instance-notice-banner')!; expect(banner.style.display).not.toBe('none'); }); test('clicking dismiss button stores key and hides banner', () => { createBannerDOM('abc123'); vi.mocked(localUserSettings.getString).mockReturnValue(''); initInstanceNotice(); const banner = document.querySelector('#instance-notice-banner')!; expect(banner.style.display).not.toBe('none'); const dismissBtn = banner.querySelector('.instance-notice-dismiss')!; dismissBtn.click(); expect(localUserSettings.setString).toHaveBeenCalledWith('instance_notice_dismissed', 'abc123'); expect(banner.style.display).toBe('none'); }); test('banner without data-dismiss-key does nothing', () => { document.body.innerHTML = `
Some message
`; initInstanceNotice(); const banner = document.querySelector('#instance-notice-banner')!; expect(banner.style.display).not.toBe('none'); expect(localUserSettings.getString).not.toHaveBeenCalled(); }); });