90 lines
2.3 KiB
JavaScript
90 lines
2.3 KiB
JavaScript
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",
|
|
);
|