Add test for config.ts

This commit is contained in:
David Baker
2026-03-13 18:29:39 +00:00
parent 6ccf9c5047
commit 084d74593c
3 changed files with 72 additions and 2 deletions
@@ -9,7 +9,7 @@
"prepare": "vite build",
"lint:types": "tsc --noEmit",
"lint:codestyle": "echo 'handled by lint:eslint'",
"test": "echo no tests yet"
"test": "vitest run --coverage"
},
"devDependencies": {
"@arcmantle/vite-plugin-import-css-sheet": "^1.0.12",
@@ -22,7 +22,8 @@
"typescript": "^5.7.3",
"vite": "^7.1.11",
"vite-plugin-node-polyfills": "^0.25.0",
"vite-plugin-svgr": "^4.3.0"
"vite-plugin-svgr": "^4.3.0",
"vitest": "^4.0.0"
},
"dependencies": {
"@vector-im/compound-design-tokens": "^6.0.0",
@@ -0,0 +1,43 @@
/*
Copyright 2026 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { describe, expect, test } from "vitest";
import { WidgetTogglesConfig } from "../src/config";
describe("WidgetTogglesConfig", () => {
test("parses a valid config with an array of widget types", () => {
const result = WidgetTogglesConfig.safeParse({ types: ["m.video", "m.audio"] });
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.types).toEqual(["m.video", "m.audio"]);
}
});
test("parses a valid config with an empty types array", () => {
const result = WidgetTogglesConfig.safeParse({ types: [] });
expect(result.success).toBe(true);
if (result.success) {
expect(result.data.types).toEqual([]);
}
});
test("rejects a config missing the types field", () => {
const result = WidgetTogglesConfig.safeParse({});
expect(result.success).toBe(false);
});
test("rejects a config where types is not an array", () => {
const result = WidgetTogglesConfig.safeParse({ types: "m.video" });
expect(result.success).toBe(false);
});
test("rejects a config where types contains non-string values", () => {
const result = WidgetTogglesConfig.safeParse({ types: [1, 2, 3] });
expect(result.success).toBe(false);
});
});
@@ -0,0 +1,26 @@
/*
Copyright 2026 Element Creations Ltd.
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE files in the repository root for full details.
*/
import { defineConfig } from "vitest/config";
import { env } from "node:process";
const isGHA = env["GITHUB_ACTIONS"] !== undefined;
export default defineConfig({
test: {
include: ["tests/**/*.test.ts"],
exclude: ["./e2e/**/*", "./node_modules/**/*"],
reporters: isGHA
? ["default", ["vitest-sonar-reporter", { outputFile: "coverage/sonar-report.xml" }]]
: ["default"],
coverage: {
provider: "v8",
include: ["src/**/*.ts"],
reporter: [["lcov", { projectRoot: "../../../" }], "text"],
},
},
});