Skip to content

Commit

Permalink
test: getGraphQLEndpoint and Client.prototype.graphqlFetch
Browse files Browse the repository at this point in the history
  • Loading branch information
angeloashmore authored and lihbr committed Jan 6, 2022
1 parent 580c4d5 commit ff3df7e
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 3 deletions.
6 changes: 3 additions & 3 deletions test/__testutils__/createRef.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import * as prismic from "../../src";
import * as prismicT from "@prismicio/types";

export const createRef = (
isMasterRef = false,
overrides?: Partial<prismic.Ref>,
): prismic.Ref => {
overrides?: Partial<prismicT.Ref>,
): prismicT.Ref => {
const id = Math.random().toString();
const ref = Math.random().toString();
const label = Math.random().toString();
Expand Down
130 changes: 130 additions & 0 deletions test/client-graphqlFetch.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
import test from "ava";
import * as msw from "msw";
import * as mswNode from "msw/node";

import { createMockRepositoryHandler } from "./__testutils__/createMockRepositoryHandler";
import { createRepositoryResponse } from "./__testutils__/createRepositoryResponse";
import { createTestClient } from "./__testutils__/createClient";
import { getMasterRef } from "./__testutils__/getMasterRef";
import { createAuthorizationHeader } from "./__testutils__/createAuthorizationHeader";
import { createRef } from "./__testutils__/createRef";

const server = mswNode.setupServer();
test.before(() => server.listen({ onUnhandledRequest: "error" }));
test.after(() => server.close());

test("resolves a query", async (t) => {
const repositoryResponse = createRepositoryResponse();

const graphqlURL = "https://example.com/";
const graphqlResponse = { foo: "bar" };

server.use(
createMockRepositoryHandler(t, repositoryResponse),
msw.rest.get(graphqlURL, (req, res, ctx) => {
if (
req.url.toString() === graphqlURL &&
req.headers.get("Prismic-Ref") === getMasterRef(repositoryResponse)
) {
return res(ctx.json(graphqlResponse));
}
}),
);

const client = createTestClient(t);
const res = await client.graphqlFetch(graphqlURL);
const json = await res.json();

t.deepEqual(json, graphqlResponse);
});

test("merges provided headers with defaults", async (t) => {
const repositoryResponse = createRepositoryResponse({
integrationFieldsRef: createRef(false).ref,
});
const ref = "custom-ref";

const graphqlURL = "https://example.com/";
const graphqlResponse = { foo: "bar" };

server.use(
createMockRepositoryHandler(t, repositoryResponse),
msw.rest.get(graphqlURL, (req, res, ctx) => {
if (
req.url.toString() === graphqlURL &&
req.headers.get("Prismic-Ref") === ref &&
req.headers.get("Prismic-integration-field-ref") ===
repositoryResponse.integrationFieldsRef
) {
return res(ctx.json(graphqlResponse));
}
}),
);

const client = createTestClient(t);
const res = await client.graphqlFetch(graphqlURL, {
headers: {
"Prismic-Ref": ref,
},
});
const json = await res.json();

t.deepEqual(json, graphqlResponse);
});

test("includes Authorization header if access token is provided", async (t) => {
const repositoryResponse = createRepositoryResponse({
integrationFieldsRef: createRef(false).ref,
});

const graphqlURL = "https://example.com/";
const graphqlResponse = { foo: "bar" };

server.use(
createMockRepositoryHandler(t, repositoryResponse),
msw.rest.get(graphqlURL, (req, res, ctx) => {
if (
req.url.toString() === graphqlURL &&
req.headers.get("Prismic-Ref") === getMasterRef(repositoryResponse) &&
req.headers.get("Prismic-integration-field-ref") ===
repositoryResponse.integrationFieldsRef
) {
return res(ctx.json(graphqlResponse));
}
}),
);

const client = createTestClient(t);
const res = await client.graphqlFetch(graphqlURL);
const json = await res.json();

t.deepEqual(json, graphqlResponse);
});

test("includes Integration Fields header if ref is available", async (t) => {
const repositoryResponse = createRepositoryResponse();
const accessToken = "accessToken";

const graphqlURL = "https://example.com/";
const graphqlResponse = { foo: "bar" };

server.use(
createMockRepositoryHandler(t, repositoryResponse),
msw.rest.get(graphqlURL, (req, res, ctx) => {
if (
req.url.toString() === graphqlURL &&
req.headers.get("Prismic-Ref") === getMasterRef(repositoryResponse) &&
req.headers.get("Authorization") ===
createAuthorizationHeader(accessToken)
) {
return res(ctx.json(graphqlResponse));
}
}),
);

const client = createTestClient(t, { accessToken });
const res = await client.graphqlFetch(graphqlURL);
const json = await res.json();

t.deepEqual(json, graphqlResponse);
});
9 changes: 9 additions & 0 deletions test/getGraphQLEndpoint.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import test from "ava";

import * as prismic from "../src";

const endpoint = prismic.getGraphQLEndpoint("qwerty");

test("returns default GraphQL API CDN URL", (t) => {
t.is(endpoint, "https://qwerty.cdn.prismic.io/graphql");
});

0 comments on commit ff3df7e

Please sign in to comment.