UNPKG

5.32 kBJavaScriptView Raw
1import React from 'react';
2import { screen, render } from '@testing-library/react';
3import { Label } from '..';
4import {
5 testForDefaultTag,
6 testForCustomClass,
7 testForChildrenInComponent,
8 testForCustomTag,
9} from '../testUtils';
10
11describe('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});