diff --git a/scripts/verify-stale-scan.ts b/scripts/verify-stale-scan.ts new file mode 100644 index 0000000..2d1b027 --- /dev/null +++ b/scripts/verify-stale-scan.ts @@ -0,0 +1,47 @@ +import { mkdir, rm, writeFile } from 'fs/promises' +import { join } from 'path' +import { prisma } from '@/lib/prisma' +import { scanCoursesDirectory } from '@/lib/scanner' + +function assert(condition: unknown, message: string) { + if (!condition) throw new Error(message) +} + +async function main() { + const root = '/tmp/offlineacademy-stale-scan' + const coursesRoot = join(root, 'My_Courses') + const coursePath = join(coursesRoot, 'Stale Course', '01 - Module') + + await rm(root, { recursive: true, force: true }) + await mkdir(coursePath, { recursive: true }) + await writeFile(join(coursePath, '01 - Lesson.mp4'), '') + + await prisma.setting.upsert({ + where: { key: 'coursesRoot' }, + update: { value: coursesRoot }, + create: { key: 'coursesRoot', value: coursesRoot }, + }) + + await scanCoursesDirectory({ maxConcurrency: 1, maxLessonsPerCourse: 10, maxModulesPerCourse: 5 }) + + const before = await prisma.course.count() + assert(before === 1, `expected 1 course before delete, got ${before}`) + + await rm(join(coursesRoot, 'Stale Course'), { recursive: true, force: true }) + + await scanCoursesDirectory({ maxConcurrency: 1, maxLessonsPerCourse: 10, maxModulesPerCourse: 5 }) + + const after = await prisma.course.count() + assert(after === 0, `expected 0 courses after delete, got ${after}`) + + console.log('stale course deletion verification passed') +} + +main() + .catch((error) => { + console.error(error) + process.exitCode = 1 + }) + .finally(async () => { + await prisma.$disconnect() + })