eCourt-Doc-Edit/web/test/snapshot.spec.ts
Suphonchai Phoonsawat 0148f48204 Phase 7-8
2026-08-20 13:51:42 +07:00

77 lines
3.5 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { normalizeSnapshot } from '../app/utils/snapshot'
describe('normalizeSnapshot — แปลง snapshot 2 รูปแบบของ backend ให้เป็น list สำหรับ UI (FR-12)', () => {
it('รูปแบบเอกสารผูก template: { key: { value, missing } }', () => {
const result = normalizeSnapshot({
employee_name: { value: 'สมหญิง รักงาน', missing: false },
position: { value: 'วิศวกรเดิม', missing: true },
})
expect(result).toEqual([
{ key: 'employee_name', value: 'สมหญิง รักงาน', missing: false },
{ key: 'position', value: 'วิศวกรเดิม', missing: true },
])
})
it('รูปแบบเอกสารไม่ผูก template: map ดิบ { key: value } → missing=false ทั้งหมด', () => {
const result = normalizeSnapshot({ any_tag: 'ค่าอะไรก็ได้' })
expect(result).toEqual([{ key: 'any_tag', value: 'ค่าอะไรก็ได้', missing: false }])
})
it('value ไม่ใช่ string → แปลงเป็น string; null/undefined → ""', () => {
const result = normalizeSnapshot({
number_value: 123,
bool_value: true,
null_value: null,
undefined_value: undefined,
object_value: { value: null, missing: false },
})
expect(result).toEqual([
{ key: 'number_value', value: '123', missing: false },
{ key: 'bool_value', value: 'true', missing: false },
{ key: 'null_value', value: '', missing: false },
{ key: 'undefined_value', value: '', missing: false },
{ key: 'object_value', value: '', missing: false },
])
})
it('fields เป็น null/undefined/ค่าไม่ใช่ object → list ว่าง (version ไม่มี snapshot)', () => {
expect(normalizeSnapshot(null)).toEqual([])
expect(normalizeSnapshot(undefined)).toEqual([])
expect(normalizeSnapshot('string')).toEqual([])
expect(normalizeSnapshot(42)).toEqual([])
})
it('orderKeys กำหนดลำดับตาม field defs — key นอก defs ต่อท้ายตามตัวอักษร', () => {
const result = normalizeSnapshot(
{ orphan: '1', salary: '2', employee_name: '3', zzz: '4', position: '5' },
['employee_name', 'position', 'salary'],
)
expect(result.map((e) => e.key)).toEqual([
'employee_name',
'position',
'salary',
'orphan',
'zzz', // orphan สองตัวเรียงตาม localeCompare
])
})
it('orderKeys ว่าง/ไม่ส่ง → คงลำดับเดิมของ object', () => {
const fields = { b: 'x', a: 'y' }
expect(normalizeSnapshot(fields, []).map((e) => e.key)).toEqual(['b', 'a'])
expect(normalizeSnapshot(fields).map((e) => e.key)).toEqual(['b', 'a'])
})
it('key ซ้ำใน object (ผ่าน JSON เข้ามา) — ตัวหลังชนะตามพฤติกรรม Object.entries', () => {
// JSON.parse ทำให้ key ซ้ำเหลือตัวเดียวอยู่แล้ว — assert กัน regression เรื่อง Map dedupe
const parsed = JSON.parse('{"k":"first","k":"second"}')
const result = normalizeSnapshot(parsed)
expect(result).toEqual([{ key: 'k', value: 'second', missing: false }])
})
})