import { describe, it, expect } from 'vitest' import { createTheme } from '@mui/material' import { resolveThemeColor } from './resolve-theme-color' describe('resolveThemeColor', () => { const theme = createTheme({ palette: { primary: { main: '#1976d2', dark: '#0d47a1' }, secondary: { main: '#9c27b0' }, }, }) it('returns undefined when the input is undefined', () => { expect(resolveThemeColor(theme, undefined)).toBeUndefined() }) it('passes raw CSS colors through unchanged', () => { expect(resolveThemeColor(theme, '#ff0000')).toBe('#ff0000') expect(resolveThemeColor(theme, 'rgb(255, 0, 0)')).toBe('rgb(255, 0, 0)') expect(resolveThemeColor(theme, 'red')).toBe('red') }) it('resolves dotted MUI theme palette paths', () => { expect(resolveThemeColor(theme, 'primary.main')).toBe('#1976d2') expect(resolveThemeColor(theme, 'primary.dark')).toBe('#0d47a1') expect(resolveThemeColor(theme, 'secondary.main')).toBe('#9c27b0') }) it('returns the raw input when the theme path does not resolve', () => { // Non-existent palette path → caller's responsibility to recover; we // pass the string through so ECharts can at least attempt to parse it. expect(resolveThemeColor(theme, 'primary.does-not-exist')).toBe( 'primary.does-not-exist', ) expect(resolveThemeColor(theme, 'nope.anywhere')).toBe('nope.anywhere') }) it('handles a path that traverses but yields a non-string', () => { // `primary` itself is an object, not a string — we return the raw // input rather than `[object Object]`. expect(resolveThemeColor(theme, 'primary')).toBe('primary') }) })