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');
+ });
+});