Files
frontend/apps/sn/tests/theme-contract.test.cjs
T
2026-09-15 10:00:42 +09:00

88 lines
2.8 KiB
JavaScript

const assert = require("node:assert/strict");
const fs = require("node:fs");
const path = require("node:path");
const { test } = require("node:test");
const { loadTypeScript } = require("./load-typescript.cjs");
const root = path.resolve(__dirname, "..");
const popupTheme = loadTypeScript(
"src/features/windowPopup/model/popupTheme.ts",
);
test("SN의 5개 테마와 기존 dark 별칭을 WindowPopup 계약으로 제한", () => {
for (const theme of ["white", "blue", "green", "red", "black"]) {
assert.equal(popupTheme.resolveWindowPopupTheme(theme), theme);
}
assert.equal(popupTheme.resolveWindowPopupTheme("dark"), "black");
assert.equal(popupTheme.resolveWindowPopupTheme("unknown"), undefined);
});
test("분석도구·SN 폼 컨트롤·페이징의 테마 계약 유지", () => {
const analysisMenu = fs.readFileSync(
path.join(
root,
"app/(map-layout)/map/components/analysisMenu/AnalysisPopupMenu.tsx",
),
"utf8",
);
const standardTableCss = fs.readFileSync(
path.resolve(
root,
"../../packages/common/business_components/src/ui/standard_data_table/standard-data-table.css",
),
"utf8",
);
const popupCss = fs.readFileSync(
path.join(root, "src/app/styles/components.css"),
"utf8",
);
const procSearchBar = fs.readFileSync(
path.resolve(
root,
"../../packages/common/business_components/src/ui/map/searchBar/procSearchBar.tsx",
),
"utf8",
);
const buttonCss = fs.readFileSync(
path.resolve(
root,
"../../packages/common/components/src/ui/button/button.css",
),
"utf8",
);
assert.doesNotMatch(analysisMenu, /bg-white/);
assert.doesNotMatch(analysisMenu, /ring-\[#0279FA\]/);
assert.match(analysisMenu, /bg-background text-label/);
assert.match(analysisMenu, /ring-primary/);
assert.match(standardTableCss, /background: var\(--background\) !important/);
assert.match(standardTableCss, /color: var\(--foreground\) !important/);
assert.doesNotMatch(
popupCss,
/\.standard-popup-layout button\[role="button"\]\.white/,
);
assert.doesNotMatch(procSearchBar, /!bg-white/);
assert.match(procSearchBar, /!bg-form/);
assert.match(procSearchBar, /!text-foreground/);
assert.match(
popupCss,
/\[data-theme="black"\][\s\S]*button\[role="combobox"\][\s\S]*background-color: var\(--form\) !important/,
);
assert.match(
popupCss,
/button\[role="combobox"\]:disabled[\s\S]*background-color: var\(--field\) !important/,
);
assert.match(
popupCss,
/input\[type="text"\][\s\S]*textarea[\s\S]*background-color: var\(--form\) !important/,
);
assert.match(
popupCss,
/input\[readonly\][\s\S]*textarea\[readonly\][\s\S]*background-color: var\(--field\) !important/,
);
assert.match(
buttonCss,
/button\[role="button"\]\.white[\s\S]*bg-\[rgba\(255,255,255,1\)\]/,
);
});