diff --git a/apps/web/res/css/structures/_SpacePanel.pcss b/apps/web/res/css/structures/_SpacePanel.pcss index 448795a0d4..5b6acf7596 100644 --- a/apps/web/res/css/structures/_SpacePanel.pcss +++ b/apps/web/res/css/structures/_SpacePanel.pcss @@ -125,7 +125,8 @@ Please see LICENSE files in the repository root for full details. align-items: center; padding: 4px 4px 4px 0; width: 100%; - cursor: pointer; + /* Override the unlayered cursor: grab; rule from react-beautiful-dnd */ + cursor: pointer !important; &.mx_SpaceButton_active { &:not(.mx_SpaceButton_narrow) .mx_SpaceButton_selectionWrapper { diff --git a/apps/web/src/utils/oidc/authorize.ts b/apps/web/src/utils/oidc/authorize.ts index 2e1420e32e..18bd910fc1 100644 --- a/apps/web/src/utils/oidc/authorize.ts +++ b/apps/web/src/utils/oidc/authorize.ts @@ -86,7 +86,7 @@ type CompleteOidcLoginResponse = { // refreshToken gained from OIDC token issuer, when falsy token cannot be refreshed refreshToken?: string; // idToken gained from OIDC token issuer - idToken: string; + idToken?: string; // this client's id as registered with the OIDC issuer clientId: string; // issuer used during authentication diff --git a/apps/web/src/utils/oidc/persistOidcSettings.ts b/apps/web/src/utils/oidc/persistOidcSettings.ts index 38426e79cb..63d4515869 100644 --- a/apps/web/src/utils/oidc/persistOidcSettings.ts +++ b/apps/web/src/utils/oidc/persistOidcSettings.ts @@ -25,10 +25,16 @@ const idTokenClaimsStorageKey = "mx_oidc_id_token_claims"; * @param idToken * @param idTokenClaims */ -export const persistOidcAuthenticatedSettings = (clientId: string, issuer: string, idToken: string): void => { +export const persistOidcAuthenticatedSettings = ( + clientId: string, + issuer: string, + idToken: string | undefined, +): void => { localStorage.setItem(clientIdStorageKey, clientId); localStorage.setItem(tokenIssuerStorageKey, issuer); - localStorage.setItem(idTokenStorageKey, idToken); + if (idToken) { + localStorage.setItem(idTokenStorageKey, idToken); + } }; /** diff --git a/apps/web/test/unit-tests/utils/oidc/persistOidcSettings-test.ts b/apps/web/test/unit-tests/utils/oidc/persistOidcSettings-test.ts index 5b81d142b0..86695b4c26 100644 --- a/apps/web/test/unit-tests/utils/oidc/persistOidcSettings-test.ts +++ b/apps/web/test/unit-tests/utils/oidc/persistOidcSettings-test.ts @@ -48,6 +48,13 @@ describe("persist OIDC settings", () => { expect(localStorage.setItem).toHaveBeenCalledWith("mx_oidc_token_issuer", issuer); expect(localStorage.setItem).toHaveBeenCalledWith("mx_oidc_id_token", idToken); }); + + it("should not set idToken in localStorage when idToken is undefined", () => { + persistOidcAuthenticatedSettings(clientId, issuer, undefined); + expect(localStorage.setItem).toHaveBeenCalledWith("mx_oidc_client_id", clientId); + expect(localStorage.setItem).toHaveBeenCalledWith("mx_oidc_token_issuer", issuer); + expect(localStorage.getItem("mx_oidc_id_token")).toBeFalsy(); + }); }); describe("getStoredOidcTokenIssuer()", () => { diff --git a/packages/shared-components/src/core/utils/DateUtils.test.ts b/packages/shared-components/src/core/utils/DateUtils.test.ts index b4438ae2ba..3ae4f81a36 100644 --- a/packages/shared-components/src/core/utils/DateUtils.test.ts +++ b/packages/shared-components/src/core/utils/DateUtils.test.ts @@ -9,6 +9,13 @@ import { describe, it, expect } from "vitest"; import { formatSeconds, formatDateForInput } from "./DateUtils"; +function makeDate(year: number, month: number, day: number): Date { + const date = new Date(0); + date.setFullYear(year, month - 1, day); + date.setHours(0, 0, 0, 0); + return date; +} + describe("formatSeconds", () => { it("correctly formats time with hours", () => { expect(formatSeconds(60 * 60 * 3 + 60 * 31 + 55)).toBe("03:31:55"); @@ -26,10 +33,12 @@ describe("formatSeconds", () => { }); describe("formatDateForInput", () => { - it.each([["1993-11-01"], ["1066-10-14"], ["0571-04-22"], ["0062-02-05"]])( - "should format %s", - (dateString: string) => { - expect(formatDateForInput(new Date(dateString))).toBe(dateString); - }, - ); + it.each([ + ["1993-11-01", makeDate(1993, 11, 1)], + ["1066-10-14", makeDate(1066, 10, 14)], + ["0571-04-22", makeDate(571, 4, 22)], + ["0062-02-05", makeDate(62, 2, 5)], + ])("should format %s", (dateString: string, date: Date) => { + expect(formatDateForInput(date)).toBe(dateString); + }); }); diff --git a/packages/shared-components/vitest.config.ts b/packages/shared-components/vitest.config.ts index 07cbe8c8e9..7000986700 100644 --- a/packages/shared-components/vitest.config.ts +++ b/packages/shared-components/vitest.config.ts @@ -110,6 +110,7 @@ export default mergeConfig( "vite-plugin-node-polyfills/shims/buffer", "vite-plugin-node-polyfills/shims/process", "@vector-im/compound-design-tokens/assets/web/icons", + "storybook/preview-api", ], }, resolve: { diff --git a/packages/vite-common/vite.config.ts b/packages/vite-common/vite.config.ts index f455b2d191..b45cd45912 100644 --- a/packages/vite-common/vite.config.ts +++ b/packages/vite-common/vite.config.ts @@ -56,6 +56,6 @@ export default defineConfig({ reporters, pool: "threads", globals: false, - include: ["src/**/*.test.ts"], + include: ["src/**/*.test.{ts,tsx}"], }, });