import { composeStories } from '@storybook/testing-react';
import { render, screen } from '@testing-library/react';
import React from 'react';
import color from '../../styles/colors';
import * as stories from './Select.stories';
const {
Default,
NoDefaultIndexOption,
Error,
Confirmed,
Disabled,
ErrorWithMessage,
} = composeStories(stories);
const testLabelId = 'test-label';
const testWrapperId = 'test-wrapper';
const testSelectedId = 'test-selected';
const testTextContent = 'triangleDown icon';
test('Select - Default', async () => {
const testLabel = Default?.args?.label;
render();
// renders the component
const select = screen.getByTestId(testWrapperId) as unknown as HTMLDivElement | null;
expect(select).not.toBeNull();
// renders select without selected option 0 index
const selected = screen.getByTestId(testSelectedId) as unknown as HTMLDivElement | null;
expect(selected).not.toBeNull();
selected && expect(selected.textContent).toContain(testTextContent);
// renders select correct colors
const styles = selected && getComputedStyle(selected);
expect(styles?.borderColor.toUpperCase()).toBe(color.greyLight);
// renders label text
const label = screen.getByTestId(testLabelId);
expect(label).not.toBeNull();
expect(label?.textContent).toBe(testLabel);
});
test('Select - NoDefaultIndexOption', async () => {
const testLabel = NoDefaultIndexOption?.args?.label;
render();
// renders the component
const select = screen.getByTestId(testWrapperId) as unknown as HTMLDivElement | null;
expect(select).not.toBeNull();
// renders select without selected option 0 index
const selected = screen.getByTestId(testSelectedId) as unknown as HTMLDivElement | null;
expect(selected).not.toBeNull();
selected && expect(selected.textContent).toContain(testTextContent);
// renders select correct colors
const styles = selected && getComputedStyle(selected);
expect(styles?.borderColor.toUpperCase()).toBe(color.greyLight);
// renders label text
const label = screen.getByTestId(testLabelId);
expect(label).not.toBeNull();
expect(label?.textContent).toBe(testLabel);
});
test('Select - Error', async () => {
const testLabel = Error?.args?.label;
const testOptions = Error?.args?.options;
render();
// renders the component
const select = screen.getByTestId(testWrapperId) as unknown as HTMLDivElement | null;
expect(select).not.toBeNull();
// renders select without selected option 0 index
const selected = screen.getByTestId(testSelectedId) as unknown as HTMLDivElement | null;
expect(selected).not.toBeNull();
selected && expect(selected.textContent).toContain(testOptions?.[0]?.['label']);
// renders select correct colors
const styles = selected && getComputedStyle(selected);
expect(styles?.borderColor.toUpperCase()).toBe(color.red);
// renders label text
const label = screen.getByTestId(testLabelId);
expect(label).not.toBeNull();
expect(label?.textContent).toBe(testLabel);
});
test('Select - ErrorWithMessage', async () => {
const testLabel = ErrorWithMessage?.args?.label;
const testOptions = ErrorWithMessage?.args?.options;
render();
// renders the component
const select = screen.getByTestId(testWrapperId) as unknown as HTMLDivElement | null;
expect(select).not.toBeNull();
// renders select without selected option 0 index
const selected = screen.getByTestId(testSelectedId) as unknown as HTMLDivElement | null;
expect(selected).not.toBeNull();
selected && expect(selected.textContent).toContain(testOptions?.[0]?.['label']);
// renders select correct colors
const styles = selected && getComputedStyle(selected);
expect(styles?.borderColor.toUpperCase()).toBe(color.red);
// renders label text
const label = screen.getByTestId(testLabelId);
expect(label).not.toBeNull();
expect(label?.textContent).toBe(testLabel);
});
test('Select - Confirmed', async () => {
const testLabel = Confirmed?.args?.label;
const testOptions = Confirmed?.args?.options;
render();
// renders the component
const select = screen.getByTestId(testWrapperId) as unknown as HTMLDivElement | null;
expect(select).not.toBeNull();
// renders select without selected option 0 index
const selected = screen.getByTestId(testSelectedId) as unknown as HTMLDivElement | null;
expect(selected).not.toBeNull();
selected && expect(selected.textContent).toContain(testOptions?.[0]?.['label']);
// renders select correct colors
const styles = selected && getComputedStyle(selected);
expect(styles?.borderColor.toUpperCase()).toBe(color.green);
// renders label text
const label = screen.getByTestId(testLabelId);
expect(label).not.toBeNull();
expect(label?.textContent).toBe(testLabel);
});
test('Select - Disabled', async () => {
const testLabel = Disabled?.args?.label;
const testOptions = Disabled?.args?.options;
render();
// renders the component
const select = screen.getByTestId(testWrapperId) as unknown as HTMLDivElement | null;
expect(select).not.toBeNull();
// renders select without selected option 0 index
const selected = screen.getByTestId(testSelectedId) as unknown as HTMLDivElement | null;
expect(selected).not.toBeNull();
selected && expect(selected.textContent).toContain(testOptions?.[0]?.['label']);
// renders select correct colors
const styles = selected && getComputedStyle(selected);
expect(styles?.borderColor.toUpperCase()).toBe(color.greyDisabled);
// renders label text
const label = screen.getByTestId(testLabelId);
expect(label).not.toBeNull();
expect(label?.textContent).toBe(testLabel);
});