auth-management.integration.test.tsx 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import React from 'react';
  2. import { describe, it, expect, vi, beforeEach } from 'vitest';
  3. import { screen, fireEvent, waitFor } from '@testing-library/react';
  4. import { AuthManagement } from '../../src/components/AuthManagement';
  5. import { LoginPage } from '../../src/components/LoginPage';
  6. import { renderWithProviders } from '../test-utils';
  7. // Mock dependencies
  8. vi.mock('react-router', () => ({
  9. useNavigate: () => vi.fn(),
  10. }));
  11. vi.mock('sonner', () => ({
  12. toast: {
  13. success: vi.fn(),
  14. error: vi.fn(),
  15. },
  16. }));
  17. // Mock shared UI components - 简化mock避免复杂渲染问题
  18. vi.mock('@d8d/shared-ui-components', () => ({
  19. Button: ({ children, ...props }: any) => React.createElement('button', { ...props, 'data-testid': 'button' }, children),
  20. Card: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card' }, children),
  21. CardContent: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-content' }, children),
  22. CardDescription: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-description' }, children),
  23. CardFooter: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-footer' }, children),
  24. CardHeader: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-header' }, children),
  25. CardTitle: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-title' }, children),
  26. Form: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form' }, children),
  27. FormControl: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-control' }, children),
  28. FormField: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-field' }, children),
  29. FormItem: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-item' }, children),
  30. FormLabel: ({ children, ...props }: any) => React.createElement('label', { ...props, 'data-testid': 'form-label' }, children),
  31. FormMessage: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-message' }, children),
  32. Input: ({ ...props }: any) => React.createElement('input', { ...props, 'data-testid': 'input' }),
  33. }));
  34. describe('AuthManagement Integration', () => {
  35. beforeEach(() => {
  36. vi.clearAllMocks();
  37. });
  38. it('应该渲染默认登录页面', () => {
  39. renderWithProviders(React.createElement(AuthManagement));
  40. // 验证基本组件结构
  41. expect(screen.getByTestId('card')).toBeInTheDocument();
  42. expect(screen.getByTestId('form')).toBeInTheDocument();
  43. expect(screen.getByTestId('button')).toBeInTheDocument();
  44. });
  45. it('应该支持自定义子组件', () => {
  46. const CustomComponent = () => React.createElement('div', { 'data-testid': 'custom-component' }, 'Custom Auth Component');
  47. renderWithProviders(
  48. React.createElement(AuthManagement, null,
  49. React.createElement(CustomComponent)
  50. )
  51. );
  52. expect(screen.getByTestId('custom-component')).toBeInTheDocument();
  53. });
  54. it('应该支持自定义登录页面', () => {
  55. const CustomLoginPage = () => React.createElement('div', { 'data-testid': 'custom-login-page' }, 'Custom Login Page');
  56. renderWithProviders(React.createElement(AuthManagement, { customLoginPage: CustomLoginPage }));
  57. expect(screen.getByTestId('custom-login-page')).toBeInTheDocument();
  58. });
  59. });