From bfb6a8ac9e692aac9a10dc8c8b580b113a0b128b Mon Sep 17 00:00:00 2001 From: Charlie Astrada Date: Mon, 10 May 2021 22:43:30 -0300 Subject: [PATCH] Refactor transaction.test to use apollo-server-integration-testing dependency https://github.com/zapier/apollo-server-integration-testing since it allows for high confidence testing. The problems with the apollo-testing can be found here: https://github.com/apollographql/apollo-server/issues/2277 and are commented in other commit messages as well. --- server/dist/resolvers/transaction.test.js | 72 +++++----- server/dist/resolvers/transaction.test.js.map | 2 +- server/src/resolvers/transaction.test.ts | 133 ++++++++++-------- 3 files changed, 109 insertions(+), 98 deletions(-) diff --git a/server/dist/resolvers/transaction.test.js b/server/dist/resolvers/transaction.test.js index dab6dbd..3c71829 100644 --- a/server/dist/resolvers/transaction.test.js +++ b/server/dist/resolvers/transaction.test.js @@ -12,29 +12,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -const apollo_server_testing_1 = require("apollo-server-testing"); +const apollo_server_integration_testing_1 = require("apollo-server-integration-testing"); require("reflect-metadata"); const es_1 = __importDefault(require("faker/locale/es")); const testConn_1 = require("../test-utils/testConn"); const apollo_server_express_1 = require("apollo-server-express"); +const ioredis_1 = __importDefault(require("ioredis")); const createSchema_1 = require("../utils/createSchema"); const Transaction_1 = require("../entities/Transaction"); const queries_mutations_1 = require("../test-utils/queries-mutations"); let dbConn; let em; -let server; +let apolloServer; +let testClientQuery; +let testClientMutate; +let testClientSetOptions; describe("Transaction Resolver", () => { describe("Happy Path", () => { test("should create a txn successfully", () => __awaiter(void 0, void 0, void 0, function* () { + var _a; const txnToBeCreatedVariables = { title: es_1.default.company.companyName(), }; - const { mutate } = server; - const response = yield mutate({ - mutation: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + const response = yield testClientMutate(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: txnToBeCreatedVariables, }); - let newlyCreatedTxn = response.data.createTransaction; + let newlyCreatedTxn = (_a = response.data) === null || _a === void 0 ? void 0 : _a.createTransaction; newlyCreatedTxn.createdAt = new Date(Number(newlyCreatedTxn.createdAt)); newlyCreatedTxn.updatedAt = new Date(Number(newlyCreatedTxn.updatedAt)); let dbTxn = yield em.findOne(Transaction_1.Transaction, { @@ -45,23 +48,19 @@ describe("Transaction Resolver", () => { expect(newlyCreatedTxn).toEqual(dbTxn); })); test("should return all transactions", () => __awaiter(void 0, void 0, void 0, function* () { - const { query, mutate } = server; - yield mutate({ - mutation: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + var _b; + yield testClientMutate(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: { title: es_1.default.company.companyName(), }, }); - yield mutate({ - mutation: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + yield testClientMutate(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: { title: es_1.default.company.companyName(), }, }); - const res = yield query({ - query: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.GET_ALL_TXNS, - }); - const transactions = res.data.transactions; + const res = yield testClientQuery(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.GET_ALL_TXNS); + const transactions = (_b = res.data) === null || _b === void 0 ? void 0 : _b.transactions; const dbTxns = yield em.find(Transaction_1.Transaction, {}); transactions.forEach((transaction) => { const matchingDbTxn = dbTxns.filter((dbTxn) => dbTxn.id === transaction.id)[0]; @@ -69,16 +68,14 @@ describe("Transaction Resolver", () => { }); })); test("should return a transaction by id", () => __awaiter(void 0, void 0, void 0, function* () { - const { query, mutate } = server; - const response = yield mutate({ - mutation: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + var _c; + const response = yield testClientMutate(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: { title: es_1.default.company.companyName(), }, }); - const newlyCreatedTxn = response.data.createTransaction; - const res = yield query({ - query: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.GET_TXN, + const newlyCreatedTxn = (_c = response.data) === null || _c === void 0 ? void 0 : _c.createTransaction; + const res = yield testClientQuery(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.GET_TXN, { variables: { id: newlyCreatedTxn.id }, }); const returnedTxn = res.data.transaction; @@ -91,17 +88,14 @@ describe("Transaction Resolver", () => { expect(returnedTxn.title).toBe(dbTxn.title); })); test("should update a transaction", () => __awaiter(void 0, void 0, void 0, function* () { - const { query, mutate } = server; - const response = yield mutate({ - mutation: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + const response = yield testClientMutate(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: { title: es_1.default.company.companyName(), }, }); const newlyCreatedTxn = response.data.createTransaction; const newTitle = es_1.default.company.companyName(); - const res = yield query({ - query: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.UPDATE_TXN, + const res = yield testClientQuery(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.UPDATE_TXN, { variables: { id: newlyCreatedTxn.id, title: newTitle }, }); const updatedTxn = res.data.updateTransaction; @@ -113,16 +107,13 @@ describe("Transaction Resolver", () => { expect(dbTxn.title).not.toBe(newlyCreatedTxn.title); })); test("should delete a transaction", () => __awaiter(void 0, void 0, void 0, function* () { - const { query, mutate } = server; - const response = yield mutate({ - mutation: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + const response = yield testClientMutate(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: { title: es_1.default.company.companyName(), }, }); const newlyCreatedTxn = response.data.createTransaction; - const res = yield query({ - query: queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.DELETE_TXN, + const res = yield testClientQuery(queries_mutations_1.TXN_QUERIES_AND_MUTATIONS.DELETE_TXN, { variables: { id: newlyCreatedTxn.id }, }); const isTxnDeleted = res.data.deleteTransaction; @@ -135,13 +126,22 @@ describe("Transaction Resolver", () => { beforeAll(() => __awaiter(void 0, void 0, void 0, function* () { dbConn = yield testConn_1.testConn(); em = dbConn.em; - const apolloServer = new apollo_server_express_1.ApolloServer({ + const redis = new ioredis_1.default(); + apolloServer = new apollo_server_express_1.ApolloServer({ schema: yield createSchema_1.createSchema(), - context: () => ({ em }), + context: ({ req, res }) => ({ em, req, res, redis }), }); - server = apollo_server_testing_1.createTestClient(apolloServer); -})); -beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { + const { query, mutate, setOptions } = apollo_server_integration_testing_1.createTestClient({ + apolloServer, + extendMockRequest: { + session: { + userId: null, + }, + }, + }); + testClientMutate = mutate; + testClientQuery = query; + testClientSetOptions = setOptions; yield em.nativeDelete(Transaction_1.Transaction, {}); })); afterAll(() => __awaiter(void 0, void 0, void 0, function* () { diff --git a/server/dist/resolvers/transaction.test.js.map b/server/dist/resolvers/transaction.test.js.map index e373aa9..9b3e2d9 100644 --- a/server/dist/resolvers/transaction.test.js.map +++ b/server/dist/resolvers/transaction.test.js.map @@ -1 +1 @@ -{"version":3,"file":"transaction.test.js","sourceRoot":"","sources":["../../src/resolvers/transaction.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"transaction.test.js","sourceRoot":"","sources":["../../src/resolvers/transaction.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/server/src/resolvers/transaction.test.ts b/server/src/resolvers/transaction.test.ts index e482357..899df6a 100644 --- a/server/src/resolvers/transaction.test.ts +++ b/server/src/resolvers/transaction.test.ts @@ -1,7 +1,8 @@ import { createTestClient, - ApolloServerTestClient, -} from "apollo-server-testing"; + TestQuery, + TestSetOptions, +} from "apollo-server-integration-testing"; import "reflect-metadata"; import { @@ -13,13 +14,18 @@ import { import faker from "faker/locale/es"; import { testConn } from "../test-utils/testConn"; import { ApolloServer } from "apollo-server-express"; +import Redis from "ioredis"; import { createSchema } from "../utils/createSchema"; import { Transaction } from "../entities/Transaction"; import { TXN_QUERIES_AND_MUTATIONS } from "../test-utils/queries-mutations"; +import { Context } from "../types/context"; let dbConn: MikroORM>; let em: EntityManager>; //entity manager for ORM -let server: ApolloServerTestClient; +let apolloServer: ApolloServer; +let testClientQuery: TestQuery; +let testClientMutate: TestQuery; +let testClientSetOptions: TestSetOptions; describe("Transaction Resolver", () => { describe("Happy Path", () => { @@ -30,13 +36,16 @@ describe("Transaction Resolver", () => { }; //ACT - const { mutate } = server; - const response = await mutate({ - mutation: TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, - variables: txnToBeCreatedVariables, - }); - let newlyCreatedTxn: Transaction = response.data.createTransaction; + const response = await testClientMutate( + TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + { + variables: txnToBeCreatedVariables, + } + ); + + let newlyCreatedTxn: Transaction = (response.data as any) + ?.createTransaction; //API returns timestamp as unix in string format. We need to get a proper date format for comparison newlyCreatedTxn.createdAt = new Date(Number(newlyCreatedTxn.createdAt)); newlyCreatedTxn.updatedAt = new Date(Number(newlyCreatedTxn.updatedAt)); @@ -55,28 +64,22 @@ describe("Transaction Resolver", () => { test("should return all transactions", async () => { //ARRANGE - const { query, mutate } = server; - //create 2 txns with diff titles - await mutate({ - mutation: TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + await testClientMutate(TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: { title: faker.company.companyName(), }, }); - await mutate({ - mutation: TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + await testClientMutate(TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, { variables: { title: faker.company.companyName(), }, }); //ACT - const res = await query({ - query: TXN_QUERIES_AND_MUTATIONS.GET_ALL_TXNS, - }); - const transactions: Transaction[] = res.data.transactions; + const res = await testClientQuery(TXN_QUERIES_AND_MUTATIONS.GET_ALL_TXNS); + const transactions: Transaction[] = (res.data as any)?.transactions; //query all txns directly from db const dbTxns = await em.find(Transaction, {}); @@ -92,26 +95,25 @@ describe("Transaction Resolver", () => { }); test("should return a transaction by id", async () => { //ARRANGE - const { query, mutate } = server; - //create a new txn - const response = await mutate({ - mutation: TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, - variables: { - title: faker.company.companyName(), - }, - }); + const response = await testClientMutate( + TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + { + variables: { + title: faker.company.companyName(), + }, + } + ); - const newlyCreatedTxn = response.data.createTransaction; + const newlyCreatedTxn = (response.data as any)?.createTransaction; //ACT //query txn by id - const res = await query({ - query: TXN_QUERIES_AND_MUTATIONS.GET_TXN, + const res = await testClientQuery(TXN_QUERIES_AND_MUTATIONS.GET_TXN, { variables: { id: newlyCreatedTxn.id }, }); - const returnedTxn = res.data.transaction; + const returnedTxn = (res.data as any).transaction; //query txn directly from db const [dbTxn]: Transaction[] = await em.find(Transaction, { @@ -126,28 +128,27 @@ describe("Transaction Resolver", () => { }); test("should update a transaction", async () => { //ARRANGE - const { query, mutate } = server; - //create a new txn - const response = await mutate({ - mutation: TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, - variables: { - title: faker.company.companyName(), - }, - }); + const response = await testClientMutate( + TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + { + variables: { + title: faker.company.companyName(), + }, + } + ); - const newlyCreatedTxn = response.data.createTransaction; + const newlyCreatedTxn = (response.data as any).createTransaction; //new title we will use to update txn const newTitle = faker.company.companyName(); //ACT - const res = await query({ - query: TXN_QUERIES_AND_MUTATIONS.UPDATE_TXN, + const res = await testClientQuery(TXN_QUERIES_AND_MUTATIONS.UPDATE_TXN, { variables: { id: newlyCreatedTxn.id, title: newTitle }, }); - const updatedTxn: Transaction = res.data.updateTransaction; + const updatedTxn: Transaction = (res.data as any).updateTransaction; //query txn directly from db const [dbTxn] = await em.find(Transaction, { id: updatedTxn.id }); @@ -161,25 +162,24 @@ describe("Transaction Resolver", () => { }); test("should delete a transaction", async () => { //ARRANGE - const { query, mutate } = server; - //create a new txn to delete - const response = await mutate({ - mutation: TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, - variables: { - title: faker.company.companyName(), - }, - }); + const response = await testClientMutate( + TXN_QUERIES_AND_MUTATIONS.CREATE_TXN, + { + variables: { + title: faker.company.companyName(), + }, + } + ); - const newlyCreatedTxn = response.data.createTransaction; + const newlyCreatedTxn = (response.data as any).createTransaction; //ACT //Delete txn by id - const res = await query({ - query: TXN_QUERIES_AND_MUTATIONS.DELETE_TXN, + const res = await testClientQuery(TXN_QUERIES_AND_MUTATIONS.DELETE_TXN, { variables: { id: newlyCreatedTxn.id }, }); - const isTxnDeleted: Boolean = res.data.deleteTransaction; + const isTxnDeleted: Boolean = (res.data as any).deleteTransaction; //should be undefined after deletion const [dbTxn] = await em.find(Transaction, { id: newlyCreatedTxn.id }); @@ -196,16 +196,27 @@ beforeAll(async () => { dbConn = await testConn(); em = dbConn.em; - //Setup an Apollo test server - const apolloServer = new ApolloServer({ + const redis = new Redis(); + + apolloServer = new ApolloServer({ schema: await createSchema(), - context: () => ({ em }), + context: ({ req, res }): Context => ({ em, req, res, redis }), }); - server = createTestClient(apolloServer); -}); + const { query, mutate, setOptions } = createTestClient({ + apolloServer, + extendMockRequest: { + session: { + userId: null, + }, + }, + }); + + //Set values to variables for use in other tests + testClientMutate = mutate; + testClientQuery = query; + testClientSetOptions = setOptions; -beforeEach(async () => { await em.nativeDelete(Transaction, {}); //clear all txns in test db });