Jobber/orchestrator/src/client/components/tailoring-utils.test.ts
Shaheer Sarfaraz 16dd17ebea
Fix Tailor CV adding new skills and restore original skills on revert (#190)
* Initial commit

* refactor slightly

* refactor and fix bugs
2026-02-18 23:23:33 +00:00

94 lines
2.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
getOriginalHeadline,
getOriginalSkills,
getOriginalSummary,
parseTailoredSkills,
} from "./tailoring-utils";
describe("parseTailoredSkills", () => {
it("parses object-based tailored skills payload", () => {
const parsed = parseTailoredSkills(
JSON.stringify([
{ name: "Backend", keywords: ["Node.js", " TypeScript "] },
]),
);
expect(parsed).toEqual([
{ name: "Backend", keywords: ["Node.js", "TypeScript"] },
]);
});
it("maps legacy string arrays into a default skills group", () => {
const parsed = parseTailoredSkills(
JSON.stringify(["React", " TypeScript ", "", "Vitest"]),
);
expect(parsed).toEqual([
{ name: "Skills", keywords: ["React", "TypeScript", "Vitest"] },
]);
});
it("keeps object groups and legacy string values in mixed arrays", () => {
const parsed = parseTailoredSkills(
JSON.stringify([
{ name: "Platform", keywords: ["APIs"] },
"Observability",
]),
);
expect(parsed).toEqual([
{ name: "Platform", keywords: ["APIs"] },
{ name: "Skills", keywords: ["Observability"] },
]);
});
it("returns an empty list for invalid or non-array JSON", () => {
expect(parseTailoredSkills("{")).toEqual([]);
expect(parseTailoredSkills(JSON.stringify({ name: "Backend" }))).toEqual(
[],
);
});
it("extracts original summary and headline from profile basics", () => {
const profile = {
basics: {
summary: " Base summary ",
label: " Base headline ",
},
};
expect(getOriginalSummary(profile)).toBe("Base summary");
expect(getOriginalHeadline(profile)).toBe("Base headline");
});
it("extracts original skills from profile skills items", () => {
const profile = {
sections: {
skills: {
items: [
{
id: "1",
name: "Backend",
description: "",
level: 0,
keywords: [" Node.js ", "TypeScript"],
visible: true,
},
],
},
},
};
expect(getOriginalSkills(profile)).toEqual([
{ name: "Backend", keywords: ["Node.js", "TypeScript"] },
]);
});
it("returns defaults when profile sections are missing", () => {
expect(getOriginalSummary(null)).toBe("");
expect(getOriginalHeadline(null)).toBe("");
expect(getOriginalSkills(null)).toEqual([]);
});
});