Skip to content

Instantly share code, notes, and snippets.

@lon-io
Created May 25, 2021 11:31
Show Gist options
  • Save lon-io/1bca5c5dc83faa4b22825f92ed24be23 to your computer and use it in GitHub Desktop.
Save lon-io/1bca5c5dc83faa4b22825f92ed24be23 to your computer and use it in GitHub Desktop.

Revisions

  1. lon-io created this gist May 25, 2021.
    37 changes: 37 additions & 0 deletions resource.test.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    import request from "supertest";
    import { GET_RESOURCE } from "./queries/resource";
    import startTestServer from "./setup";
    import { Await } from "src/types/global";

    describe("Queries", () => {
    let config: Await<ReturnType<typeof startTestServer>>;

    beforeAll(async () => {
    config = await startTestServer();
    return Promise.resolve();
    });

    afterAll(async () => {
    await stop();
    return Promise.resolve();
    }, 10000);

    test("fetches a single resource", async (done) => {
    request(config.httpServer)
    .post(config.uri)
    .set({ authorization: config.token })
    .send(
    JSON.stringify({
    query: `${config.print(GET_RESOURCE)}`,
    variables: { resource_id: 1 },
    })
    )
    .expect("Content-Type", /json/)
    .expect(200)
    .end((err, res) => {
    if (err) return done(err);
    expect(res.body).toMatchObject({ message: "Hello, stranger!" });
    done();
    });
    });
    });
    9 changes: 9 additions & 0 deletions resource.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,9 @@
    const gql = require("graphql-tag");

    export const GET_RESOURCE = gql`
    query property($resource_id: ID!) {
    property(resource_id: $resource_id) {
    message
    }
    }
    `;
    27 changes: 27 additions & 0 deletions setup.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    import { expressApp } from "src/server";
    import { getTestToken } from "../mocks/user";
    const { print } = require('graphql/language/printer');

    import { AddressInfo } from "net"

    const startTestServer = async () => {
    const httpServer = expressApp.listen({ port: 0 });
    const token = await getTestToken(1, '[email protected]');
    const uri = `http://localhost:${(httpServer.address() as AddressInfo).port}/graphql/v1`;

    return {
    token,
    uri,
    httpServer,
    stopServer: () =>
    new Promise((resolve) => {
    httpServer.close(() => {
    console.log("Server closed");
    return resolve("Closed");
    });
    }),
    print,
    };
    };

    export default startTestServer;