UNPKG

3.63 kBJavaScriptView Raw
1import React from 'react';
2import { render, screen } from '@testing-library/react';
3import '@testing-library/jest-dom';
4import { Col } from '..';
5
6describe('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});