import '@testing-library/jest-dom';
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import type { Token } from '../types';
import { TokenRow } from './TokenRow';
const EXAMPLE_TOKEN: Token = {
address: '0x1234',
chainId: 1,
decimals: 18,
image:
'https://dynamic-assets.coinbase.com/dbb4b4983bde81309ddab83eb598358eb44375b930b94687ebe38bc22e52c3b2125258ffb8477a5ef22e33d6bd72e32a506c391caa13af64c00e46613c3e5806/asset_icons/4113b082d21cc5fab17fc8f2d19fb996165bcce635e6900f7fc2d57c4ef33ae9.png',
name: 'Ether',
symbol: 'ETH',
};
describe('TokenRow component', () => {
it('should render a circle if token.image is null', async () => {
const token = {
...EXAMPLE_TOKEN,
image: null,
};
render();
await waitFor(() => {
const circle = screen.getByTestId('ockTokenImage_NoImage');
expect(circle).toBeInTheDocument();
});
});
it('should render the image if token.image is provided', async () => {
render();
await waitFor(() => {
const tokenImage = screen.getByTestId('ockTokenImage_Image');
expect(tokenImage).toBeInTheDocument();
});
});
it('should not render amount if amount is undefined', async () => {
render();
await waitFor(() => {
const tokenAmount = screen.getByTestId('ockTokenRow_Amount');
expect(tokenAmount.textContent).toEqual('');
});
});
it('should render amount with 5 maximum decimal if less than 1', async () => {
render();
await waitFor(() => {
const tokenAmount = screen.getByTestId('ockTokenRow_Amount');
expect(tokenAmount.textContent).toEqual('0.00235');
});
});
it('should render amount with 2 maximum fraction digit if greater than 1', async () => {
render();
await waitFor(() => {
const tokenAmount = screen.getByTestId('ockTokenRow_Amount');
expect(tokenAmount.textContent).toEqual('100.12');
});
});
it('should render amount with 2 maximum fraction digit if equal to 1', async () => {
render();
await waitFor(() => {
const tokenAmount = screen.getByTestId('ockTokenRow_Amount');
expect(tokenAmount.textContent).toEqual('1.00');
});
});
it('should register a click on press', async () => {
const handleClick = vi.fn();
render();
const tokenRow = screen.getByTestId('ockTokenRow_Container');
fireEvent.click(tokenRow);
expect(handleClick).toHaveBeenCalledTimes(1);
});
});