eletrotupi / tcc/ api/tests/exports/format.unit.test.tsaaca724b6020e9a1b82acb9cc3bb90f81951dc21
1.2 KB | 33 lines Raw
1
import { describe, it, expect } from 'vitest'
2
import { serializeCsv } from '@app/services/export/csv.serializer'
3
import { buildManifest } from '@app/services/export/manifest.builder'
4
import { profileTable } from '@app/services/export/table.descriptors'
5

6
describe('serializeCsv', () => {
7
  it('keeps the header row and a BOM when the table has no rows', () => {
8
    const file = serializeCsv(profileTable, [])
9
    const text = file.content.toString('utf8')
10

11
    expect(text.startsWith('\ufeff')).toBe(true)
12
    expect(file.rows).toBe(0)
13

14
    const lines = text.slice(1).split('\r\n').filter(Boolean)
15
    expect(lines).toHaveLength(1)
16
    expect(lines[0]).toContain('Email')
17
  })
18
})
19

20
describe('buildManifest', () => {
21
  it('states the generation time and lists each file with its row count', () => {
22
    const manifest = buildManifest(
23
      [{ filename: 'profile.csv', content: Buffer.from(''), rows: 0 }],
24
      new Date('2026-10-04T12:00:00.000Z'),
25
    )
26
    const text = manifest.content.toString('utf8')
27

28
    expect(manifest.filename).toBe('leia-me.md')
29
    expect(text).toContain('2026-10-04T12:00:00.000Z')
30
    expect(text).toContain('`profile.csv` — 0 registros')
31
    expect(text).toContain('_id')
32
  })
33
})