Files
Termix/scripts/dev-docker.test.ts
T

75 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
SERVICES,
appRunArgs,
serviceEnv,
serviceRunArgs,
} from "./lib/dev-docker.mjs";
import { parseDevArgs } from "./lib/dev-runner.mjs";
describe("serviceRunArgs", () => {
it("runs a service on the dev network with its port, env and volume", () => {
const args = serviceRunArgs(SERVICES.postgres);
expect(args.slice(0, 6)).toEqual([
"run",
"-d",
"--name",
"termix-dev-postgres",
"--network",
"termix-dev",
]);
expect(args).toContain("55432:5432");
expect(args).toContain("POSTGRES_PASSWORD=termix");
expect(args).toContain("termix-dev-postgres:/var/lib/postgresql/data");
expect(args.at(-1)).toBe("postgres:16");
});
it("adds no volume for guacd", () => {
expect(serviceRunArgs(SERVICES.guacd)).not.toContain("-v");
});
});
describe("serviceEnv", () => {
it("is empty for plain sqlite", () => {
expect(serviceEnv(parseDevArgs([]), false)).toEqual({});
});
it("points a local backend at the published ports", () => {
expect(
serviceEnv(parseDevArgs(["--db", "postgres", "--guacd"]), false),
).toEqual({
DATABASE_DIALECT: "postgres",
DATABASE_URL: "postgres://termix:termix@127.0.0.1:55432/termix",
GUACD_HOST: "127.0.0.1",
GUACD_PORT: "4822",
});
});
it("points a container at the other containers by name", () => {
expect(
serviceEnv(parseDevArgs(["--db", "mysql", "--guacd"]), true),
).toEqual({
DATABASE_DIALECT: "mysql",
DATABASE_URL: "mysql://root:termix@termix-dev-mysql:3306/termix",
GUACD_HOST: "termix-dev-guacd",
GUACD_PORT: "4822",
});
});
});
describe("appRunArgs", () => {
it("mounts the data and the staged plugins", () => {
const args = appRunArgs({
port: 9000,
env: { GUACD_HOST: "termix-dev-guacd" },
dataMount: "termix-dev-data",
pluginsDir: "/repo/dist/plugins",
});
expect(args).toContain("9000:8080");
expect(args).toContain("GUACD_HOST=termix-dev-guacd");
expect(args).toContain("termix-dev-data:/app/data");
expect(args).toContain("/repo/dist/plugins:/app/dist/plugins");
expect(args.at(-1)).toBe("termix:dev");
});
});