| import { describe, expect, it } from "vitest"; |
| import { parseQmdQueryJson } from "./qmd-query-parser.js"; |
|
|
| describe("parseQmdQueryJson", () => { |
| it("parses clean qmd JSON output", () => { |
| const results = parseQmdQueryJson('[{"docid":"abc","score":1,"snippet":"@@ -1,1\\none"}]', ""); |
| expect(results).toEqual([ |
| { |
| docid: "abc", |
| score: 1, |
| snippet: "@@ -1,1\none", |
| }, |
| ]); |
| }); |
|
|
| it("extracts embedded result arrays from noisy stdout", () => { |
| const results = parseQmdQueryJson( |
| `initializing |
| {"payload":"ok"} |
| [{"docid":"abc","score":0.5}] |
| complete`, |
| "", |
| ); |
| expect(results).toEqual([{ docid: "abc", score: 0.5 }]); |
| }); |
|
|
| it("treats plain-text no-results from stderr as an empty result set", () => { |
| const results = parseQmdQueryJson("", "No results found\n"); |
| expect(results).toEqual([]); |
| }); |
|
|
| it("treats prefixed no-results marker output as an empty result set", () => { |
| expect(parseQmdQueryJson("warning: no results found", "")).toEqual([]); |
| expect(parseQmdQueryJson("", "[qmd] warning: no results found\n")).toEqual([]); |
| }); |
|
|
| it("does not treat arbitrary non-marker text as no-results output", () => { |
| expect(() => |
| parseQmdQueryJson("warning: search completed; no results found for this query", ""), |
| ).toThrow(/qmd query returned invalid JSON/i); |
| }); |
|
|
| it("throws when stdout cannot be interpreted as qmd JSON", () => { |
| expect(() => parseQmdQueryJson("this is not json", "")).toThrow( |
| /qmd query returned invalid JSON/i, |
| ); |
| }); |
| }); |
|
|