import SelfStatus from '@/components/selfStatus/selfStatus';
import { render, screen } from '@testing-library/react';
import { useSelector } from 'react-redux';
import React from 'react';
import '@testing-library/jest-dom';
import { useAppSelector } from '@/hooks/store';

jest.mock('@/hooks/request', () => ({
    useApi: jest.fn(),
  }));
  // 模拟所有外部依赖
  jest.mock('@/hooks/store', () => ({
    useAppDispatch: jest.fn(),
    useAppSelector: jest.fn(),
  }));
  
  jest.mock('react-router', () => ({
    useNavigate: jest.fn(),
  }));
  
  jest.mock('react-redux', () => ({
    useSelector: jest.fn(),
  }));


describe('SelfStatus Component', () => {
    it('renders correctly', () => {
        (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
            user: {
                userId: '001',
                userName: 'san3yuan',
                role: 'manager',
                uploadTraffic: 0,
                downloadTraffic: 0,
                downloadPoints: 0,
            },
            setting: {
                theme: 'light',
            },
        }));
        
        render(<SelfStatus />);
        
        expect(screen.getByText('san3yuan')).toBeInTheDocument();
        expect(screen.getByText('用户组: manager')).toBeInTheDocument();
        expect(screen.getByText('上传量: 0')).toBeInTheDocument();
        expect(screen.getByText('下载量: 0')).toBeInTheDocument();
        expect(screen.getByText('下载积分: 0')).toBeInTheDocument();
    })
    it('calculates and displays share ratio correctly', () => {
        (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
            user: {
                uploadTraffic: 100,
                downloadTraffic: 50,
            },
        }));
        render(<SelfStatus />);
        expect(screen.getByText('分享率: 2.00')).toBeInTheDocument();
    });
    it('handles empty data gracefully', () => {
        (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
            user: {
                userName: '',
                role: '',
                uploadTraffic: null,
                downloadTraffic: null,
                downloadPoints: null,
            },
        }));
        render(<SelfStatus />);
        expect(screen.getByText('用户组: N/A')).toBeInTheDocument();
        expect(screen.getByText('上传量: 0')).toBeInTheDocument();
        expect(screen.getByText('下载量: 0')).toBeInTheDocument();        
        expect(screen.getByText('分享率: N/A')).toBeInTheDocument();
        expect(screen.getByText('下载积分: 0')).toBeInTheDocument();
    });
});