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 = `
`;
initInstanceNotice();
const banner = document.querySelector('#instance-notice-banner')!;
expect(banner.style.display).not.toBe('none');
expect(localUserSettings.getString).not.toHaveBeenCalled();
});
});