From f6e6cf375084baf42520624f40315dbaef0f2c6f Mon Sep 17 00:00:00 2001 From: garronej Date: Sun, 16 Apr 2023 02:36:15 +0200 Subject: [PATCH] Better typing for createGetKcContext --- src/account/kcContext/createGetKcContext.ts | 12 ++++++++---- src/login/kcContext/createGetKcContext.ts | 12 ++++++++---- test/lib/createGetKcContext.spec.ts | 18 +++++++++++++++--- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/account/kcContext/createGetKcContext.ts b/src/account/kcContext/createGetKcContext.ts index dcfce627..1431d773 100644 --- a/src/account/kcContext/createGetKcContext.ts +++ b/src/account/kcContext/createGetKcContext.ts @@ -15,10 +15,14 @@ export function createGetKcContext["pageId"] = ExtendKcContext["pageId"]>(params?: { + function getKcContext["pageId"]>(params?: { mockPageId?: PageId; storyParams?: DeepPartial, { pageId: PageId }>>; - }): { kcContext: Extract, { pageId: PageId }> | undefined } { + }): { + kcContext: ExtendKcContext["pageId"] extends PageId + ? ExtendKcContext | undefined + : Extract, { pageId: PageId }>; + } { const { mockPageId, storyParams } = params ?? {}; const realKcContext = getKcContextFromWindow(); @@ -86,11 +90,11 @@ export function createGetKcContext(accountThemePageIds).indexOf(realKcContext.pageId) < 0 && !("account" in realKcContext)) { - return { "kcContext": undefined }; + return { "kcContext": undefined as any }; } { diff --git a/src/login/kcContext/createGetKcContext.ts b/src/login/kcContext/createGetKcContext.ts index 92b30e15..a90d2463 100644 --- a/src/login/kcContext/createGetKcContext.ts +++ b/src/login/kcContext/createGetKcContext.ts @@ -18,10 +18,14 @@ export function createGetKcContext["pageId"] = ExtendKcContext["pageId"]>(params?: { + function getKcContext["pageId"]>(params?: { mockPageId?: PageId; storyParams?: DeepPartial, { pageId: PageId }>>; - }): { kcContext: Extract, { pageId: PageId }> | undefined } { + }): { + kcContext: ExtendKcContext["pageId"] extends PageId + ? ExtendKcContext | undefined + : Extract, { pageId: PageId }>; + } { const { mockPageId, storyParams } = params ?? {}; const realKcContext = getKcContextFromWindow(); @@ -144,11 +148,11 @@ export function createGetKcContext(loginThemePageIds).indexOf(realKcContext.pageId) < 0 && !("login" in realKcContext)) { - return { "kcContext": undefined }; + return { "kcContext": undefined as any }; } { diff --git a/test/lib/createGetKcContext.spec.ts b/test/lib/createGetKcContext.spec.ts index dab5cb28..a31250ec 100644 --- a/test/lib/createGetKcContext.spec.ts +++ b/test/lib/createGetKcContext.spec.ts @@ -214,7 +214,7 @@ describe("createGetKcContext", () => { "mockPageId": pageId }); - assert>(); + assert>(); assert(same(deepClone(kcContext), deepClone(kcContextMocks.find(({ pageId: pageId_i }) => pageId_i === pageId)!))); }); @@ -228,7 +228,7 @@ describe("createGetKcContext", () => { assert(kcContext === undefined); }); - it("mock are properly overwriten", () => { + it("mock are properly overwritten", () => { const { getKcContext } = createGetKcContext(); const displayName = "myDisplayName"; @@ -242,8 +242,20 @@ describe("createGetKcContext", () => { } }); - assert>(); + assert>(); assert(kcContext?.realm.displayName === displayName); }); + + it("mockPageId doesn't have to be a singleton", () => { + const { getKcContext } = createGetKcContext(); + + const mockPageId: "login.ftl" | "register.ftl" = "login.ftl" as any; + + const { kcContext } = getKcContext({ + mockPageId + }); + + assert>(); + }); });