diff --git a/.vscode/test.code-snippets b/.vscode/test.code-snippets index 1be900a..e41e321 100644 --- a/.vscode/test.code-snippets +++ b/.vscode/test.code-snippets @@ -45,15 +45,13 @@ "", "import app from \"~/index\";", "import { server } from \"~/mocks\";", - "import { getDb, resetDb } from \"~/models/db\";", + "import { resetDb } from \"~/models/db\";", + "import { getTestDb } from \"~/libs/test/getTestDb\";", "", "server.listen();", "", "describe(\"requests the /$1 route\", () => {", - " const db = getDb({", - " TURSO_URL: process.env.TURSO_URL ?? \"http://127.0.0.1:3000\",", - " TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? \"asd\",", - " });", + " const db = getTestDb();", "", " beforeEach(async () => {", " await resetDb();", diff --git a/src/controllers/token/index.spec.ts b/src/controllers/token/index.spec.ts index 2c79ce9..25c4a46 100644 --- a/src/controllers/token/index.spec.ts +++ b/src/controllers/token/index.spec.ts @@ -4,17 +4,15 @@ import { DateTime } from "luxon"; import { beforeEach, describe, expect, it } from "bun:test"; import app from "~/index"; +import { getTestDb } from "~/libs/test/getTestDb"; import { server } from "~/mocks"; -import { getDb, resetDb } from "~/models/db"; +import { resetDb } from "~/models/db"; import { deviceTokensTable } from "~/models/schema"; server.listen(); describe("requests the /token route", () => { - const db = getDb({ - TURSO_URL: process.env.TURSO_URL ?? "http://127.0.0.1:3000", - TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? "asd", - }); + const db = getTestDb(); beforeEach(async () => { await resetDb(); diff --git a/src/controllers/watch-status/index.spec.ts b/src/controllers/watch-status/index.spec.ts index a753fbb..85c1318 100644 --- a/src/controllers/watch-status/index.spec.ts +++ b/src/controllers/watch-status/index.spec.ts @@ -1,17 +1,16 @@ import { beforeEach, describe, expect, it } from "bun:test"; import app from "~/index"; +import { getTestDb } from "~/libs/test/getTestDb"; +import { getTestEnv } from "~/libs/test/getTestEnv"; import { server } from "~/mocks"; -import { getDb, resetDb } from "~/models/db"; +import { resetDb } from "~/models/db"; import { deviceTokensTable } from "~/models/schema"; server.listen(); describe("requests the /watch-status route", () => { - const db = getDb({ - TURSO_URL: process.env.TURSO_URL ?? "http://127.0.0.1:3000", - TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? "asd", - }); + const db = getTestDb(); beforeEach(async () => { await resetDb(); @@ -36,10 +35,7 @@ describe("requests the /watch-status route", () => { titleId: 10, }), }, - { - TURSO_URL: process.env.TURSO_URL, - TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN, - }, + getTestEnv(), ); expect(res.json()).resolves.toEqual({ success: true }); @@ -61,10 +57,7 @@ describe("requests the /watch-status route", () => { titleId: 10, }), }, - { - TURSO_URL: process.env.TURSO_URL, - TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN, - }, + getTestEnv(), ); expect(res.json()).resolves.toEqual({ success: false }); @@ -90,10 +83,7 @@ describe("requests the /watch-status route", () => { titleId: -1, }), }, - { - TURSO_URL: process.env.TURSO_URL, - TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN, - }, + getTestEnv(), ); expect(res.json()).resolves.toEqual({ success: true }); diff --git a/src/libs/test/getTestDb.ts b/src/libs/test/getTestDb.ts new file mode 100644 index 0000000..74a32ac --- /dev/null +++ b/src/libs/test/getTestDb.ts @@ -0,0 +1,7 @@ +import { getDb } from "~/models/db"; + +import { getTestEnv } from "./getTestEnv"; + +export function getTestDb() { + return getDb(getTestEnv()); +} diff --git a/src/libs/test/getTestEnv.ts b/src/libs/test/getTestEnv.ts new file mode 100644 index 0000000..3a5529a --- /dev/null +++ b/src/libs/test/getTestEnv.ts @@ -0,0 +1,22 @@ +import type { Env } from "~/types/env"; + +/** Should only be used when it doesn't make sense for 'Bindings' or 'Variables' to be set. Otherwise, use getTestEnv(). */ +export function getTestEnvVariables(): Omit { + return getTestEnv(); +} + +export function getTestEnv({ + ADMIN_SDK_JSON = '{"clientEmail": "test@test.com"}', + ENABLE_ANIFY = "true", + QSTASH_URL = "https://qstash.com", + TURSO_AUTH_TOKEN = "123", + TURSO_URL = "http://127.0.0.1:3001", +}: Partial = {}): Env { + return { + ADMIN_SDK_JSON, + ENABLE_ANIFY, + QSTASH_URL, + TURSO_AUTH_TOKEN, + TURSO_URL, + }; +} diff --git a/src/testRunner.ts b/src/testRunner.ts index 7a42b21..ed803bf 100644 --- a/src/testRunner.ts +++ b/src/testRunner.ts @@ -1,8 +1,10 @@ import { formatCmd } from "node_modules/zx/build/util"; import { $, minimist } from "zx"; +import { getTestEnvVariables } from "./libs/test/getTestEnv"; + const args = minimist(process.argv.slice(2)); -if (!args.dbCommand) { +if (!args["dbCommand"]) { throw new Error("dbCommand is required"); } @@ -18,15 +20,14 @@ const positionalArgs = Object.entries(args) }) .concat(args._); -console.log(formatCmd(args.dbCommand)); -const dbProcess = $({ quote: (arg) => arg })`${args.dbCommand}`.nothrow(); +console.log(formatCmd(args["dbCommand"])); +const dbProcess = $({ quote: (arg) => arg })`${args["dbCommand"]}`.nothrow(); $.env = { - PATH: process.env.PATH, - HOME: process.env.HOME, - TURSO_URL: process.env.TURSO_URL ?? "http://127.0.0.1:3001", - TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? "asd", - SHOULD_LOG_ERRORS: process.env.SHOULD_LOG_ERRORS ?? "true", + ...getTestEnvVariables(), + PATH: process.env["PATH"], + HOME: process.env["HOME"], + SHOULD_LOG_ERRORS: process.env["SHOULD_LOG_ERRORS"] ?? "true", }; await $`bun db:migrate`.nothrow(); await $({