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 { 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();",

View File

@@ -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();

View File

@@ -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 });

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 { $, 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 $({