diff --git a/tests/unit/announcements.test.ts b/tests/unit/announcements.test.ts index eb3a9d8..f94cd2d 100644 --- a/tests/unit/announcements.test.ts +++ b/tests/unit/announcements.test.ts @@ -1,4 +1,4 @@ -import { afterEach, describe, expect, it } from 'vitest'; +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import { Announcer, getPageAnnouncement } from '../../src/announcements.js'; describe('announcer', () => { @@ -62,3 +62,69 @@ describe('announcer', () => { }); }); }); + +describe('getPageAnnouncement', () => { + const announcements = { + visit: 'Loaded {title}', + url: 'page at {url}' + }; + + const multiLangAnnouncements = { + en: { + visit: 'Loaded {title}', + url: 'page at {url}' + }, + de: { + visit: '{title} geladen', + url: 'Seite unter {url}' + }, + '*': { + visit: '{title}', + url: '{url}' + } + }; + + const defaults = { headingSelector: 'h1', announcements }; + + describe('headings', () => { + it('gets heading title', () => { + document.body.innerHTML = '

Title

'; + const announcement = getPageAnnouncement(defaults); + expect(announcement).toBe('Loaded Title'); + }); + + it('prefers heading label', () => { + document.body.innerHTML = '

Title

'; + const announcement = getPageAnnouncement(defaults); + expect(announcement).toBe('Loaded Label'); + }); + + it('uses heading selector', () => { + document.body.innerHTML = '

Section

Title

'; + const announcement = getPageAnnouncement(defaults); + expect(announcement).toBe('Loaded Title'); + }); + + it('makes heading selector configurable', () => { + document.body.innerHTML = '

Title

Section

'; + const announcement = getPageAnnouncement({ ...defaults, headingSelector: 'h2' }); + expect(announcement).toBe('Loaded Section'); + }); + }); + + describe('fallbacks', () => { + it('uses document title if no heading is found', () => { + document.title = 'Document'; + document.body.innerHTML = ''; + const announcement = getPageAnnouncement(defaults); + expect(announcement).toBe('Loaded Document'); + }); + + it('uses url if no title is found', () => { + document.body.innerHTML = ''; + document.title = ''; + const announcement = getPageAnnouncement(defaults); + expect(announcement).toBe('Loaded page at /'); + }); + }); +});