import { composeStories } from '@storybook/testing-react';
import '@testing-library/jest-dom';
import { render, screen } from '@testing-library/react';
import React from 'react';
import color from '../../styles/colors';
import * as stories from './CodeArea.stories';
const { MultipleLines, OneLine, WithHeader } = composeStories(stories);
const testHeaderId = 'test-codearea-header';
const testLineNumbers = 'test-codearea-linenumbers';
const testTextAreaId = 'test-codearea';
const testWrapperId = 'test-codearea-wrapper';
test('Render - CodeArea Online', () => {
const text = OneLine.args?.text;
render();
const element = screen.getByTestId(testTextAreaId);
expect(element).not.toBeNull();
expect(element?.textContent).toBe(text);
// test line numbers
const lines = (text?.match(/\n/g) || '').length + 1;
expect(screen.getByTestId(testLineNumbers).childElementCount).toBe(lines);
// test border color
const textareaWrapper = screen.getByTestId(testWrapperId) as HTMLDivElement;
const styles = textareaWrapper && getComputedStyle(textareaWrapper);
expect(styles?.borderColor.toUpperCase()).toBe(color.paleBlue2);
});
test('Renders - CodeArea Multiple Lines', () => {
const text = MultipleLines.args?.text;
render();
const element = screen.getByTestId(testTextAreaId);
expect(element).not.toBeNull();
expect(element?.textContent).toBe(text);
// test Line numbers
const lines = (text?.match(/\n/g) || '').length + 1;
expect(screen.getByTestId(testLineNumbers).childElementCount).toBe(lines);
// test border color
const textareaWrapper = screen.getByTestId(testWrapperId) as HTMLDivElement;
const styles = textareaWrapper && getComputedStyle(textareaWrapper);
expect(styles?.borderColor.toUpperCase()).toBe(color.paleBlue2);
});
test('Renders - CodeArea with Header', () => {
const text = WithHeader.args?.text;
render();
const element = screen.getByTestId(testTextAreaId);
expect(element).not.toBeNull();
expect(element.textContent).toBe(text);
// test Line numbers
const lines = (text?.match(/\n/g) || '').length + 1;
expect(screen.getByTestId(testLineNumbers).childElementCount).toBe(lines);
// test header element
expect(screen.getByTestId(testHeaderId)).not.toBeNull();
// test border color
const textareaWrapper = screen.getByTestId(testWrapperId) as HTMLDivElement;
const styles = textareaWrapper && getComputedStyle(textareaWrapper);
expect(styles?.borderColor.toUpperCase()).toBe(color.paleBlue2);
});