Files
summercms/admin/tests/app/icons.test.ts
2026-10-06 23:58:44 +02:00

80 lines
2.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
Archive,
Book,
Bookmark,
Calendar,
CircleQuestionMark,
Clock,
Copy,
Disc3,
FileText,
Flag,
GraduationCap,
House,
Leaf,
LifeBuoy,
List,
Mail,
Network,
Pencil,
Settings,
Sun,
Tags,
WandSparkles,
} from '@lucide/vue'
import { fallbackIcon, iconFor, icons, winterIcons } from '../../src/app/icons'
describe('iconFor', () => {
it('resolves lucide names', () => {
expect(iconFor('disc-3')).toBe(Disc3)
expect(iconFor('tags')).toBe(Tags)
expect(iconFor(' tags ')).toBe(Tags)
expect(iconFor('book')).toBe(Book)
expect(iconFor(' graduation-cap ')).toBe(GraduationCap)
})
it('resolves Winter icon aliases', () => {
expect(iconFor('icon-archive')).toBe(Archive)
expect(iconFor('icon-cog')).toBe(Settings)
expect(iconFor('icon-graduation-cap')).toBe(GraduationCap)
expect(iconFor('icon-book')).toBe(Book)
expect(iconFor('icon-bookmark')).toBe(Bookmark)
expect(iconFor('icon-calendar')).toBe(Calendar)
expect(iconFor('icon-clock-o')).toBe(Clock)
expect(iconFor('icon-flag')).toBe(Flag)
expect(iconFor('icon-file-text-o')).toBe(FileText)
expect(iconFor('icon-tags')).toBe(Tags)
expect(iconFor('icon-pencil')).toBe(Pencil)
expect(iconFor('icon-question-circle')).toBe(CircleQuestionMark)
expect(iconFor('icon-list')).toBe(List)
expect(iconFor('icon-home')).toBe(House)
expect(iconFor('icon-magic')).toBe(WandSparkles)
expect(iconFor('icon-life-ring')).toBe(LifeBuoy)
expect(iconFor('icon-sitemap')).toBe(Network)
expect(iconFor('icon-envelope-o')).toBe(Mail)
expect(iconFor('icon-copy')).toBe(Copy)
expect(iconFor('icon-leaf')).toBe(Leaf)
expect(iconFor('icon-cogs')).toBe(Settings)
expect(iconFor('icon-edit')).toBe(Pencil)
})
it('falls back to the sun for unknown, empty or missing names', () => {
expect(fallbackIcon).toBe(Sun)
expect(iconFor('unknown-icon-name')).toBe(Sun)
expect(iconFor('icon-unknown')).toBe(Sun)
expect(iconFor('')).toBe(Sun)
expect(iconFor(null)).toBe(Sun)
expect(iconFor(undefined)).toBe(Sun)
expect(iconFor('constructor')).toBe(Sun)
expect(iconFor('toString')).toBe(Sun)
expect(iconFor('__proto__')).toBe(Sun)
})
it('maps every Winter alias onto a registered lucide icon', () => {
for (const [alias, name] of Object.entries(winterIcons)) {
expect(icons[name], alias).toBeDefined()
}
})
})