import type { Config, PlatformConfig, TransformedToken, } from 'style-dictionary/types' import { describe, expect, it, vi } from 'vitest' import { prefixTransform } from './prefix-transform.js' describe('prefixTransform', () => { const createMockToken = (): TransformedToken => ({ name: 'test-token', value: '#000000', type: 'color', path: ['color', 'primary'], original: {}, filePath: '', isSource: false, }) as TransformedToken const createMockConfig = (prefix?: string): PlatformConfig => ({ platforms: {}, source: [], include: [], prefix, }) as unknown as PlatformConfig const createMockOptions = (): Config => ({ platforms: {}, source: [], include: [], }) as Config describe('without prefix', () => { it('should return the original transformer value when no prefix is set', () => { const transformer = vi.fn(() => 'color-primary') const wrapped = prefixTransform(transformer) const result = wrapped( createMockToken(), createMockConfig(), createMockOptions(), ) expect(result).toBe('color-primary') }) it('should return the original transformer value when prefix is empty string', () => { const transformer = vi.fn(() => 'color-primary') const wrapped = prefixTransform(transformer) const result = wrapped( createMockToken(), createMockConfig(''), createMockOptions(), ) expect(result).toBe('color-primary') }) }) describe('with prefix', () => { it('should prepend the prefix to the transformer value', () => { const transformer = vi.fn(() => 'color-primary') const wrapped = prefixTransform(transformer) const result = wrapped( createMockToken(), createMockConfig('uy'), createMockOptions(), ) expect(result).toBe('uy-color-primary') }) it('should work with different prefix values', () => { const transformer = vi.fn(() => 'spacing-md') const wrapped = prefixTransform(transformer) const result = wrapped( createMockToken(), createMockConfig('my-prefix'), createMockOptions(), ) expect(result).toBe('my-prefix-spacing-md') }) }) describe('async transformer', () => { it('should handle a transformer that returns a Promise', async () => { const transformer = vi.fn(() => Promise.resolve('color-primary')) const wrapped = prefixTransform(transformer) const result = wrapped( createMockToken(), createMockConfig('uy'), createMockOptions(), ) expect(result).toBeInstanceOf(Promise) await expect(result).resolves.toBe('uy-color-primary') }) it('should handle a Promise result without prefix', async () => { const transformer = vi.fn(() => Promise.resolve('color-primary')) const wrapped = prefixTransform(transformer) const result = wrapped( createMockToken(), createMockConfig(), createMockOptions(), ) await expect(result).resolves.toBe('color-primary') }) }) describe('argument passthrough', () => { it('should forward all arguments to the wrapped transformer', () => { const transformer = vi.fn(() => 'result') const wrapped = prefixTransform(transformer) const token = createMockToken() const config = createMockConfig('uy') const options = createMockOptions() void wrapped(token, config, options) expect(transformer).toHaveBeenCalledWith(token, config, options) }) }) })