ilia 2e44a131e1 fix(jobs): treat isRemote as 100% remote only; tighten cron for Canada QA
Reject hybrid or partial-office postings at ingest so the Remote badge and
filters match fully remote roles. Cron can PATCH search geography, remote-only
workplace types, and QA search terms before each scheduled pipeline run.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-16 15:53:55 -04:00

65 lines
2.1 KiB
TypeScript

import { normalizeIsRemote } from "@shared/work-arrangement.js";
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();
});
});
describe("normalizeIsRemote (JobSpy ingest)", () => {
it("rejects hybrid postings that JobSpy marks remote", () => {
expect(
normalizeIsRemote({
title: "Automation Test Engineer (SDET)",
jobDescription: "Job Type: Hybrid (3 days remote)",
isRemote: true,
}),
).toBe(false);
});
});