import { parseJsx } from '../__tests__/utils'
import {
getKaioTagNamesMapByComponentName,
printAst,
transformSource,
type TransformSourceArgs,
} from '../utils'
import { transformWellVariantToColor } from './transformWellVariantToColor'
const transformWell = (sourceFile: TransformSourceArgs['sourceFile']): string => {
const kaioTagNamesMap = getKaioTagNamesMapByComponentName(sourceFile, ['Well'])
return transformSource({
sourceFile,
transformers: [transformWellVariantToColor(kaioTagNamesMap!)],
})
}
describe('transformWellVariantToColor()', () => {
it('replaces variant="default" with color="gray"', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toEqual(printAst(outputAst))
})
it('replaces variant="informative" with color="blue"', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it('adds color="gray" if variant is not specified', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it('handles multiple attributes and replace only variant', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it('handles multiple attributes and add color if variant is not specified', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it('handles nested Well components', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () =>
Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it('transforms multiple Wells', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => TestTest 2
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => TestTest 2
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it('transforms Well with arbitrary braces', () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => TestTestTest
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => TestTestTest
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it("won't add color if color already exists", () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it("won't modify variants usings variables", () => {
const inputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toBe(printAst(outputAst))
})
it('transforms aliased Well components', () => {
const inputAst = parseJsx(`
import {Well as KaizenWell} from "@kaizen/components"
export const TestComponent = () => Test
`)
const outputAst = parseJsx(`
import {Well as KaizenWell} from "@kaizen/components"
export const TestComponent = () => Test
`)
expect(transformWell(inputAst)).toEqual(printAst(outputAst))
})
})