52 lines
1.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { deriveIsRemoteFlag, parseJobSpyProgressLine } from "../src/run";
describe("parseJobSpyProgressLine", () => {
it("parses term_start progress lines", () => {
const event = parseJobSpyProgressLine(
'JOBOPS_PROGRESS {"event":"term_start","termIndex":1,"termTotal":3,"searchTerm":"engineer"}',
);
expect(event).toEqual({
type: "term_start",
termIndex: 1,
termTotal: 3,
searchTerm: "engineer",
});
});
it("parses term_complete progress lines", () => {
const event = parseJobSpyProgressLine(
'JOBOPS_PROGRESS {"event":"term_complete","termIndex":2,"termTotal":3,"searchTerm":"frontend","jobsFoundTerm":17}',
);
expect(event).toEqual({
type: "term_complete",
termIndex: 2,
termTotal: 3,
searchTerm: "frontend",
jobsFoundTerm: 17,
});
});
it("returns null for malformed payloads", () => {
expect(parseJobSpyProgressLine("JOBOPS_PROGRESS {bad json")).toBeNull();
expect(parseJobSpyProgressLine("JOBOPS_PROGRESS {}")).toBeNull();
});
it("returns null for non-progress lines", () => {
expect(parseJobSpyProgressLine("Found 20 jobs")).toBeNull();
});
it("maps remote-only workplace types to isRemote", () => {
expect(deriveIsRemoteFlag(["remote"])).toBe(true);
});
it("does not force JobSpy remote filtering for hybrid or onsite selections", () => {
expect(deriveIsRemoteFlag(["hybrid"])).toBeUndefined();
expect(deriveIsRemoteFlag(["onsite"])).toBeUndefined();
expect(deriveIsRemoteFlag(["remote", "hybrid"])).toBeUndefined();
expect(deriveIsRemoteFlag(["remote", "hybrid", "onsite"])).toBeUndefined();
});
});