diff --git a/.env.test b/.env.test new file mode 100644 index 0000000..14f66f5 --- /dev/null +++ b/.env.test @@ -0,0 +1,9 @@ +LOG_LEVEL=debug +TS3_HOST=fake +TS3_USERNAME=fake +TS3_PASSWORD=fake +TS3_NICKNAME=fake +GOTIFY_URL=https://example.com +GOTIFY_TOKEN=fake +GOTIFY_TITLE=fake +MODE='[]' diff --git a/.gitea/workflows/cd.yaml b/.gitea/workflows/cd.yaml index 93f7429..c25e48f 100644 --- a/.gitea/workflows/cd.yaml +++ b/.gitea/workflows/cd.yaml @@ -29,6 +29,9 @@ jobs: - name: Run spellcheck run: bun run check:spell + - name: Run tests + run: bun test:unit + build_and_push: name: Build and push strategy: diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 8161222..0519cbb 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -23,3 +23,6 @@ jobs: - name: Run spellcheck run: bun run check:spell + + - name: Run tests + run: bun test:unit diff --git a/package.json b/package.json index 868d630..0be6eef 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "build": "bun build --minify --target bun --outdir dist --sourcemap src/app.ts", "check:code": "eslint src/ --ext .ts", "check:spell": "cspell --config cspell.code.json **/*.ts", + "test:unit": "NODE_ENV=test bun test", "start": "bun run src/app.ts" }, "devDependencies": { diff --git a/src/app.test.ts b/src/app.test.ts new file mode 100644 index 0000000..e5a5af5 --- /dev/null +++ b/src/app.test.ts @@ -0,0 +1,22 @@ +import { test, expect } from "bun:test"; +import { getModes } from "./app"; + +test("getModes", () => { + test("defaults to false", () => { + expect(getModes([])).toEqual({ + connect: false, + disconnect: false, + moved: false, + message: false, + }); + }); + + test("modes are true if set in input", () => { + expect(getModes(["connect", "moved"])).toEqual({ + connect: true, + disconnect: false, + moved: false, + message: false, + }); + }); +}); diff --git a/src/app.ts b/src/app.ts index 897ab56..46e90ef 100644 --- a/src/app.ts +++ b/src/app.ts @@ -36,12 +36,16 @@ const gotifyConfig = { title: GOTIFY_TITLE, }; -function getModes(): { +export function getModes(modeInput: Mode[]): { [key in Mode]: boolean; } { - const modes = MODE.map((mode) => { - return { [mode]: true }; - }); + const modes = modeInput + .map((mode) => { + return { [mode]: true }; + }) + .reduce((acc, cur) => { + return { ...acc, ...cur }; + }); return { connect: false, @@ -87,11 +91,11 @@ TeamSpeak.connect({ password: TS3_PASSWORD, nickname: TS3_NICKNAME, }).then((teamspeak) => { - const mode = getModes(); + const mode = getModes(MODE); logger.info( `connected to TS3 in modes: ${Object.entries(mode) - .filter(([_, value]) => value) + .filter(([, value]) => value) .map(([key]) => key) .join(", ")}` );