diff options
| author | Kevin J Hoerr <kjhoerr@protonmail.com> | 2022-04-06 04:32:50 +0000 |
|---|---|---|
| committer | Kevin J Hoerr <kjhoerr@protonmail.com> | 2022-04-06 04:32:50 +0000 |
| commit | a1cdb85c03f8ef630c1fe08ea3b4af36c084f723 (patch) | |
| tree | 8a6c6533a6beedfbc4b041da558b211a4225228d | |
| parent | da1945e6163c4c5bd8a2fa121c8347ccea83ef0a (diff) | |
| download | ao-coverage-a1cdb85c03f8ef630c1fe08ea3b4af36c084f723.tar.gz ao-coverage-a1cdb85c03f8ef630c1fe08ea3b4af36c084f723.tar.bz2 ao-coverage-a1cdb85c03f8ef630c1fe08ea3b4af36c084f723.zip | |
Refactor routes tests
| -rw-r--r-- | .devcontainer/devcontainer.json | 3 | ||||
| -rw-r--r-- | src/routes.test.ts | 69 |
2 files changed, 35 insertions, 37 deletions
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 407f7ed..42f4961 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,7 +12,8 @@ "extensions": [ "dbaeumer.vscode-eslint", "mongodb.mongodb-vscode", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "arcanis.vscode-zipfs" ], "forwardPorts": [3000, 27017], "postCreateCommand": "yarn install", diff --git a/src/routes.test.ts b/src/routes.test.ts index 1a6032a..4e8b455 100644 --- a/src/routes.test.ts +++ b/src/routes.test.ts @@ -1,16 +1,16 @@ -// The environment variable HOST_DIR must be defined for the tests to -// work. Mocking exit gives a more descriptive error. -const exit = jest - .spyOn(process, "exit") - .mockImplementation(() => undefined as never); import _request, { SuperTest, Test } from "supertest"; import express from "express"; -import dotenv from "dotenv"; import fs from "fs"; import path from "path"; import winston from "winston"; +import { Db } from "mongodb"; +import { badgen } from "badgen"; -dotenv.config(); +import { persistTemplate } from "./config"; +import routes from "./routes"; +import Metadata, { EnvConfig } from "./metadata"; +import { Template } from "./templates"; +import { BranchNotFoundError } from "./errors"; jest.mock("./util/logger", () => ({ __esModule: true, @@ -23,26 +23,9 @@ jest.mock("./util/logger", () => ({ }), })); -test("Environment variable HOST_DIR must be defined", () => { - expect(process.env.HOST_DIR).not.toBeUndefined(); -}); -test("HOST_DIR must be readable and writable", () => { - expect(() => - fs.accessSync( - process.env.HOST_DIR ?? "", - fs.constants.W_OK | fs.constants.R_OK - ) - ).not.toThrowError(); -}); - -import { configOrError, persistTemplate } from "./config"; import loggerConfig from "./util/logger"; -import routes from "./routes"; -import Metadata, { EnvConfig } from "./metadata"; -import { Template } from "./templates"; -import { Db } from "mongodb"; -import { badgen } from "badgen"; -import { BranchNotFoundError } from "./errors"; +import dotenv from "dotenv"; +dotenv.config(); type MetadataMockType = { logger: winston.Logger; @@ -57,18 +40,29 @@ type MetadataMockType = { updateBranch: jest.Mock; createRepository: jest.Mock; }; -const logger = winston.createLogger(loggerConfig("TEST", "debug")); + +const LOGGER = winston.createLogger(loggerConfig("TEST", "debug")); +const HOST_DIR = + process.env.HOST_DIR ?? + (() => { + const dir = path.join(__dirname, "..", "dist"); + console.warn( + `WARNING: HOST_DIR is not set - this is used to query files in src/routes.test.ts. Using '${dir}' as default HOST_DIR.` + ); + return dir; + })(); +const TARGET_URL = "https://localhost:3000"; const config = { token: "THISISCORRECT", // should be just larger than the example report used uploadLimit: Number(40000), - hostDir: configOrError("HOST_DIR", logger), + hostDir: HOST_DIR, publicDir: path.join(__dirname, "..", "public"), stage1: 95, stage2: 80, bindAddress: "localhost", - targetUrl: "http://localhost:3000/", + targetUrl: TARGET_URL, port: 3000, dbName: "ao-coverage", dbUri: "localhost", @@ -81,7 +75,7 @@ const mock = ( ), updateBranch: jest.Mock = jest.fn(() => new Promise((solv) => solv(true))) ): MetadataMockType => ({ - logger, + logger: LOGGER, database: {} as Db, config: config, getToken: jest.fn(() => config.token), @@ -106,8 +100,13 @@ const request = async ( return _request(app); }; -const HOST_DIR = configOrError("HOST_DIR", logger); -const TARGET_URL = "https://localhost:3000"; +test("HOST_DIR must be readable and writable", () => { + expect(() => { + // If read/write is okay, attempt directory creation for test compatibility + fs.mkdirSync(HOST_DIR, { recursive: true }); + fs.accessSync(HOST_DIR, fs.constants.W_OK | fs.constants.R_OK); + }).not.toThrowError(); +}); describe("templates", () => { describe("GET /sh", () => { @@ -124,11 +123,10 @@ describe("templates", () => { outputFile: path.join(HOST_DIR, "sh"), context: { TARGET_URL }, } as Template, - logger + LOGGER ); const res = await (await request()).get("/sh").expect(200); - expect(exit).not.toHaveBeenCalled(); expect(res.text).toMatch("curl -X POST"); expect(res.text).toMatch(`url="${TARGET_URL}"`); }); @@ -148,14 +146,13 @@ describe("templates", () => { outputFile: path.join(HOST_DIR, "index.html"), context: { TARGET_URL, CURL_HTTPS: "--https " }, } as Template, - logger + LOGGER ); const res = await (await request()) .get("/") .expect("Content-Type", /html/) .expect(200); - expect(exit).not.toHaveBeenCalled(); expect(res.text).toMatch(`curl --https -sSf ${TARGET_URL}/sh | sh`); }); }); |
