94 lines
2.5 KiB
TypeScript
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([]);
|
|
});
|
|
});
|