Minor fixes to the Vitest setup
This commit is contained in:
parent
4ebc1e671f
commit
83b0838c94
8
.gitignore
vendored
8
.gitignore
vendored
@ -41,17 +41,13 @@ jspm_packages
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
/dist
|
/dist
|
||||||
# Test Build Directories
|
|
||||||
/dist_test
|
|
||||||
/sample_react_project/
|
|
||||||
/sample_custom_react_project/
|
|
||||||
/keycloakify_starter_test/
|
/keycloakify_starter_test/
|
||||||
|
/sample_custom_react_project/
|
||||||
|
/sample_react_project/
|
||||||
/.yarn_home/
|
/.yarn_home/
|
||||||
|
|
||||||
.idea
|
.idea
|
||||||
|
|
||||||
/keycloak_email
|
|
||||||
/build_keycloak
|
|
||||||
/src/login/i18n/baseMessages/
|
/src/login/i18n/baseMessages/
|
||||||
/src/account/i18n/baseMessages/
|
/src/account/i18n/baseMessages/
|
||||||
|
|
||||||
|
@ -18,12 +18,12 @@ writeFileSync(path.join(process.cwd(), "dist", "package.json"), JSON.stringify(p
|
|||||||
try {
|
try {
|
||||||
execSync("yarn unlink");
|
execSync("yarn unlink");
|
||||||
} catch {}
|
} catch {}
|
||||||
execSync("yarn link", { cwd: path.join(process.cwd(), "dist") });
|
execSync("yarn link", { "cwd": path.join(process.cwd(), "dist") });
|
||||||
|
|
||||||
// Clone latest keycloakify-starter and link to keycloakify output
|
// Clone latest keycloakify-starter and link to keycloakify output
|
||||||
execSync(`git clone https://github.com/keycloakify/keycloakify-starter.git ${testDir}`);
|
execSync(`git clone https://github.com/keycloakify/keycloakify-starter.git ${testDir}`);
|
||||||
execSync("yarn install", { cwd: path.join(process.cwd(), testDir) });
|
execSync("yarn install", { "cwd": path.join(process.cwd(), testDir) });
|
||||||
execSync("yarn link keycloakify", { cwd: path.join(process.cwd(), testDir) });
|
execSync("yarn link keycloakify", { "cwd": path.join(process.cwd(), testDir) });
|
||||||
|
|
||||||
//Ensure keycloak theme can be built
|
//Ensure keycloak theme can be built
|
||||||
execSync("yarn build-keycloak-theme", { cwd: path.join(process.cwd(), testDir) });
|
execSync("yarn build-keycloak-theme", { "cwd": path.join(process.cwd(), testDir) });
|
||||||
|
@ -19,16 +19,16 @@ const nativeCwd = process.cwd;
|
|||||||
vi.mock("keycloakify/bin/keycloakify/parsed-package-json", async () => ({
|
vi.mock("keycloakify/bin/keycloakify/parsed-package-json", async () => ({
|
||||||
...((await vi.importActual("keycloakify/bin/keycloakify/parsed-package-json")) as Record<string, unknown>),
|
...((await vi.importActual("keycloakify/bin/keycloakify/parsed-package-json")) as Record<string, unknown>),
|
||||||
getParsedPackageJson: () => ({
|
getParsedPackageJson: () => ({
|
||||||
keycloakify: {
|
"keycloakify": {
|
||||||
appInputPath: "./custom_input/build",
|
"appInputPath": "./custom_input/build",
|
||||||
keycloakBuildDir: "./custom_output"
|
"keycloakBuildDir": "./custom_output"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
|
|
||||||
vi.mock("keycloakify/bin/promptKeycloakVersion", async () => ({
|
vi.mock("keycloakify/bin/promptKeycloakVersion", async () => ({
|
||||||
...((await vi.importActual("keycloakify/bin/promptKeycloakVersion")) as Record<string, unknown>),
|
...((await vi.importActual("keycloakify/bin/promptKeycloakVersion")) as Record<string, unknown>),
|
||||||
promptKeycloakVersion: () => ({ keycloakVersion: "11.0.3" })
|
promptKeycloakVersion: () => ({ "keycloakVersion": "11.0.3" })
|
||||||
}));
|
}));
|
||||||
|
|
||||||
describe("Sample Project", () => {
|
describe("Sample Project", () => {
|
||||||
@ -38,6 +38,7 @@ describe("Sample Project", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
afterAll(() => {
|
afterAll(() => {
|
||||||
|
fs.rmSync(sampleReactProjectDirPath, { "recursive": true });
|
||||||
process.cwd = nativeCwd;
|
process.cwd = nativeCwd;
|
||||||
});
|
});
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
@ -35,6 +35,7 @@ describe("Sample Project", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
afterAll(() => {
|
afterAll(() => {
|
||||||
|
fs.rmSync(sampleReactProjectDirPath, { "recursive": true });
|
||||||
process.cwd = nativeCwd;
|
process.cwd = nativeCwd;
|
||||||
});
|
});
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
91
test/lib/tools/AndByDiscriminatingKey.ts
Normal file
91
test/lib/tools/AndByDiscriminatingKey.ts
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
import { AndByDiscriminatingKey } from "keycloakify/tools/AndByDiscriminatingKey";
|
||||||
|
import { assert } from "tsafe/assert";
|
||||||
|
import type { Equals } from "tsafe";
|
||||||
|
|
||||||
|
{
|
||||||
|
type Base = { pageId: "a"; onlyA: string } | { pageId: "b"; onlyB: string } | { pageId: "only base"; onlyBase: string };
|
||||||
|
|
||||||
|
type Extension = { pageId: "a"; onlyExtA: string } | { pageId: "b"; onlyExtB: string } | { pageId: "only ext"; onlyExt: string };
|
||||||
|
|
||||||
|
type Got = AndByDiscriminatingKey<"pageId", Extension, Base>;
|
||||||
|
|
||||||
|
type Expected =
|
||||||
|
| { pageId: "a"; onlyA: string; onlyExtA: string }
|
||||||
|
| { pageId: "b"; onlyB: string; onlyExtB: string }
|
||||||
|
| { pageId: "only base"; onlyBase: string }
|
||||||
|
| { pageId: "only ext"; onlyExt: string };
|
||||||
|
|
||||||
|
assert<Equals<Got, Expected>>();
|
||||||
|
|
||||||
|
const x: Got = null as any;
|
||||||
|
|
||||||
|
if (x.pageId === "a") {
|
||||||
|
x.onlyA;
|
||||||
|
x.onlyExtA;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyB;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyBase;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyExt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x.pageId === "b") {
|
||||||
|
x.onlyB;
|
||||||
|
x.onlyExtB;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyA;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyBase;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyExt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x.pageId === "only base") {
|
||||||
|
x.onlyBase;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyA;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyB;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyExt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x.pageId === "only ext") {
|
||||||
|
x.onlyExt;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyA;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyB;
|
||||||
|
|
||||||
|
//@ts-expect-error
|
||||||
|
x.onlyBase;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
type Base = { pageId: "a"; onlyA: string } | { pageId: "b"; onlyB: string } | { pageId: "only base"; onlyBase: string };
|
||||||
|
|
||||||
|
type Extension = { pageId: "only ext"; onlyExt: string };
|
||||||
|
|
||||||
|
type Got = AndByDiscriminatingKey<"pageId", Extension, Base>;
|
||||||
|
|
||||||
|
type Expected =
|
||||||
|
| { pageId: "a"; onlyA: string }
|
||||||
|
| { pageId: "b"; onlyB: string }
|
||||||
|
| { pageId: "only base"; onlyBase: string }
|
||||||
|
| { pageId: "only ext"; onlyExt: string };
|
||||||
|
|
||||||
|
assert<Equals<Got, Expected>>();
|
||||||
|
}
|
@ -1,94 +0,0 @@
|
|||||||
import { AndByDiscriminatingKey } from "keycloakify/tools/AndByDiscriminatingKey";
|
|
||||||
import { assert } from "tsafe/assert";
|
|
||||||
import type { Equals } from "tsafe";
|
|
||||||
import { it, describe } from "vitest";
|
|
||||||
|
|
||||||
// These test case names are intentionally vague, because I'm not sure what each are testing individually
|
|
||||||
describe("AndByDiscriminatingKey", () => {
|
|
||||||
it("Test Case 1", () => {
|
|
||||||
type Base = { pageId: "a"; onlyA: string } | { pageId: "b"; onlyB: string } | { pageId: "only base"; onlyBase: string };
|
|
||||||
|
|
||||||
type Extension = { pageId: "a"; onlyExtA: string } | { pageId: "b"; onlyExtB: string } | { pageId: "only ext"; onlyExt: string };
|
|
||||||
|
|
||||||
type Got = AndByDiscriminatingKey<"pageId", Extension, Base>;
|
|
||||||
|
|
||||||
type Expected =
|
|
||||||
| { pageId: "a"; onlyA: string; onlyExtA: string }
|
|
||||||
| { pageId: "b"; onlyB: string; onlyExtB: string }
|
|
||||||
| { pageId: "only base"; onlyBase: string }
|
|
||||||
| { pageId: "only ext"; onlyExt: string };
|
|
||||||
|
|
||||||
assert<Equals<Got, Expected>>();
|
|
||||||
|
|
||||||
const x: Got = {} as any;
|
|
||||||
|
|
||||||
if (x.pageId === "a") {
|
|
||||||
x.onlyA;
|
|
||||||
x.onlyExtA;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyB;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyBase;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyExt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x.pageId === "b") {
|
|
||||||
x.onlyB;
|
|
||||||
x.onlyExtB;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyA;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyBase;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyExt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x.pageId === "only base") {
|
|
||||||
x.onlyBase;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyA;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyB;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyExt;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x.pageId === "only ext") {
|
|
||||||
x.onlyExt;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyA;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyB;
|
|
||||||
|
|
||||||
//@ts-expect-error
|
|
||||||
x.onlyBase;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
it("Test Case 2", () => {
|
|
||||||
type Base = { pageId: "a"; onlyA: string } | { pageId: "b"; onlyB: string } | { pageId: "only base"; onlyBase: string };
|
|
||||||
|
|
||||||
type Extension = { pageId: "only ext"; onlyExt: string };
|
|
||||||
|
|
||||||
type Got = AndByDiscriminatingKey<"pageId", Extension, Base>;
|
|
||||||
|
|
||||||
type Expected =
|
|
||||||
| { pageId: "a"; onlyA: string }
|
|
||||||
| { pageId: "b"; onlyB: string }
|
|
||||||
| { pageId: "only base"; onlyBase: string }
|
|
||||||
| { pageId: "only ext"; onlyExt: string };
|
|
||||||
|
|
||||||
assert<Equals<Got, Expected>>();
|
|
||||||
});
|
|
||||||
});
|
|
@ -10,7 +10,7 @@
|
|||||||
"newLine": "LF",
|
"newLine": "LF",
|
||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"noUnusedParameters": true,
|
"noUnusedParameters": true,
|
||||||
"incremental": true,
|
"incremental": false,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
"downlevelIteration": true,
|
"downlevelIteration": true,
|
||||||
"jsx": "react-jsx",
|
"jsx": "react-jsx",
|
||||||
|
@ -3,10 +3,10 @@ import { defineConfig } from "vite";
|
|||||||
import path from "path";
|
import path from "path";
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
test: {
|
"test": {
|
||||||
alias: {
|
"alias": {
|
||||||
"keycloakify": path.resolve(__dirname, "./src")
|
"keycloakify": path.resolve(__dirname, "./src")
|
||||||
},
|
},
|
||||||
watchExclude: ["**/node_modules/**", "**/dist/**", "**/sample_react_project/**", "**/sample_custom_react_project/**"]
|
"watchExclude": ["**/node_modules/**", "**/dist/**", "**/sample_react_project/**", "**/sample_custom_react_project/**"]
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user