import { stripIndents } from "common-tags"; import fs from "fs"; import path from "path"; import { extractDocumentFromJavascript, loadAndMergeQueryDocuments, loadQueryDocuments, } from "../loading"; // Test example javascript source files are located within __fixtures__ describe("extractDocumentFromJavascript", () => { test("normal queries", () => { const contents = fs .readFileSync(path.join(__dirname, "__fixtures__", "normal.js")) .toString(); expect(stripIndents`${extractDocumentFromJavascript(contents)}`).toMatch( stripIndents` query UserProfileView { me { id uuid role } } ` ); }); test("comments in template string", () => { const contents = fs .readFileSync(path.join(__dirname, "__fixtures__", "comments.js")) .toString(); expect(stripIndents`${extractDocumentFromJavascript(contents)}`).toMatch( stripIndents` query UserProfileView { me { id # TODO: https://www.fast.com/sdf/sdf uuid # Some other comment role } } ` ); }); test("gql completely commented out", () => { const contents = fs .readFileSync(path.join(__dirname, "__fixtures__", "commentedOut.js")) .toString(); expect(extractDocumentFromJavascript(contents)).toBeNull(); }); test("invalid gql", () => { const contents = fs .readFileSync(path.join(__dirname, "__fixtures__", "invalid.js")) .toString(); expect(extractDocumentFromJavascript(contents)).toBeNull(); }); }); describe("Validation", () => { test(`should extract gql snippet from javascript file`, () => { const inputPaths = [ path.join(__dirname, "../../../../__fixtures__/starwars/gqlQueries.js"), ]; const document = loadAndMergeQueryDocuments(inputPaths); expect(document).toMatchSnapshot(); }); }); describe("loadQueryDocuments", () => { test(`should load a schema document from a .graphqls file`, () => { const inputPaths = [ path.join(__dirname, "../../../../__fixtures__/starwars/schema.graphqls"), ]; const document = loadQueryDocuments(inputPaths); expect(document.length).toEqual(1); expect(document[0].definitions).toHaveLength(16); expect(document[0].kind).toEqual("Document"); expect(document[0].loc).toBeDefined(); }); });