test: create lib function for getting mocked env variables

This commit is contained in:
2024-06-15 06:01:19 -04:00
parent be2e7ffa98
commit df7e7432da
6 changed files with 51 additions and 35 deletions

View File

@@ -45,15 +45,13 @@
"", "",
"import app from \"~/index\";", "import app from \"~/index\";",
"import { server } from \"~/mocks\";", "import { server } from \"~/mocks\";",
"import { getDb, resetDb } from \"~/models/db\";", "import { resetDb } from \"~/models/db\";",
"import { getTestDb } from \"~/libs/test/getTestDb\";",
"", "",
"server.listen();", "server.listen();",
"", "",
"describe(\"requests the /$1 route\", () => {", "describe(\"requests the /$1 route\", () => {",
" const db = getDb({", " const db = getTestDb();",
" TURSO_URL: process.env.TURSO_URL ?? \"http://127.0.0.1:3000\",",
" TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? \"asd\",",
" });",
"", "",
" beforeEach(async () => {", " beforeEach(async () => {",
" await resetDb();", " await resetDb();",

View File

@@ -4,17 +4,15 @@ import { DateTime } from "luxon";
import { beforeEach, describe, expect, it } from "bun:test"; import { beforeEach, describe, expect, it } from "bun:test";
import app from "~/index"; import app from "~/index";
import { getTestDb } from "~/libs/test/getTestDb";
import { server } from "~/mocks"; import { server } from "~/mocks";
import { getDb, resetDb } from "~/models/db"; import { resetDb } from "~/models/db";
import { deviceTokensTable } from "~/models/schema"; import { deviceTokensTable } from "~/models/schema";
server.listen(); server.listen();
describe("requests the /token route", () => { describe("requests the /token route", () => {
const db = getDb({ const db = getTestDb();
TURSO_URL: process.env.TURSO_URL ?? "http://127.0.0.1:3000",
TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? "asd",
});
beforeEach(async () => { beforeEach(async () => {
await resetDb(); await resetDb();

View File

@@ -1,17 +1,16 @@
import { beforeEach, describe, expect, it } from "bun:test"; import { beforeEach, describe, expect, it } from "bun:test";
import app from "~/index"; import app from "~/index";
import { getTestDb } from "~/libs/test/getTestDb";
import { getTestEnv } from "~/libs/test/getTestEnv";
import { server } from "~/mocks"; import { server } from "~/mocks";
import { getDb, resetDb } from "~/models/db"; import { resetDb } from "~/models/db";
import { deviceTokensTable } from "~/models/schema"; import { deviceTokensTable } from "~/models/schema";
server.listen(); server.listen();
describe("requests the /watch-status route", () => { describe("requests the /watch-status route", () => {
const db = getDb({ const db = getTestDb();
TURSO_URL: process.env.TURSO_URL ?? "http://127.0.0.1:3000",
TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? "asd",
});
beforeEach(async () => { beforeEach(async () => {
await resetDb(); await resetDb();
@@ -36,10 +35,7 @@ describe("requests the /watch-status route", () => {
titleId: 10, titleId: 10,
}), }),
}, },
{ getTestEnv(),
TURSO_URL: process.env.TURSO_URL,
TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN,
},
); );
expect(res.json()).resolves.toEqual({ success: true }); expect(res.json()).resolves.toEqual({ success: true });
@@ -61,10 +57,7 @@ describe("requests the /watch-status route", () => {
titleId: 10, titleId: 10,
}), }),
}, },
{ getTestEnv(),
TURSO_URL: process.env.TURSO_URL,
TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN,
},
); );
expect(res.json()).resolves.toEqual({ success: false }); expect(res.json()).resolves.toEqual({ success: false });
@@ -90,10 +83,7 @@ describe("requests the /watch-status route", () => {
titleId: -1, titleId: -1,
}), }),
}, },
{ getTestEnv(),
TURSO_URL: process.env.TURSO_URL,
TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN,
},
); );
expect(res.json()).resolves.toEqual({ success: true }); expect(res.json()).resolves.toEqual({ success: true });

View File

@@ -0,0 +1,7 @@
import { getDb } from "~/models/db";
import { getTestEnv } from "./getTestEnv";
export function getTestDb() {
return getDb(getTestEnv());
}

View File

@@ -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<Env, "Bindings" | "Variables"> {
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> = {}): Env {
return {
ADMIN_SDK_JSON,
ENABLE_ANIFY,
QSTASH_URL,
TURSO_AUTH_TOKEN,
TURSO_URL,
};
}

View File

@@ -1,8 +1,10 @@
import { formatCmd } from "node_modules/zx/build/util"; import { formatCmd } from "node_modules/zx/build/util";
import { $, minimist } from "zx"; import { $, minimist } from "zx";
import { getTestEnvVariables } from "./libs/test/getTestEnv";
const args = minimist(process.argv.slice(2)); const args = minimist(process.argv.slice(2));
if (!args.dbCommand) { if (!args["dbCommand"]) {
throw new Error("dbCommand is required"); throw new Error("dbCommand is required");
} }
@@ -18,15 +20,14 @@ const positionalArgs = Object.entries(args)
}) })
.concat(args._); .concat(args._);
console.log(formatCmd(args.dbCommand)); console.log(formatCmd(args["dbCommand"]));
const dbProcess = $({ quote: (arg) => arg })`${args.dbCommand}`.nothrow(); const dbProcess = $({ quote: (arg) => arg })`${args["dbCommand"]}`.nothrow();
$.env = { $.env = {
PATH: process.env.PATH, ...getTestEnvVariables(),
HOME: process.env.HOME, PATH: process.env["PATH"],
TURSO_URL: process.env.TURSO_URL ?? "http://127.0.0.1:3001", HOME: process.env["HOME"],
TURSO_AUTH_TOKEN: process.env.TURSO_AUTH_TOKEN ?? "asd", SHOULD_LOG_ERRORS: process.env["SHOULD_LOG_ERRORS"] ?? "true",
SHOULD_LOG_ERRORS: process.env.SHOULD_LOG_ERRORS ?? "true",
}; };
await $`bun db:migrate`.nothrow(); await $`bun db:migrate`.nothrow();
await $({ await $({