From b4f0619c9011cd960b5537b7dcb70eb2f660bc44 Mon Sep 17 00:00:00 2001 From: "Adolfo R. Brandes" Date: Sun, 20 Sep 2026 07:13:31 -0300 Subject: [PATCH 1/2] fix: drop broken i18n export from the package index The atlas-generated messages module is not published to npm, so re-exporting it broke webpack builds in consuming sites. Co-Authored-By: Claude --- src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index 06f624fc..a280a5d8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,2 @@ export { default as adminConsoleApp } from './app'; export { default as adminConsoleRoutes } from './routes'; -export { default as adminConsoleMessages } from './i18n'; From e1792515462068f4901a1a24ca222528a4038537 Mon Sep 17 00:00:00 2001 From: "Adolfo R. Brandes" Date: Sun, 20 Sep 2026 07:21:08 -0300 Subject: [PATCH 2/2] test: use fake timers for the default-delay toast test The test raced a 5000ms auto-dismiss against a 5050ms waitFor timeout, which flaked on slow CI runners. Co-Authored-By: Claude --- .../ToastManager/ToastManagerContext.test.tsx | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/components/ToastManager/ToastManagerContext.test.tsx b/src/components/ToastManager/ToastManagerContext.test.tsx index 2cca737b..ab568095 100644 --- a/src/components/ToastManager/ToastManagerContext.test.tsx +++ b/src/components/ToastManager/ToastManagerContext.test.tsx @@ -1,7 +1,8 @@ -import { screen, waitFor } from '@testing-library/react'; +import { act, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { renderWrapper } from '@src/testUtils'; import { logError } from '@openedx/frontend-base'; +import { DEFAULT_TOAST_DELAY } from '@src/authz-module/constants'; import { ToastManagerProvider, useToastManager } from './ToastManagerContext'; jest.mock('@openedx/frontend-base', () => ({ @@ -23,6 +24,10 @@ const TestComponent = () => { }; describe('ToastManagerContext', () => { + afterEach(() => { + jest.useRealTimers(); + }); + describe('ToastManagerProvider', () => { it('does not show toast initially', () => { renderWrapper( @@ -182,7 +187,8 @@ describe('ToastManagerContext', () => { }); it('uses default delay when delay prop is not provided', async () => { - const user = userEvent.setup(); + jest.useFakeTimers(); + const user = userEvent.setup({ advanceTimers: jest.advanceTimersByTime }); const DefaultDelayTestComponent = () => { const { showToast } = useToastManager(); @@ -207,15 +213,16 @@ describe('ToastManagerContext', () => { const showButton = screen.getByText('Show Toast With Default Delay'); await user.click(showButton); - await waitFor(() => { - expect(screen.getByText('Default delay toast')).toBeInTheDocument(); + expect(screen.getByText('Default delay toast')).toBeInTheDocument(); + + act(() => { + jest.advanceTimersByTime(DEFAULT_TOAST_DELAY); }); - // DEFAULT_TOAST_DELAY is 5000ms await waitFor(() => { expect(screen.queryByText('Default delay toast')).not.toBeInTheDocument(); - }, { timeout: 5050 }); - }, 5100); + }); + }); it('uses longer delay for error toasts with retry functionality', async () => { const user = userEvent.setup();