import { fireEvent, render, screen } from '@testing-library/react';
import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest';
import { useDisconnect } from 'wagmi';
import type { Connector } from 'wagmi';
import { WalletDropdownDisconnect } from './WalletDropdownDisconnect';
vi.mock('wagmi', () => ({
useDisconnect: vi.fn(),
}));
describe('WalletDropdownDisconnect', () => {
// @ts-expect-error - will mock rest of connector later
const fakeConnectors: Connector[] = [{ id: 'mockConnector' }];
const mockUseDisconnect = useDisconnect as Mock;
const mockDisconnect = vi.fn();
beforeEach(() => {
vi.clearAllMocks();
mockUseDisconnect.mockReturnValue({
disconnect: mockDisconnect,
connectors: fakeConnectors,
});
});
it('renders correctly with default props', () => {
render();
expect(
screen.getByText('Disconnect', { selector: 'span' }),
).toBeInTheDocument();
expect(screen.getByRole('button')).toBeInTheDocument();
});
it('renders correctly with custom text', () => {
render();
expect(screen.getByText('Log Out')).toBeInTheDocument();
});
it('calls disconnect on button click', () => {
render();
const button = screen.getByRole('button');
fireEvent.click(button);
mockUseDisconnect.mockReturnValue({
disconnect: mockDisconnect,
connectors: fakeConnectors,
});
expect(mockDisconnect).toHaveBeenCalledWith({
connector: fakeConnectors[0],
});
});
});