36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import JSZip from 'jszip'
|
|
import { describe, expect, it } from 'vitest'
|
|
import { createEmptyTeachingDesign } from '../../shared/domain/teachingDesign'
|
|
import { createBookZip } from './zipExporter'
|
|
|
|
describe('createBookZip', () => {
|
|
it('keeps original lesson filenames and adds an order manifest', async () => {
|
|
const second = createEmptyTeachingDesign('2.md')
|
|
second.topic = '第二课'
|
|
const first = createEmptyTeachingDesign('1.md')
|
|
first.topic = '第一课'
|
|
|
|
const blob = await createBookZip([second, first])
|
|
const zip = await JSZip.loadAsync(blob)
|
|
|
|
expect(Object.keys(zip.files)).toEqual(
|
|
expect.arrayContaining(['2.md', '1.md', '课程顺序.txt']),
|
|
)
|
|
await expect(zip.file('课程顺序.txt')?.async('text')).resolves.toContain('1. 2.md')
|
|
})
|
|
|
|
it('disambiguates duplicate filenames', async () => {
|
|
const first = createEmptyTeachingDesign('1.md')
|
|
first.topic = '第一课甲'
|
|
const duplicate = createEmptyTeachingDesign('1.md')
|
|
duplicate.topic = '第一课乙'
|
|
|
|
const blob = await createBookZip([first, duplicate])
|
|
const zip = await JSZip.loadAsync(blob)
|
|
|
|
expect(Object.keys(zip.files)).toEqual(
|
|
expect.arrayContaining(['1.md', '1-2.md', '课程顺序.txt']),
|
|
)
|
|
})
|
|
})
|