From d847ac276cac89dfe1c547035999b6baf7141567 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Tue, 3 Mar 2026 12:07:57 +0100 Subject: [PATCH] nicolium: do not run migrations in test env MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- .../src/storage/migrate-legacy-data.ts | 12 ++-- .../tests/components/ui/toast.test.tsx | 62 +++++++++++++++++++ 2 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 packages/nicolium/tests/components/ui/toast.test.tsx diff --git a/packages/nicolium/src/storage/migrate-legacy-data.ts b/packages/nicolium/src/storage/migrate-legacy-data.ts index 4fffe4892..53b341021 100644 --- a/packages/nicolium/src/storage/migrate-legacy-data.ts +++ b/packages/nicolium/src/storage/migrate-legacy-data.ts @@ -8,7 +8,7 @@ import localforage from 'localforage'; import trim from 'lodash/trim'; -import { FE_SUBDIRECTORY } from '@/build-config'; +import { FE_SUBDIRECTORY, NODE_ENV } from '@/build-config'; // synchronous localStorage migrations @@ -48,8 +48,12 @@ const migratePushNotificationSettings = () => { } }; -migrateAuthStorage(); -migratePushNotificationSettings(); +const shouldMigrateLegacyData = NODE_ENV !== 'test'; + +if (shouldMigrateLegacyData) { + migrateAuthStorage(); + migratePushNotificationSettings(); +} // async migrations @@ -90,6 +94,6 @@ const migrateIndexedDB = async () => { } }; -const migrationComplete = migrateIndexedDB(); +const migrationComplete = shouldMigrateLegacyData ? migrateIndexedDB() : Promise.resolve(); export { migrationComplete }; diff --git a/packages/nicolium/tests/components/ui/toast.test.tsx b/packages/nicolium/tests/components/ui/toast.test.tsx new file mode 100644 index 000000000..cc12d495f --- /dev/null +++ b/packages/nicolium/tests/components/ui/toast.test.tsx @@ -0,0 +1,62 @@ +import { render, screen } from '@testing-library/react'; +import React from 'react'; +import { IntlProvider } from 'react-intl'; +import { describe, expect, it, vi } from 'vitest'; + +import Toast from '@/components/ui/toast'; + +import type { Toast as RHToast } from 'react-hot-toast'; + +vi.mock('@/components/ui/icon', () => ({ + default: (props: { className?: string }) => ( + + ), +})); + +const createToast = (id: string): RHToast => + ({ + id, + visible: true, + }) as RHToast; + +describe('Toast accessibility', () => { + it('uses polite status live-region semantics for non-error toasts', () => { + render( + + + , + ); + + const toast = screen.getByTestId('toast'); + + expect(toast).toHaveAttribute('role', 'status'); + expect(toast).toHaveAttribute('aria-live', 'polite'); + expect(toast).toHaveAttribute('aria-atomic', 'true'); + expect(toast).toHaveAttribute( + 'aria-describedby', + 'toast-message-success-toast toast-summary-success-toast', + ); + + expect(screen.getByRole('button', { name: 'Close' })).toBeInTheDocument(); + }); + + it('uses assertive alert semantics for error toasts', () => { + render( + + + , + ); + + const toast = screen.getByTestId('toast'); + + expect(toast).toHaveAttribute('role', 'alert'); + expect(toast).toHaveAttribute('aria-live', 'assertive'); + expect(toast).toHaveAttribute('aria-atomic', 'true'); + expect(toast).toHaveAttribute('aria-describedby', 'toast-message-error-toast'); + }); +});