Ocelot-Social/packages/ui/src/tailwind.preset.spec.ts

95 lines
2.9 KiB
TypeScript

import { describe, it, expect, vi, afterEach } from 'vitest'
import { ocelotPreset, requiredCssVariables, validateCssVariables } from './tailwind.preset'
describe('tailwind.preset', () => {
describe('ocelotPreset', () => {
it('exports a valid Tailwind preset with theme.extend structure', () => {
expect(ocelotPreset).toBeDefined()
expect(ocelotPreset).toHaveProperty('theme')
expect(ocelotPreset.theme).toHaveProperty('extend')
})
})
describe('requiredCssVariables', () => {
it('exports an array', () => {
expect(Array.isArray(requiredCssVariables)).toBeTruthy()
})
it('contains only strings', () => {
for (const variable of requiredCssVariables) {
expect(typeof variable).toBe('string')
}
})
it('all variables start with --', () => {
// This test validates the format constraint.
for (const variable of requiredCssVariables) {
expect(variable.startsWith('--')).toBeTruthy()
}
// Ensure test runs even with empty array
expect(requiredCssVariables.every((v) => v.startsWith('--'))).toBeTruthy()
})
})
describe('validateCssVariables', () => {
afterEach(() => {
vi.unstubAllGlobals()
vi.restoreAllMocks()
})
it('does nothing when window is undefined (SSR)', () => {
vi.stubGlobal('window', undefined)
expect(() => {
validateCssVariables()
}).not.toThrow()
})
it('does not warn when all variables are defined', () => {
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
const mockGetPropertyValue = vi.fn().mockReturnValue('some-value')
vi.stubGlobal('window', {})
vi.stubGlobal('document', {
documentElement: {},
})
vi.stubGlobal('getComputedStyle', () => ({
getPropertyValue: mockGetPropertyValue,
}))
validateCssVariables()
expect(consoleWarnSpy).not.toHaveBeenCalled()
})
it('warns when variables are missing', () => {
const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
const mockGetPropertyValue = vi.fn().mockReturnValue('')
vi.stubGlobal('window', {})
vi.stubGlobal('document', {
documentElement: {},
})
vi.stubGlobal('getComputedStyle', () => ({
getPropertyValue: mockGetPropertyValue,
}))
// Temporarily add a required variable for testing
const originalVariables = [...requiredCssVariables]
requiredCssVariables.push('--test-variable')
validateCssVariables()
expect(consoleWarnSpy).toHaveBeenCalledWith(
expect.stringContaining('Missing required CSS variables'),
)
expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining('--test-variable'))
// Restore original state
requiredCssVariables.length = 0
requiredCssVariables.push(...originalVariables)
})
})
})