1 | import React from 'react';
|
2 | import { render, screen } from '@testing-library/react';
|
3 | import '@testing-library/jest-dom';
|
4 | import { Col } from '..';
|
5 |
|
6 | describe('Col', () => {
|
7 | it('should render default .col markup', () => {
|
8 | render(<Col data-testid="col" />);
|
9 |
|
10 | expect(screen.getByTestId('col')).toHaveClass('col');
|
11 | });
|
12 |
|
13 | it('should render children', () => {
|
14 | render(<Col data-testid="col">Children</Col>);
|
15 |
|
16 | expect(screen.getByText(/children/i)).toBeInTheDocument();
|
17 | });
|
18 |
|
19 | it('should pass additional classNames', () => {
|
20 | render(<Col className="extra" data-testid="col" />);
|
21 |
|
22 | expect(screen.getByTestId('col')).toHaveClass('extra');
|
23 | });
|
24 |
|
25 | it('should allow custom columns to be defined', () => {
|
26 | render(
|
27 | <Col widths={['base', 'jumbo']} base="4" jumbo="6" data-testid="col" />,
|
28 | );
|
29 |
|
30 | expect(screen.getByTestId('col')).toHaveClass('col-4');
|
31 | expect(screen.getByTestId('col')).toHaveClass('col-jumbo-6');
|
32 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
33 | });
|
34 |
|
35 | it('should allow custom columns to be defined with objects', () => {
|
36 | render(
|
37 | <Col
|
38 | widths={['base', 'jumbo', 'spaceship']}
|
39 | spaceship={{ size: 1, order: 2, offset: 4 }}
|
40 | data-testid="col"
|
41 | />,
|
42 | );
|
43 |
|
44 | expect(screen.getByTestId('col')).toHaveClass('col-spaceship-1');
|
45 | expect(screen.getByTestId('col')).toHaveClass('order-spaceship-2');
|
46 | expect(screen.getByTestId('col')).toHaveClass('offset-spaceship-4');
|
47 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
48 | });
|
49 |
|
50 | it('should pass col size specific classes as Strings', () => {
|
51 | render(<Col sm="6" data-testid="col" />);
|
52 |
|
53 | expect(screen.getByTestId('col')).toHaveClass('col-sm-6');
|
54 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
55 | });
|
56 |
|
57 | it('should pass col size specific classes as Numbers', () => {
|
58 | render(<Col sm={6} data-testid="col" />);
|
59 |
|
60 | expect(screen.getByTestId('col')).toHaveClass('col-sm-6');
|
61 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
62 | });
|
63 |
|
64 | it('should pass col size as flex with values "auto" or without value', () => {
|
65 | render(<Col xs="auto" sm data-testid="col" />);
|
66 |
|
67 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
68 | expect(screen.getByTestId('col')).toHaveClass('col-auto');
|
69 | expect(screen.getByTestId('col')).toHaveClass('col-sm');
|
70 | });
|
71 |
|
72 | it('should pass col size specific classes via Objects', () => {
|
73 | render(<Col sm={{ size: 6, order: 2, offset: 2 }} data-testid="col" />);
|
74 |
|
75 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
76 | expect(screen.getByTestId('col')).toHaveClass('col-sm-6');
|
77 | expect(screen.getByTestId('col')).toHaveClass('order-sm-2');
|
78 | expect(screen.getByTestId('col')).toHaveClass('offset-sm-2');
|
79 | });
|
80 |
|
81 | it('should pass col size specific classes via Objects including 0', () => {
|
82 | render(<Col sm={{ size: 6, order: 0, offset: 0 }} data-testid="col" />);
|
83 |
|
84 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
85 | expect(screen.getByTestId('col')).toHaveClass('col-sm-6');
|
86 | expect(screen.getByTestId('col')).toHaveClass('order-sm-0');
|
87 | expect(screen.getByTestId('col')).toHaveClass('offset-sm-0');
|
88 | });
|
89 |
|
90 | it('should pass col size when passing via object with size "auto"', () => {
|
91 | render(<Col sm={{ size: 'auto', offset: 2 }} data-testid="col" />);
|
92 |
|
93 | expect(screen.getByTestId('col')).toHaveClass('col-sm-auto');
|
94 | expect(screen.getByTestId('col')).not.toHaveClass('col');
|
95 | });
|
96 |
|
97 | it('should render custom tag', () => {
|
98 | render(<Col tag="main">Yo!</Col>);
|
99 |
|
100 | expect(screen.getByText(/yo!/i).tagName.toLowerCase()).toBe('main');
|
101 | });
|
102 | });
|