import React from 'react';
import { describe, expect, it, vi } from 'vitest';
import { render } from '@testing-library/react';
vi.mock('react-i18next', () => ({
useTranslation: () => ({ t: (key: string, fallback?: string) => fallback ?? key, i18n: { language: 'en-GB' } }),
}));
vi.mock('@tamagui/react-native-web-lite', () => ({
Pressable: ({ children, onPress, ...props }: { children: React.ReactNode; onPress?: () => void }) => (
),
}));
vi.mock('tamagui', () => {
const Stack = ({ children, ...props }: { children: React.ReactNode }) =>
{children}
;
const Text = ({ children, ...props }: { children: React.ReactNode }) => {children};
const Switch = ({ children }: { children?: React.ReactNode }) => {children}
;
Switch.Thumb = () => ;
const ListItem = ({ title, iconAfter, ...props }: { title?: React.ReactNode; iconAfter?: React.ReactNode }) => (
{title}
{iconAfter}
);
const YGroup: any = ({ children }: { children: React.ReactNode }) => {children}
;
YGroup.Item = ({ children }: { children: React.ReactNode }) => {children}
;
return {
XStack: Stack,
YStack: Stack,
SizableText: Text,
ListItem,
YGroup,
Switch,
Separator: ({ children }: { children?: React.ReactNode }) => {children}
,
};
});
vi.mock('../FormControls', () => ({
MobileSelect: ({ children }: { children: React.ReactNode }) => ,
}));
vi.mock('@/hooks/use-appearance', () => ({
useAppearance: () => ({
appearance: 'system',
resolved: 'light',
updateAppearance: vi.fn(),
}),
}));
vi.mock('../../theme', () => ({
useAdminTheme: () => ({
overlay: 'rgba(0,0,0,0.3)',
surface: '#ffffff',
border: '#e5e7eb',
textStrong: '#111827',
muted: '#6b7280',
surfaceMuted: '#f3f4f6',
accentSoft: '#fef2f2',
primary: '#FF5A5F',
glassShadow: 'rgba(15,23,42,0.14)',
shadow: 'rgba(0,0,0,0.12)',
}),
}));
import { UserMenuSheet } from '../UserMenuSheet';
const baseProps = {
onClose: vi.fn(),
user: { name: 'Ada Lovelace', email: 'ada@example.com' },
isMember: false,
navigate: vi.fn(),
};
describe('UserMenuSheet', () => {
it('slides in when open', () => {
const { getByTestId } = render();
expect(getByTestId('user-menu-sheet-panel').style.transform).toBe('translateX(0px)');
});
it('slides out when closed', () => {
const { getByTestId } = render();
expect(getByTestId('user-menu-sheet-panel').style.transform).toMatch(/translateX\(\d+px\)/);
});
});