aiPptOutlineTest.mjs 2.2 KB

12345678910111213141516171819202122232425262728293031
  1. import { createServer } from 'vite'
  2. import assert from 'node:assert/strict'
  3. const vite = await createServer({ server: { middlewareMode: true }, appType: 'custom', logLevel: 'error' })
  4. try {
  5. const { editableOutlinePages, confirmedCoursewareOutline, inspectConfirmedOutline } = await vite.ssrLoadModule('/src/utils/aiCoursewareOutline.ts')
  6. const outline = { title: '课堂', textbookResearch: { teachingObjectives: ['旧目标'] }, pages: Array.from({ length: 8 }, (_, i) => ({ pageNo: i + 1, type: i ? 'practice_check' : 'cover', title: `页面${i}`, durationMinutes: 5, bullets: ['旧内容'], imageKeywords: [], objectiveIds: ['1'] })) }
  7. const pages = editableOutlinePages(outline)
  8. pages[1].page.title = '老师修改的标题'
  9. pages[1].pointsText = ' 听辨强弱\n\n用拍手表现 '
  10. pages.splice(2, 0, pages.splice(1, 1)[0])
  11. const confirmed = confirmedCoursewareOutline(outline, ' 能分辨声音强弱\n能用拍手表现 ', pages)
  12. assert.deepEqual(inspectConfirmedOutline(confirmed, 40), [])
  13. assert.deepEqual(confirmed.textbookResearch.teachingObjectives, ['能分辨声音强弱', '能用拍手表现'])
  14. assert.equal(confirmed.pages[2].title, '老师修改的标题')
  15. assert.deepEqual(confirmed.pages.map(p => p.pageNo), [1,2,3,4,5,6,7,8])
  16. assert.deepEqual(confirmed.pages[2].studentContent.points, ['听辨强弱','用拍手表现'])
  17. assert.deepEqual(confirmed.pages[2].objectiveIds, [])
  18. assert.equal(outline.pages[1].title, '页面1')
  19. const invalid = structuredClone(confirmed)
  20. invalid.pages[1].title = ''
  21. invalid.pages[2].durationMinutes = 0
  22. invalid.textbookResearch.teachingObjectives = []
  23. assert.ok(inspectConfirmedOutline(invalid, 40).some(s => s.includes('教学目标')))
  24. assert.ok(inspectConfirmedOutline(invalid, 40).some(s => s.includes('第2页标题')))
  25. assert.ok(inspectConfirmedOutline(invalid, 40).some(s => s.includes('第3页用时')))
  26. const optional = structuredClone(confirmed)
  27. optional.pages.push({ ...optional.pages[1], pageNo: 9, durationMinutes: 4, optional: true })
  28. assert.deepEqual(inspectConfirmedOutline(optional, 40), [])
  29. console.log('PASS: edited goals, 8-page outline, reordered pages, preserved content, invalid inputs, optional timing and source isolation')
  30. } finally { await vite.close() }