import { render, screen } from '@testing-library/react';
import { beforeEach, describe, expect, it, vi } from 'vitest';
import { Connected } from '../';
import { useAccount } from 'wagmi';
vi.mock('wagmi', () => ({
useAccount: vi.fn(),
}));
vi.mock('@/wallet', () => ({
ConnectWallet: () =>
Connect Wallet
,
}));
describe('Connected', () => {
describe('when user is connected', () => {
beforeEach(() => {
(useAccount as ReturnType).mockReturnValue({
isConnected: true,
isConnecting: false,
address: '0x123',
});
});
it('renders children when user is connected', () => {
render(
Connected Content
,
);
expect(screen.getByTestId('connected-content')).toBeInTheDocument();
expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument();
});
});
describe('when user is not connected', () => {
beforeEach(() => {
(useAccount as ReturnType).mockReturnValue({
isConnected: false,
isConnecting: false,
address: undefined,
});
});
it('renders the fallback element when user is not connected', () => {
render(
Connected Content
,
);
expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument();
expect(screen.getByTestId('connect-wallet')).toBeInTheDocument();
});
it('renders custom fallback when provided', () => {
render(
Custom Fallback}
>
Connected Content
,
);
expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument();
expect(screen.getByTestId('custom-fallback')).toBeInTheDocument();
expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument();
});
it('renders nothing when fallback is null', () => {
render(
Connected Content
,
);
expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument();
expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument();
});
});
describe('when user is connecting', () => {
beforeEach(() => {
(useAccount as ReturnType).mockReturnValue({
isConnected: false,
isConnecting: true,
address: undefined,
});
});
it('renders default fallback when connecting prop is not provided', () => {
render(
Connected Content
,
);
expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument();
expect(screen.getByTestId('connect-wallet')).toBeInTheDocument();
});
it('renders connecting element when connecting prop is provided', () => {
render(
Connecting...}
>
Connected Content
,
);
expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument();
expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument();
expect(screen.getByTestId('connecting-state')).toBeInTheDocument();
});
});
});