auth-management.integration.test.tsx 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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策略避免React警告
  18. vi.mock('@d8d/shared-ui-components', () => ({
  19. Button: ({ children, ...props }: any) => {
  20. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  21. return React.createElement('button', { ...safeProps, 'data-testid': 'button' }, children);
  22. },
  23. Card: ({ children, ...props }: any) => {
  24. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  25. return React.createElement('div', { ...safeProps, 'data-testid': 'card' }, children);
  26. },
  27. CardContent: ({ children, ...props }: any) => {
  28. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  29. return React.createElement('div', { ...safeProps, 'data-testid': 'card-content' }, children);
  30. },
  31. CardDescription: ({ children, ...props }: any) => {
  32. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  33. return React.createElement('div', { ...safeProps, 'data-testid': 'card-description' }, children);
  34. },
  35. CardFooter: ({ children, ...props }: any) => {
  36. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  37. return React.createElement('div', { ...safeProps, 'data-testid': 'card-footer' }, children);
  38. },
  39. CardHeader: ({ children, ...props }: any) => {
  40. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  41. return React.createElement('div', { ...safeProps, 'data-testid': 'card-header' }, children);
  42. },
  43. CardTitle: ({ children, ...props }: any) => {
  44. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  45. return React.createElement('div', { ...safeProps, 'data-testid': 'card-title' }, children);
  46. },
  47. Form: ({ children, ...props }: any) => {
  48. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  49. return React.createElement('div', { ...safeProps, 'data-testid': 'form' }, children);
  50. },
  51. FormControl: ({ children, ...props }: any) => {
  52. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  53. return React.createElement('div', { ...safeProps, 'data-testid': 'form-control' }, children);
  54. },
  55. FormField: ({ children, ...props }: any) => {
  56. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  57. return React.createElement('div', { ...safeProps, 'data-testid': 'form-field' }, children);
  58. },
  59. FormItem: ({ children, ...props }: any) => {
  60. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  61. return React.createElement('div', { ...safeProps, 'data-testid': 'form-item' }, children);
  62. },
  63. FormLabel: ({ children, ...props }: any) => {
  64. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  65. return React.createElement('label', { ...safeProps, 'data-testid': 'form-label' }, children);
  66. },
  67. FormMessage: ({ children, ...props }: any) => {
  68. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  69. return React.createElement('div', { ...safeProps, 'data-testid': 'form-message' }, children);
  70. },
  71. Input: ({ ...props }: any) => {
  72. const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
  73. return React.createElement('input', { ...safeProps, 'data-testid': 'input' });
  74. },
  75. }));
  76. describe('AuthManagement Integration', () => {
  77. beforeEach(() => {
  78. vi.clearAllMocks();
  79. });
  80. it('应该渲染默认登录页面', () => {
  81. renderWithProviders(React.createElement(AuthManagement));
  82. // 验证基本组件结构
  83. expect(screen.getByTestId('card')).toBeInTheDocument();
  84. expect(screen.getByTestId('form')).toBeInTheDocument();
  85. expect(screen.getByTestId('button')).toBeInTheDocument();
  86. });
  87. it('应该支持自定义子组件', () => {
  88. const CustomComponent = () => React.createElement('div', { 'data-testid': 'custom-component' }, 'Custom Auth Component');
  89. renderWithProviders(
  90. React.createElement(AuthManagement, null,
  91. React.createElement(CustomComponent)
  92. )
  93. );
  94. expect(screen.getByTestId('custom-component')).toBeInTheDocument();
  95. });
  96. it('应该支持自定义登录页面', () => {
  97. const CustomLoginPage = () => React.createElement('div', { 'data-testid': 'custom-login-page' }, 'Custom Login Page');
  98. renderWithProviders(React.createElement(AuthManagement, { customLoginPage: CustomLoginPage }));
  99. expect(screen.getByTestId('custom-login-page')).toBeInTheDocument();
  100. });
  101. });