1 | import React from 'react';
|
2 | import { screen, render } from '@testing-library/react';
|
3 | import { Label } from '..';
|
4 | import {
|
5 | testForDefaultTag,
|
6 | testForCustomClass,
|
7 | testForChildrenInComponent,
|
8 | testForCustomTag,
|
9 | } from '../testUtils';
|
10 |
|
11 | describe('Label', () => {
|
12 | it('should render a label tag by default', () => {
|
13 | testForDefaultTag(Label, 'label');
|
14 | });
|
15 |
|
16 | it('should render children', () => {
|
17 | testForChildrenInComponent(Label);
|
18 | });
|
19 |
|
20 | it('should pass additional classNames', () => {
|
21 | testForCustomClass(Label);
|
22 | });
|
23 |
|
24 | it('should render with "col-form-label" class when a col is provided', () => {
|
25 | render(<Label sm="6">Yo!</Label>);
|
26 | expect(screen.getByText(/yo/i)).toHaveClass('col-form-label');
|
27 | });
|
28 |
|
29 | it('should not render with "form-label" class when a col is provided', () => {
|
30 | render(<Label sm="6">Yo!</Label>);
|
31 | expect(screen.getByText(/yo!/i)).not.toHaveClass('form-label');
|
32 | });
|
33 |
|
34 | it('should render with "form-label" class when a col is not provided', () => {
|
35 | render(<Label>Yo!</Label>);
|
36 | expect(screen.getByText(/yo!/i)).toHaveClass('form-label');
|
37 | });
|
38 |
|
39 | it('should render with "form-check-label" class when check is specified', () => {
|
40 | render(<Label check>Yo!</Label>);
|
41 | expect(screen.getByText(/yo!/i)).toHaveClass('form-check-label');
|
42 | });
|
43 |
|
44 | it('should not render with "form-label" class when check is specified', () => {
|
45 | render(<Label check>Yo!</Label>);
|
46 | expect(screen.getByText(/yo!/i)).not.toHaveClass('form-label');
|
47 | });
|
48 |
|
49 | it('should pass col size specific classes as Strings', () => {
|
50 | render(<Label sm="6">Yo!</Label>);
|
51 | expect(screen.getByText(/yo!/i)).toHaveClass('col-sm-6');
|
52 | });
|
53 |
|
54 | it('should pass col size specific classes as Strings (auto)', () => {
|
55 | render(<Label sm="auto">Yo!</Label>);
|
56 | expect(screen.getByText(/yo!/i)).toHaveClass('col-sm-auto');
|
57 | });
|
58 |
|
59 | it('should pass col size specific classes as Strings ("")', () => {
|
60 | render(<Label sm="">Yo!</Label>);
|
61 | expect(screen.getByText(/yo!/i)).toHaveClass('col-sm');
|
62 | });
|
63 |
|
64 | it('should pass col size specific classes as Strings (true)', () => {
|
65 | render(<Label sm>Yo!</Label>);
|
66 | expect(screen.getByText(/yo!/i)).toHaveClass('col-sm');
|
67 | });
|
68 |
|
69 | it('should pass col size specific classes as Strings (xs)', () => {
|
70 | render(<Label xs="6">Yo!</Label>);
|
71 | expect(screen.getByText(/yo!/i)).toHaveClass('col-6');
|
72 | });
|
73 |
|
74 | it('should pass col size specific classes as Strings (xs="")', () => {
|
75 | render(<Label xs="">Yo!</Label>);
|
76 | expect(screen.getByText(/yo!/i)).toHaveClass('col');
|
77 | });
|
78 |
|
79 | it('should pass col size specific classes as Strings (xs (true))', () => {
|
80 | render(<Label xs>Yo!</Label>);
|
81 | expect(screen.getByText(/yo!/i)).toHaveClass('col');
|
82 | });
|
83 |
|
84 | it('should pass col size specific classes as Strings (xs="auto")', () => {
|
85 | render(<Label xs="auto">Yo!</Label>);
|
86 | expect(screen.getByText(/yo!/i)).toHaveClass('col-auto');
|
87 | });
|
88 |
|
89 | it('should render with "visually-hidden" class when hidden prop is truthy', () => {
|
90 | render(<Label hidden>Yo!</Label>);
|
91 | expect(screen.getByText(/yo!/i)).toHaveClass('visually-hidden');
|
92 | });
|
93 |
|
94 | it('should render with "col-form-label-${size}" class when size is provided', () => {
|
95 | render(<Label size="lg">Yo!</Label>);
|
96 | expect(screen.getByText(/yo!/i)).toHaveClass('col-form-label-lg');
|
97 | });
|
98 |
|
99 | it('should pass col size specific classes as Numbers', () => {
|
100 | render(<Label sm={6}>Yo!</Label>);
|
101 | expect(screen.getByText(/yo!/i)).toHaveClass('col-sm-6');
|
102 | });
|
103 |
|
104 | it('should pass col size specific classes as Numbers (xs)', () => {
|
105 | render(<Label xs={6}>Yo!</Label>);
|
106 | expect(screen.getByText(/yo!/i)).toHaveClass('col-6');
|
107 | });
|
108 |
|
109 | it('should pass col size specific classes via Objects', () => {
|
110 | render(<Label sm={{ size: 6, order: 2, offset: 2 }}>Yo!</Label>);
|
111 | expect(screen.getByText(/yo!/i)).toHaveClass('col-sm-6');
|
112 | expect(screen.getByText(/yo!/i)).toHaveClass('order-sm-2');
|
113 | expect(screen.getByText(/yo!/i)).toHaveClass('offset-sm-2');
|
114 | });
|
115 |
|
116 | it('should pass col size specific classes via Objects (xs)', () => {
|
117 | render(<Label xs={{ size: 6, order: 2, offset: 2 }}>Yo!</Label>);
|
118 | expect(screen.getByText(/yo!/i)).toHaveClass('col-6');
|
119 | expect(screen.getByText(/yo!/i)).toHaveClass('order-2');
|
120 | expect(screen.getByText(/yo!/i)).toHaveClass('offset-2');
|
121 | });
|
122 |
|
123 | it('should pass multiple col size specific classes via Objects', () => {
|
124 | render(
|
125 | <Label
|
126 | xs={{ size: 4, order: 3, offset: 3 }}
|
127 | sm={{ size: 6, order: 2, offset: 2 }}
|
128 | md={{ size: 7, order: 1, offset: 1 }}
|
129 | >
|
130 | Yo!
|
131 | </Label>,
|
132 | );
|
133 | expect(screen.getByText(/yo/i)).toHaveClass('col-4');
|
134 | expect(screen.getByText(/yo/i)).toHaveClass('order-3');
|
135 | expect(screen.getByText(/yo/i)).toHaveClass('offset-3');
|
136 | expect(screen.getByText(/yo/i)).toHaveClass('col-sm-6');
|
137 | expect(screen.getByText(/yo/i)).toHaveClass('order-sm-2');
|
138 | expect(screen.getByText(/yo/i)).toHaveClass('offset-sm-2');
|
139 | expect(screen.getByText(/yo/i)).toHaveClass('col-md-7');
|
140 | expect(screen.getByText(/yo/i)).toHaveClass('order-md-1');
|
141 | expect(screen.getByText(/yo/i)).toHaveClass('offset-md-1');
|
142 | });
|
143 |
|
144 | it('should render custom tag', () => {
|
145 | render(<Label tag="main">Yo!</Label>);
|
146 | testForCustomTag(Label, {}, 'main');
|
147 | });
|
148 | });
|