test: create lib function for getting mocked env variables
This commit is contained in:
8
.vscode/test.code-snippets
vendored
8
.vscode/test.code-snippets
vendored
@@ -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();",
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 });
|
||||
|
||||
7
src/libs/test/getTestDb.ts
Normal file
7
src/libs/test/getTestDb.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { getDb } from "~/models/db";
|
||||
|
||||
import { getTestEnv } from "./getTestEnv";
|
||||
|
||||
export function getTestDb() {
|
||||
return getDb(getTestEnv());
|
||||
}
|
||||
22
src/libs/test/getTestEnv.ts
Normal file
22
src/libs/test/getTestEnv.ts
Normal 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,
|
||||
};
|
||||
}
|
||||
@@ -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 $({
|
||||
|
||||
Reference in New Issue
Block a user