/*** IMPORT ------------------------------------------- ***/ import { assertEquals } from "jsr:@std/assert@^1.0.0"; /*** UTILITY ------------------------------------------ ***/ import { deriveTitle, parseOperations } from "../source/library/graphql/operations.ts"; /*** TESTS -------------------------------------------- ***/ Deno.test("parseOperations returns empty for blank query", () => { assertEquals(parseOperations(""), []); assertEquals(parseOperations(" "), []); }); Deno.test("parseOperations returns empty on syntax error", () => { assertEquals(parseOperations("query { ..."), []); }); Deno.test("parseOperations captures a single named query", () => { const ops = parseOperations("query Foo { viewer { id } }"); assertEquals(ops, [{ name: "Foo", type: "query" }]); }); Deno.test("parseOperations returns null name for anonymous ops", () => { const ops = parseOperations("{ viewer { id } }"); assertEquals(ops, [{ name: null, type: "query" }]); }); Deno.test("parseOperations captures multiple operations", () => { const ops = parseOperations(` query Foo { a } mutation Bar { b } subscription Baz { c } `); assertEquals(ops, [ { name: "Foo", type: "query" }, { name: "Bar", type: "mutation" }, { name: "Baz", type: "subscription" } ]); }); Deno.test("deriveTitle prefers the first operation name", () => { const ops = parseOperations("query Foo { a }"); assertEquals(deriveTitle("query Foo { a }", ops), "Foo"); }); Deno.test("deriveTitle falls back to operation type", () => { const ops = parseOperations("mutation { a }"); assertEquals(deriveTitle("mutation { a }", ops), "mutation"); }); Deno.test("deriveTitle falls back to the first 20 chars when unparsable", () => { const query = "this is not valid graphql at all"; assertEquals(deriveTitle(query, parseOperations(query)), "this is not valid gr"); }); Deno.test("deriveTitle returns 'untitled' for empty input", () => { assertEquals(deriveTitle("", []), "untitled"); assertEquals(deriveTitle(" ", []), "untitled"); });