import assert from "node:assert/strict"; import { readFileSync } from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; import ts from "typescript"; const testDir = path.dirname(fileURLToPath(import.meta.url)); const sourcePath = path.resolve( testDir, "../src/features/article-intake/model.ts", ); const source = readFileSync(sourcePath, "utf8"); const compiled = ts.transpileModule(source, { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2022, }, }); const moduleExports = {}; new Function("exports", compiled.outputText)(moduleExports); const validateArticleDraft = moduleExports.validateArticleDraft; const initialDraft = moduleExports.initialDraft; const buildCreateArticlePayload = moduleExports.buildCreateArticlePayload; const buildWorkflowTemplateOptions = moduleExports.buildWorkflowTemplateOptions; const activeWorkflow = { id: "workflow-1", name: "Demo workflow", slug: "demo-workflow", description: "Demo workflow", status: "ACTIVE", version: 2, created_by: "admin", updated_by: "admin", created_at: "2026-05-22T00:00:00Z", updated_at: "2026-05-22T00:00:00Z", stages: [ { id: "stage-1" }, { id: "stage-2" }, ], }; const draft = { targetSiteId: "", workflowTemplateId: "", briefDescription: "Keep this text intact", workingTitle: "", contentType: "longform_guide", primaryKeyword: "", }; const errors = validateArticleDraft(draft); assert.ok(errors.targetSiteId, "validation should require target site"); assert.equal( draft.briefDescription, "Keep this text intact", "brief description value should remain in form state when validation fails", ); const fallbackDraft = initialDraft([]); assert.equal(fallbackDraft.contentType, "longform_guide", "default content type preserved"); const workflowDraft = initialDraft( [{ id: "site-1" }], [activeWorkflow, { ...activeWorkflow, id: "workflow-archived", status: "ARCHIVED" }], ); assert.equal(workflowDraft.workflowTemplateId, "workflow-1"); assert.deepEqual(buildWorkflowTemplateOptions([activeWorkflow]), [ { id: "workflow-1", label: "Demo workflow v2", version: 2, stageCount: 2, }, ]); assert.equal( buildCreateArticlePayload({ ...workflowDraft, briefDescription: "Brief", primaryKeyword: "workflow", }).workflow_template_id, "workflow-1", );