This commit is contained in:
m.elgin
2026-06-30 14:42:26 +03:00
parent 8af22576cb
commit 79acf6c317
21 changed files with 792 additions and 189 deletions

View File

@@ -8,6 +8,7 @@ const pptxPath = path.join(base, 'prezentaciya-vampiricheskoe-tenevoe-pravitelst
const pdfPath = path.join(base, 'prezentaciya-vampiricheskoe-tenevoe-pravitelstvo.pdf');
const reportPath = path.join(base, 'doklad.md');
const handoutPath = path.join(base, 'razdatochnyj-material.md');
const generatorPath = path.join(base, 'generate_presentation.js');
function assert(cond, msg) {
if (!cond) throw new Error(msg);
@@ -22,10 +23,12 @@ async function main() {
const report = fs.readFileSync(reportPath, 'utf8');
const handout = fs.readFileSync(handoutPath, 'utf8');
const generator = fs.readFileSync(generatorPath, 'utf8');
assert(report.includes('Sanguis Noctis Virus'), 'В докладе отсутствует ключевой термин');
assert(report.includes('Экономика качественной крови'), 'В докладе нет раздела о качественной крови');
assert(report.includes('Почему искусственная кровь им не подходит'), 'В докладе нет раздела про искусственную кровь');
assert(handout.includes('Тайный рынок доноров'), 'В раздатке нет блока про тайный рынок доноров');
assert(generator.includes("12-food-chain-chart.png") && generator.includes("assets', 'generated'"), 'Генератор не использует пакет generated PNG');
const pptxBuf = fs.readFileSync(pptxPath);
const zip = await JSZip.loadAsync(pptxBuf);
@@ -35,10 +38,10 @@ async function main() {
assert(slideFiles.length === 15, `Ожидалось 15 слайдов, получено ${slideFiles.length}`);
const firstSlide = await zip.files[slideFiles[0]].async('string');
const middleSlide = await zip.files[slideFiles[7]].async('string');
const chainSlide = await zip.files[slideFiles[13]].async('string');
const lastSlide = await zip.files[slideFiles[slideFiles.length - 1]].async('string');
assert(firstSlide.includes('Пищевая цепочка:'), 'На первом слайде нет заголовка');
assert(middleSlide.includes('Экономика качественной крови'), 'Нет слайда про экономику качественной крови');
assert(chainSlide.includes('Пищевая цепочка: от тебя до теневого правительства'), 'На слайде пищевой цепочки нет подписанного изображения');
assert(lastSlide.includes('Вывод'), 'На последнем слайде нет слайда с выводом');
try {