import { css, CssIfStringImpl, CssStringImpl, setup, extractCss, } from '.'; import { vi, describe, it, expect, } from 'vitest'; import { setup as setupGoober, extractCss as extractCssGoober } from 'goober'; vi.mock('goober', () => { return { css: () => 'gooberClass', setup: vi.fn(), extractCss: vi.fn(), }; }); describe('@tesseract-design/goofy-goober', () => { describe('css', () => { it('should return CssString', () => { const c = css` background-color: white; color: black; ` expect(c).toBeInstanceOf(CssStringImpl); expect(c.toString()).toBe('background-color:white;color:black;'); }) }) describe('css.if', () => { it('should return CssString when the condition is true', () => { const c = css.if(true)( css` background-color: white; ` ) expect(c).toBeInstanceOf(CssIfStringImpl) expect(c.toString()).toBe('background-color:white;') }) it('should return empty string when the condition is false', () => { const c = css.if(false)( css` background-color: white; ` ) expect(c.toString()).toBe('') }) it('should return CssString with .else when the if condition is false', () => { const c = css.if(false)( css` background-color: white; ` ).else( css` background-color: black; ` ) expect(c.toString()).toBe('background-color:black;') }) it('should return CssString with .else when the if condition is true', () => { const c = css.if(true)( css` background-color: white; ` ).else( css` background-color: black; ` ) expect(c.toString()).toBe('background-color:white;') }) }) describe('css.nest', () => { it('should add selector', () => { const c = css.nest('> div')( css` background-color: white; ` ) expect(c.toString()).toBe('> div{background-color:white;}') }) }) describe('css.dynamic', () => { it('should evaluate dynamic object', () => { const randomNumber = Math.floor(Math.random() * 1000); const c = css.dynamic({ 'line-height': randomNumber, }) expect(c.toString()).toBe(`line-height:${randomNumber};`) }) }) describe('css.media', () => { it('should accept raw queries', () => { const c = css.media('only screen and (min-width: 720px)')( css` color: black; background-color: white; ` ) expect(c.toString()).toBe('@media only screen and (min-width: 720px){color:black;background-color:white;}') }) }) describe('css.cx', () => { it('should accept strings as classnames', () => { expect(css.cx('class1', 'class2')).toBe('class1 class2'); }) it('should accept CSS strings for classname generation', () => { expect( css.cx( css` color: white; ` ) ).toBe('gooberClass'); }) it('should accept mixed values', () => { expect( css.cx( 'class1', 'class2', css` color: white; ` ) ).toBe('class1 class2 gooberClass'); }) }) describe('setup', () => { it('should call setup from goober', () => { const pragma = vi.fn(); const prefixer = vi.fn(); setup(pragma, prefixer); expect(setupGoober).toHaveBeenCalledWith(pragma, prefixer); }) }); describe('extractCss', () => { it('should call extractCss from goober', () => { extractCss(); expect(extractCssGoober).toHaveBeenCalled(); }) }); });