import React from 'react'; import { fireEvent, render, screen } from '@testing-library/react'; import { composeStories } from '@storybook/testing-react'; import * as stories from './CryptoCards.stories'; import rgbToHex from '../../utils/rgbToHex'; import color from '../../styles/colors'; import 'jest-styled-components'; import '@testing-library/jest-dom/extend-expect'; const { Ethereum, Binance, Polygon, Avalanche, Fantom, Arbitrum } = composeStories(stories); const testClickEvent = jest.fn(); const cryptoCardId = 'test-crypto-card'; const buttonId = 'test-button'; const chainNameId = 'test-chain-name'; test('Renders - Ethereum Card', () => { render(); const cryptoCardElement = screen.getByTestId(cryptoCardId); expect(cryptoCardElement).not.toBeNull(); const styles = cryptoCardElement && getComputedStyle(cryptoCardElement); const bgColorHex = styles && rgbToHex(styles.backgroundColor).toUpperCase(); expect(bgColorHex).toBe(color.black); const buttonElement = screen.getByTestId(buttonId); fireEvent.click(buttonElement); expect(testClickEvent).toHaveBeenCalled(); expect(screen.getByTestId(chainNameId).textContent).toBe('Ethereum'); expect(screen.getByTestId('test-icon').textContent).toBe('cog icon'); }); test('Renders - Binance Card', () => { render(); const cryptoCardElement = screen.getByTestId(cryptoCardId); expect(cryptoCardElement).not.toBeNull(); const styles = cryptoCardElement && getComputedStyle(cryptoCardElement); const bgColorHex = styles && rgbToHex(styles.backgroundColor).toUpperCase(); expect(bgColorHex).toBe(color.black); const buttonElement = screen.getByTestId(buttonId); fireEvent.click(buttonElement); expect(testClickEvent).toHaveBeenCalled(); expect(screen.getByTestId(chainNameId).textContent).toBe('Binance'); expect(screen.getByTestId('test-icon').textContent).toBe('cog icon'); }); test('Renders - Polygon Card', () => { render(); const cryptoCardElement = screen.getByTestId(cryptoCardId); expect(cryptoCardElement).not.toBeNull(); const styles = cryptoCardElement && getComputedStyle(cryptoCardElement); const bgColorHex = styles && rgbToHex(styles.backgroundColor).toUpperCase(); expect(bgColorHex).toBe(color.black); const buttonElement = screen.getByTestId(buttonId); fireEvent.click(buttonElement); expect(testClickEvent).toHaveBeenCalled(); expect(screen.getByTestId(chainNameId).textContent).toBe('Polygon'); expect(screen.getByTestId('test-icon').textContent).toBe('cog icon'); }); test('Renders - Avalanche Card', () => { render(); const cryptoCardElement = screen.getByTestId(cryptoCardId); expect(cryptoCardElement).not.toBeNull(); const styles = cryptoCardElement && getComputedStyle(cryptoCardElement); const bgColorHex = styles && rgbToHex(styles.backgroundColor).toUpperCase(); expect(bgColorHex).toBe(color.black); const buttonElement = screen.getByTestId(buttonId); fireEvent.click(buttonElement); expect(testClickEvent).toHaveBeenCalled(); expect(screen.getByTestId(chainNameId).textContent).toBe('Avalanche'); expect(screen.getByTestId('test-icon').textContent).toBe('cog icon'); }); test('Renders - Fantom Card', () => { render(); const cryptoCardElement = screen.getByTestId(cryptoCardId); expect(cryptoCardElement).not.toBeNull(); const styles = cryptoCardElement && getComputedStyle(cryptoCardElement); const bgColorHex = styles && rgbToHex(styles.backgroundColor).toUpperCase(); expect(bgColorHex).toBe(color.black); const buttonElement = screen.getByTestId(buttonId); fireEvent.click(buttonElement); expect(testClickEvent).toHaveBeenCalled(); expect(screen.getByTestId(chainNameId).textContent).toBe('Fantom'); expect(screen.getByTestId('test-icon').textContent).toBe('cog icon'); }); test('Renders - Arbitrum Card', () => { render(); const cryptoCardElement = screen.getByTestId(cryptoCardId); expect(cryptoCardElement).not.toBeNull(); const styles = cryptoCardElement && getComputedStyle(cryptoCardElement); const bgColorHex = styles && rgbToHex(styles.backgroundColor).toUpperCase(); expect(bgColorHex).toBe(color.black); const buttonElement = screen.getByTestId(buttonId); fireEvent.click(buttonElement); expect(testClickEvent).toHaveBeenCalled(); expect(screen.getByTestId(chainNameId).textContent).toBe('Arbitrum'); expect(screen.getByTestId('test-icon').textContent).toBe('cog icon'); });