import { describe, test, expect } from 'vitest'
import { sanitizeDataItem, sanitizeDataItems } from './serializer'
import type { DataItem } from './types'
describe('sanitizeDataItem', () => {
test('preserves string prefix and suffix', () => {
const item: DataItem = {
value: 100,
prefix: '$',
suffix: 'USD',
color: 'blue',
}
const result = sanitizeDataItem(item)
expect(result).toEqual({
value: 100,
prefix: '$',
suffix: 'USD',
color: 'blue',
})
})
test('converts ReactNode prefix to undefined', () => {
const item: DataItem = {
value: 100,
prefix: $,
suffix: 'USD',
}
const result = sanitizeDataItem(item)
expect(result).toEqual({
value: 100,
prefix: undefined,
suffix: 'USD',
})
})
test('converts ReactNode suffix to undefined', () => {
const item: DataItem = {
value: 100,
prefix: '$',
suffix: USD,
}
const result = sanitizeDataItem(item)
expect(result).toEqual({
value: 100,
prefix: '$',
suffix: undefined,
})
})
test('converts both ReactNode prefix and suffix to undefined', () => {
const item: DataItem = {
value: 100,
prefix: $,
suffix: USD,
color: 'red',
}
const result = sanitizeDataItem(item)
expect(result).toEqual({
value: 100,
prefix: undefined,
suffix: undefined,
color: 'red',
})
})
test('handles missing prefix and suffix', () => {
const item: DataItem = {
value: 100,
}
const result = sanitizeDataItem(item)
expect(result).toEqual({
value: 100,
prefix: undefined,
suffix: undefined,
})
})
test('preserves other properties', () => {
const item: DataItem = {
value: 42,
color: '#FF5733',
}
const result = sanitizeDataItem(item)
expect(result).toEqual({
value: 42,
prefix: undefined,
suffix: undefined,
color: '#FF5733',
})
})
})
describe('sanitizeDataItems', () => {
test('sanitizes array of items', () => {
const items: DataItem[] = [
{ value: 100, prefix: '$', suffix: 'USD' },
{ value: 200, prefix: €, suffix: 'EUR' },
{ value: 300, prefix: '¥', suffix: JPY },
]
const result = sanitizeDataItems(items)
expect(result).toEqual([
{ value: 100, prefix: '$', suffix: 'USD' },
{ value: 200, prefix: undefined, suffix: 'EUR' },
{ value: 300, prefix: '¥', suffix: undefined },
])
})
test('handles undefined input', () => {
const result = sanitizeDataItems(undefined)
expect(result).toBeUndefined()
})
test('handles empty array', () => {
const result = sanitizeDataItems([])
expect(result).toEqual([])
})
test('does not mutate original array', () => {
const items: DataItem[] = [
{ value: 100, prefix: $, suffix: 'USD' },
]
const original = [...items]
sanitizeDataItems(items)
expect(items).toEqual(original)
})
})