aboutsummaryrefslogtreecommitdiff
path: root/tests/operations.test.ts
blob: 99357ea2a3e49e08408525e7487d824e4684fd2b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*** 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");
});