@abstraks-dev/ui-library 1.1.24 → 1.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/AccountBox.test.js +61 -0
- package/dist/__tests__/AccountCircle.test.js +69 -0
- package/dist/__tests__/Alert.test.js +144 -0
- package/dist/__tests__/ArrowIcon.test.js +61 -0
- package/dist/__tests__/ArrowRight.test.js +12 -7
- package/dist/__tests__/BookOpen.test.js +61 -0
- package/dist/__tests__/Camera.test.js +69 -0
- package/dist/__tests__/CaretDown.test.js +69 -0
- package/dist/__tests__/ChevronDown.test.js +13 -8
- package/dist/__tests__/Comment.test.js +69 -0
- package/dist/__tests__/Ellipses.test.js +61 -0
- package/dist/__tests__/Explore.test.js +61 -0
- package/dist/__tests__/FileInput.test.js +148 -0
- package/dist/__tests__/Filter.test.js +69 -0
- package/dist/__tests__/Form.test.js +471 -0
- package/dist/__tests__/Group.test.js +61 -0
- package/dist/__tests__/GroupReview.test.js +61 -0
- package/dist/__tests__/Hamburger.test.js +69 -0
- package/dist/__tests__/Header.test.js +198 -0
- package/dist/__tests__/Heart.test.js +69 -0
- package/dist/__tests__/Home.test.js +69 -0
- package/dist/__tests__/LoadingSpinner.test.js +78 -0
- package/dist/__tests__/LogOut.test.js +69 -0
- package/dist/__tests__/Magnify.test.js +69 -0
- package/dist/__tests__/News.test.js +61 -0
- package/dist/__tests__/Review.test.js +61 -0
- package/dist/__tests__/SaveIcon.test.js +61 -0
- package/dist/__tests__/Search.test.js +101 -0
- package/dist/__tests__/utils/accessibility.test.js +361 -0
- package/dist/__tests__/utils/inputValidation-core.test.js +80 -0
- package/dist/__tests__/utils/validation-core.test.js +123 -0
- package/dist/__tests__/utils/validation.test.js +362 -0
- package/dist/components/Alert.js +104 -0
- package/dist/components/FileInput.js +96 -0
- package/dist/components/Form.js +87 -39
- package/dist/components/Header.js +29 -1
- package/dist/components/Radio.js +1 -3
- package/dist/components/Search.js +236 -0
- package/dist/icons/AccountBox.js +33 -0
- package/dist/icons/AccountCircle.js +33 -0
- package/dist/icons/ArrowIcon.js +3 -2
- package/dist/icons/ArrowRight.js +23 -12
- package/dist/icons/BookOpen.js +33 -0
- package/dist/icons/Camera.js +33 -0
- package/dist/icons/CaretDown.js +33 -0
- package/dist/icons/ChevronDown.js +19 -9
- package/dist/icons/Comment.js +33 -0
- package/dist/icons/Explore.js +33 -0
- package/dist/icons/Filter.js +33 -0
- package/dist/icons/Group.js +33 -0
- package/dist/icons/GroupReview.js +33 -0
- package/dist/icons/Hamburger.js +14 -20
- package/dist/icons/Heart.js +33 -0
- package/dist/icons/Home.js +33 -0
- package/dist/icons/LoadingSpinner.js +3 -2
- package/dist/icons/LogOut.js +33 -0
- package/dist/icons/Magnify.js +33 -0
- package/dist/icons/News.js +33 -0
- package/dist/icons/Review.js +35 -0
- package/dist/icons/SaveIcon.js +3 -2
- package/dist/icons/index.js +112 -0
- package/dist/index.js +32 -0
- package/dist/styles/_variables.scss +2 -0
- package/dist/styles/alert.css +218 -0
- package/dist/styles/alert.css.map +1 -0
- package/dist/styles/alert.scss +128 -0
- package/dist/styles/anchor.css.map +1 -1
- package/dist/styles/avatar.css.map +1 -1
- package/dist/styles/button.css.map +1 -1
- package/dist/styles/card.css.map +1 -1
- package/dist/styles/checkbox.css.map +1 -1
- package/dist/styles/crud.css.map +1 -1
- package/dist/styles/dragAndDrop.css.map +1 -1
- package/dist/styles/error.css.map +1 -1
- package/dist/styles/file-input.css +165 -0
- package/dist/styles/file-input.css.map +1 -0
- package/dist/styles/file-input.scss +69 -0
- package/dist/styles/footer.css.map +1 -1
- package/dist/styles/form.css.map +1 -1
- package/dist/styles/header.css +9 -0
- package/dist/styles/header.css.map +1 -1
- package/dist/styles/header.scss +16 -7
- package/dist/styles/heading.css.map +1 -1
- package/dist/styles/hero.css.map +1 -1
- package/dist/styles/htmlElements.css.map +1 -1
- package/dist/styles/label.css.map +1 -1
- package/dist/styles/loader.css.map +1 -1
- package/dist/styles/main.css +320 -0
- package/dist/styles/main.css.map +1 -1
- package/dist/styles/menu-hover.css.map +1 -1
- package/dist/styles/paragraph.css.map +1 -1
- package/dist/styles/prompt.css.map +1 -1
- package/dist/styles/radio.css.map +1 -1
- package/dist/styles/search.css +269 -0
- package/dist/styles/search.css.map +1 -0
- package/dist/styles/search.scss +215 -0
- package/dist/styles/select.css.map +1 -1
- package/dist/styles/side-menu.css.map +1 -1
- package/dist/styles/tabs.css.map +1 -1
- package/dist/styles/text-area.css.map +1 -1
- package/dist/styles/text-input.css.map +1 -1
- package/dist/utils/utils/validation.js +2 -2
- package/dist/utils/validation.js +2 -2
- package/package.json +2 -2
- package/dist/icons/__tests__/CheckCircle.test.js +0 -9
- package/dist/icons/__tests__/ChevronDown.test.js +0 -9
- package/dist/icons/__tests__/Close.test.js +0 -9
- package/dist/icons/__tests__/EditSquare.test.js +0 -9
- package/dist/icons/__tests__/PlusCircle.test.js +0 -9
- package/dist/icons/__tests__/TrashX.test.js +0 -9
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _Header = require("../components/Header");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
8
|
+
// Suppress console.error during tests
|
|
9
|
+
let consoleErrorSpy;
|
|
10
|
+
beforeAll(() => {
|
|
11
|
+
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
12
|
+
});
|
|
13
|
+
afterAll(() => {
|
|
14
|
+
consoleErrorSpy.mockRestore();
|
|
15
|
+
});
|
|
16
|
+
// Mock useWindowSize hook to control mobile/desktop behavior
|
|
17
|
+
jest.mock('../utils/useWindowSize', () => ({
|
|
18
|
+
useWindowSize: jest.fn(() => ({
|
|
19
|
+
width: 1024,
|
|
20
|
+
height: 768
|
|
21
|
+
})) // Default to desktop
|
|
22
|
+
}));
|
|
23
|
+
describe('Header Component', () => {
|
|
24
|
+
const mockProps = {
|
|
25
|
+
logo: /*#__PURE__*/_react.default.createElement("div", {
|
|
26
|
+
"data-testid": "logo"
|
|
27
|
+
}, "Logo"),
|
|
28
|
+
navigation: /*#__PURE__*/_react.default.createElement("li", {
|
|
29
|
+
"data-testid": "nav-item"
|
|
30
|
+
}, "Navigation Item"),
|
|
31
|
+
mapMenuItems: /*#__PURE__*/_react.default.createElement("div", {
|
|
32
|
+
"data-testid": "mobile-menu-items"
|
|
33
|
+
}, "Mobile Menu"),
|
|
34
|
+
isMenuOpen: false,
|
|
35
|
+
isEllipsesOpen: false,
|
|
36
|
+
onMenuToggle: jest.fn(),
|
|
37
|
+
onEllipsesToggle: jest.fn(),
|
|
38
|
+
ariaLabel: 'Main navigation',
|
|
39
|
+
menuAriaLabel: 'Navigation menu',
|
|
40
|
+
userMenuAriaLabel: 'User menu'
|
|
41
|
+
};
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
jest.clearAllMocks();
|
|
44
|
+
});
|
|
45
|
+
test('renders with required props', () => {
|
|
46
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, mockProps));
|
|
47
|
+
expect(_react2.screen.getByTestId('logo')).toBeInTheDocument();
|
|
48
|
+
expect(_react2.screen.getByTestId('nav-item')).toBeInTheDocument();
|
|
49
|
+
});
|
|
50
|
+
test('applies correct aria-label', () => {
|
|
51
|
+
const {
|
|
52
|
+
container
|
|
53
|
+
} = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, mockProps));
|
|
54
|
+
const headerElement = container.querySelector('header');
|
|
55
|
+
expect(headerElement).toHaveAttribute('aria-label', 'Main navigation');
|
|
56
|
+
});
|
|
57
|
+
test('renders hamburger menu button in mobile view', () => {
|
|
58
|
+
// Mock mobile view
|
|
59
|
+
const {
|
|
60
|
+
useWindowSize
|
|
61
|
+
} = require('../utils/useWindowSize');
|
|
62
|
+
useWindowSize.mockReturnValue({
|
|
63
|
+
width: 500,
|
|
64
|
+
height: 800
|
|
65
|
+
});
|
|
66
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
67
|
+
hasAuth: false
|
|
68
|
+
})));
|
|
69
|
+
const menuButton = _react2.screen.getByRole('button', {
|
|
70
|
+
name: /open navigation menu/i
|
|
71
|
+
});
|
|
72
|
+
expect(menuButton).toBeInTheDocument();
|
|
73
|
+
});
|
|
74
|
+
test('calls onMenuToggle when hamburger menu is clicked in mobile view', () => {
|
|
75
|
+
// Mock mobile view
|
|
76
|
+
const {
|
|
77
|
+
useWindowSize
|
|
78
|
+
} = require('../utils/useWindowSize');
|
|
79
|
+
useWindowSize.mockReturnValue({
|
|
80
|
+
width: 500,
|
|
81
|
+
height: 800
|
|
82
|
+
});
|
|
83
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, mockProps));
|
|
84
|
+
const menuButton = _react2.screen.getByRole('button', {
|
|
85
|
+
name: /open navigation menu/i
|
|
86
|
+
});
|
|
87
|
+
_react2.fireEvent.click(menuButton);
|
|
88
|
+
expect(mockProps.onMenuToggle).toHaveBeenCalledWith(true);
|
|
89
|
+
});
|
|
90
|
+
test('renders avatar when authenticated and avatarSrc provided', () => {
|
|
91
|
+
// Ensure desktop view
|
|
92
|
+
const {
|
|
93
|
+
useWindowSize
|
|
94
|
+
} = require('../utils/useWindowSize');
|
|
95
|
+
useWindowSize.mockReturnValue({
|
|
96
|
+
width: 1024,
|
|
97
|
+
height: 768
|
|
98
|
+
});
|
|
99
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
100
|
+
hasAuth: true,
|
|
101
|
+
avatarSrc: "test-avatar.jpg"
|
|
102
|
+
})));
|
|
103
|
+
const avatarContainer = _react2.screen.getByRole('button', {
|
|
104
|
+
name: /open user menu/i
|
|
105
|
+
});
|
|
106
|
+
expect(avatarContainer).toBeInTheDocument();
|
|
107
|
+
});
|
|
108
|
+
test('renders sign in and sign up links when not authenticated', () => {
|
|
109
|
+
// Ensure desktop view
|
|
110
|
+
const {
|
|
111
|
+
useWindowSize
|
|
112
|
+
} = require('../utils/useWindowSize');
|
|
113
|
+
useWindowSize.mockReturnValue({
|
|
114
|
+
width: 1024,
|
|
115
|
+
height: 768
|
|
116
|
+
});
|
|
117
|
+
const signInLink = /*#__PURE__*/_react.default.createElement("a", {
|
|
118
|
+
"data-testid": "sign-in"
|
|
119
|
+
}, "Sign In");
|
|
120
|
+
const signUpLink = /*#__PURE__*/_react.default.createElement("a", {
|
|
121
|
+
"data-testid": "sign-up"
|
|
122
|
+
}, "Sign Up");
|
|
123
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
124
|
+
hasAuth: false,
|
|
125
|
+
signInLink: signInLink,
|
|
126
|
+
signUpLink: signUpLink
|
|
127
|
+
})));
|
|
128
|
+
expect(_react2.screen.getByTestId('sign-in')).toBeInTheDocument();
|
|
129
|
+
expect(_react2.screen.getByTestId('sign-up')).toBeInTheDocument();
|
|
130
|
+
});
|
|
131
|
+
test('renders search component when provided', () => {
|
|
132
|
+
const searchComponent = /*#__PURE__*/_react.default.createElement("input", {
|
|
133
|
+
"data-testid": "search",
|
|
134
|
+
placeholder: "Search",
|
|
135
|
+
"aria-label": "Search"
|
|
136
|
+
});
|
|
137
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
138
|
+
search: searchComponent
|
|
139
|
+
})));
|
|
140
|
+
expect(_react2.screen.getByTestId('search')).toBeInTheDocument();
|
|
141
|
+
});
|
|
142
|
+
test('applies custom className', () => {
|
|
143
|
+
const {
|
|
144
|
+
container
|
|
145
|
+
} = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
146
|
+
className: "custom-header"
|
|
147
|
+
})));
|
|
148
|
+
const headerElement = container.querySelector('header');
|
|
149
|
+
expect(headerElement).toHaveClass('custom-header');
|
|
150
|
+
});
|
|
151
|
+
test('renders SideMenu component in mobile view when isMenuOpen is true', () => {
|
|
152
|
+
// Mock mobile view
|
|
153
|
+
const {
|
|
154
|
+
useWindowSize
|
|
155
|
+
} = require('../utils/useWindowSize');
|
|
156
|
+
useWindowSize.mockReturnValue({
|
|
157
|
+
width: 500,
|
|
158
|
+
height: 800
|
|
159
|
+
});
|
|
160
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
161
|
+
isMenuOpen: true
|
|
162
|
+
})));
|
|
163
|
+
|
|
164
|
+
// SideMenu should be rendered and have the active class
|
|
165
|
+
const sideMenu = _react2.screen.getByTestId('side-menu');
|
|
166
|
+
expect(sideMenu).toBeInTheDocument();
|
|
167
|
+
expect(sideMenu).toHaveClass('side-menu--open');
|
|
168
|
+
});
|
|
169
|
+
test('forwards ref correctly', () => {
|
|
170
|
+
const ref = /*#__PURE__*/_react.default.createRef();
|
|
171
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
172
|
+
ref: ref
|
|
173
|
+
})));
|
|
174
|
+
expect(ref.current).toBeInstanceOf(HTMLElement);
|
|
175
|
+
expect(ref.current.tagName.toLowerCase()).toBe('header');
|
|
176
|
+
});
|
|
177
|
+
test('handles keyboard events', () => {
|
|
178
|
+
const onKeyDown = jest.fn();
|
|
179
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
180
|
+
onKeyDown: onKeyDown
|
|
181
|
+
})));
|
|
182
|
+
const headerElement = _react2.screen.getByRole('banner');
|
|
183
|
+
_react2.fireEvent.keyDown(headerElement, {
|
|
184
|
+
key: 'Escape'
|
|
185
|
+
});
|
|
186
|
+
expect(onKeyDown).toHaveBeenCalled();
|
|
187
|
+
});
|
|
188
|
+
test('closes menu on Escape key when menu is open', () => {
|
|
189
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
|
|
190
|
+
isMenuOpen: true
|
|
191
|
+
})));
|
|
192
|
+
const headerElement = _react2.screen.getByRole('banner');
|
|
193
|
+
_react2.fireEvent.keyDown(headerElement, {
|
|
194
|
+
key: 'Escape'
|
|
195
|
+
});
|
|
196
|
+
expect(mockProps.onMenuToggle).toHaveBeenCalledWith(false);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _Heart = require("../icons/Heart.js");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
// Suppress console.error during tests
|
|
8
|
+
let consoleErrorSpy;
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
11
|
+
});
|
|
12
|
+
afterAll(() => {
|
|
13
|
+
consoleErrorSpy.mockRestore();
|
|
14
|
+
});
|
|
15
|
+
describe('Heart Icon', () => {
|
|
16
|
+
test('renders SVG element', () => {
|
|
17
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Heart.Heart, null));
|
|
18
|
+
const svg = document.querySelector('svg');
|
|
19
|
+
expect(svg).toBeInTheDocument();
|
|
20
|
+
expect(svg.tagName).toBe('svg');
|
|
21
|
+
});
|
|
22
|
+
test('has correct default props', () => {
|
|
23
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Heart.Heart, null));
|
|
24
|
+
const svg = document.querySelector('svg');
|
|
25
|
+
expect(svg).toHaveAttribute('width', '24');
|
|
26
|
+
expect(svg).toHaveAttribute('height', '24');
|
|
27
|
+
expect(svg).toHaveAttribute('viewBox', '0 -960 960 960');
|
|
28
|
+
expect(svg).toHaveAttribute('fill', '#adb5bd');
|
|
29
|
+
expect(svg).toHaveClass('icon');
|
|
30
|
+
expect(svg).toHaveClass('heart');
|
|
31
|
+
});
|
|
32
|
+
test('applies custom dimensions', () => {
|
|
33
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Heart.Heart, {
|
|
34
|
+
dimensions: 32
|
|
35
|
+
}));
|
|
36
|
+
const svg = document.querySelector('svg');
|
|
37
|
+
expect(svg).toHaveAttribute('width', '32');
|
|
38
|
+
expect(svg).toHaveAttribute('height', '32');
|
|
39
|
+
});
|
|
40
|
+
test('applies custom componentName and additionalClassName', () => {
|
|
41
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Heart.Heart, {
|
|
42
|
+
componentName: "custom-heart",
|
|
43
|
+
additionalClassName: "extra-class"
|
|
44
|
+
}));
|
|
45
|
+
const svg = document.querySelector('svg');
|
|
46
|
+
expect(svg).toHaveClass('icon');
|
|
47
|
+
expect(svg).toHaveClass('custom-heart');
|
|
48
|
+
expect(svg).toHaveClass('extra-class');
|
|
49
|
+
});
|
|
50
|
+
test('applies custom fill color', () => {
|
|
51
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Heart.Heart, {
|
|
52
|
+
fill: "#ff0000"
|
|
53
|
+
}));
|
|
54
|
+
const svg = document.querySelector('svg');
|
|
55
|
+
expect(svg).toHaveAttribute('fill', '#ff0000');
|
|
56
|
+
});
|
|
57
|
+
test('has correct path data', () => {
|
|
58
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Heart.Heart, null));
|
|
59
|
+
const svg = document.querySelector('svg');
|
|
60
|
+
const path = svg.querySelector('path');
|
|
61
|
+
expect(path).toHaveAttribute('d', 'm480-120-58-52q-101-91-167-157T150-447.5Q111-500 95.5-544T80-634q0-94 63-157t157-63q52 0 99 22t81 62q34-40 81-62t99-22q94 0 157 63t63 157q0 46-15.5 90T810-447.5Q771-395 705-329T538-172l-58 52Zm0-108q96-86 158-147.5t98-107q36-45.5 50-81t14-70.5q0-60-40-100t-100-40q-47 0-87 26.5T518-680h-76q-15-41-55-67.5T300-774q-60 0-100 40t-40 100q0 35 14 70.5t50 81q36 45.5 98 107T480-228Zm0-273Z');
|
|
62
|
+
});
|
|
63
|
+
test('contains exactly one path element', () => {
|
|
64
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Heart.Heart, null));
|
|
65
|
+
const svg = document.querySelector('svg');
|
|
66
|
+
const paths = svg.querySelectorAll('path');
|
|
67
|
+
expect(paths).toHaveLength(1);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _Home = require("../icons/Home.js");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
// Suppress console.error during tests
|
|
8
|
+
let consoleErrorSpy;
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
11
|
+
});
|
|
12
|
+
afterAll(() => {
|
|
13
|
+
consoleErrorSpy.mockRestore();
|
|
14
|
+
});
|
|
15
|
+
describe('Home Icon', () => {
|
|
16
|
+
test('renders SVG element', () => {
|
|
17
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Home.Home, null));
|
|
18
|
+
const svg = document.querySelector('svg');
|
|
19
|
+
expect(svg).toBeInTheDocument();
|
|
20
|
+
expect(svg.tagName).toBe('svg');
|
|
21
|
+
});
|
|
22
|
+
test('has correct default props', () => {
|
|
23
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Home.Home, null));
|
|
24
|
+
const svg = document.querySelector('svg');
|
|
25
|
+
expect(svg).toHaveAttribute('width', '24');
|
|
26
|
+
expect(svg).toHaveAttribute('height', '24');
|
|
27
|
+
expect(svg).toHaveAttribute('viewBox', '0 -960 960 960');
|
|
28
|
+
expect(svg).toHaveAttribute('fill', '#adb5bd');
|
|
29
|
+
expect(svg).toHaveClass('icon');
|
|
30
|
+
expect(svg).toHaveClass('home');
|
|
31
|
+
});
|
|
32
|
+
test('applies custom dimensions', () => {
|
|
33
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Home.Home, {
|
|
34
|
+
dimensions: 32
|
|
35
|
+
}));
|
|
36
|
+
const svg = document.querySelector('svg');
|
|
37
|
+
expect(svg).toHaveAttribute('width', '32');
|
|
38
|
+
expect(svg).toHaveAttribute('height', '32');
|
|
39
|
+
});
|
|
40
|
+
test('applies custom componentName and additionalClassName', () => {
|
|
41
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Home.Home, {
|
|
42
|
+
componentName: "custom-home",
|
|
43
|
+
additionalClassName: "extra-class"
|
|
44
|
+
}));
|
|
45
|
+
const svg = document.querySelector('svg');
|
|
46
|
+
expect(svg).toHaveClass('icon');
|
|
47
|
+
expect(svg).toHaveClass('custom-home');
|
|
48
|
+
expect(svg).toHaveClass('extra-class');
|
|
49
|
+
});
|
|
50
|
+
test('applies custom fill color', () => {
|
|
51
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Home.Home, {
|
|
52
|
+
fill: "#ff0000"
|
|
53
|
+
}));
|
|
54
|
+
const svg = document.querySelector('svg');
|
|
55
|
+
expect(svg).toHaveAttribute('fill', '#ff0000');
|
|
56
|
+
});
|
|
57
|
+
test('has correct path data', () => {
|
|
58
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Home.Home, null));
|
|
59
|
+
const svg = document.querySelector('svg');
|
|
60
|
+
const path = svg.querySelector('path');
|
|
61
|
+
expect(path).toHaveAttribute('d', 'M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z');
|
|
62
|
+
});
|
|
63
|
+
test('contains exactly one path element', () => {
|
|
64
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Home.Home, null));
|
|
65
|
+
const svg = document.querySelector('svg');
|
|
66
|
+
const paths = svg.querySelectorAll('path');
|
|
67
|
+
expect(paths).toHaveLength(1);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _LoadingSpinner = require("../icons/LoadingSpinner.js");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
// Suppress console.error during tests
|
|
8
|
+
let consoleErrorSpy;
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
11
|
+
});
|
|
12
|
+
afterAll(() => {
|
|
13
|
+
consoleErrorSpy.mockRestore();
|
|
14
|
+
});
|
|
15
|
+
describe('LoadingSpinner Icon', () => {
|
|
16
|
+
test('renders SVG element', () => {
|
|
17
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LoadingSpinner.LoadingSpinner, null));
|
|
18
|
+
const svg = document.querySelector('svg');
|
|
19
|
+
expect(svg).toBeInTheDocument();
|
|
20
|
+
expect(svg.tagName).toBe('svg');
|
|
21
|
+
});
|
|
22
|
+
test('has correct default props', () => {
|
|
23
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LoadingSpinner.LoadingSpinner, null));
|
|
24
|
+
const svg = document.querySelector('svg');
|
|
25
|
+
expect(svg).toHaveAttribute('width', '24');
|
|
26
|
+
expect(svg).toHaveAttribute('height', '24');
|
|
27
|
+
expect(svg).toHaveAttribute('viewBox', '0 0 24 24');
|
|
28
|
+
expect(svg).toHaveAttribute('fill', 'none');
|
|
29
|
+
expect(svg).toHaveAttribute('aria-hidden', 'true');
|
|
30
|
+
expect(svg).toHaveClass('icon');
|
|
31
|
+
expect(svg).toHaveClass('loading-spinner');
|
|
32
|
+
});
|
|
33
|
+
test('applies custom dimensions', () => {
|
|
34
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LoadingSpinner.LoadingSpinner, {
|
|
35
|
+
dimensions: 32
|
|
36
|
+
}));
|
|
37
|
+
const svg = document.querySelector('svg');
|
|
38
|
+
expect(svg).toHaveAttribute('width', '32');
|
|
39
|
+
expect(svg).toHaveAttribute('height', '32');
|
|
40
|
+
});
|
|
41
|
+
test('applies custom componentName and additionalClassName', () => {
|
|
42
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LoadingSpinner.LoadingSpinner, {
|
|
43
|
+
componentName: "custom-spinner",
|
|
44
|
+
additionalClassName: "extra-class"
|
|
45
|
+
}));
|
|
46
|
+
const svg = document.querySelector('svg');
|
|
47
|
+
expect(svg).toHaveClass('icon');
|
|
48
|
+
expect(svg).toHaveClass('custom-spinner');
|
|
49
|
+
expect(svg).toHaveClass('extra-class');
|
|
50
|
+
});
|
|
51
|
+
test('renders circle element with correct attributes', () => {
|
|
52
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LoadingSpinner.LoadingSpinner, null));
|
|
53
|
+
const circle = document.querySelector('circle');
|
|
54
|
+
expect(circle).toBeInTheDocument();
|
|
55
|
+
expect(circle).toHaveAttribute('cx', '12');
|
|
56
|
+
expect(circle).toHaveAttribute('cy', '12');
|
|
57
|
+
expect(circle).toHaveAttribute('r', '10');
|
|
58
|
+
expect(circle).toHaveAttribute('stroke', 'currentColor');
|
|
59
|
+
expect(circle).toHaveAttribute('stroke-width', '2');
|
|
60
|
+
expect(circle).toHaveClass('loading-spinner__circle');
|
|
61
|
+
});
|
|
62
|
+
test('renders path element with correct attributes', () => {
|
|
63
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LoadingSpinner.LoadingSpinner, null));
|
|
64
|
+
const path = document.querySelector('path');
|
|
65
|
+
expect(path).toBeInTheDocument();
|
|
66
|
+
expect(path).toHaveAttribute('fill', 'currentColor');
|
|
67
|
+
expect(path).toHaveAttribute('d', 'm15.84 10.2c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8.8-1.8 1.8-1.8 1.8.8 1.8 1.8z');
|
|
68
|
+
expect(path).toHaveClass('loading-spinner__path');
|
|
69
|
+
});
|
|
70
|
+
test('contains circle and path elements', () => {
|
|
71
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LoadingSpinner.LoadingSpinner, null));
|
|
72
|
+
const svg = document.querySelector('svg');
|
|
73
|
+
const circles = svg.querySelectorAll('circle');
|
|
74
|
+
const paths = svg.querySelectorAll('path');
|
|
75
|
+
expect(circles).toHaveLength(1);
|
|
76
|
+
expect(paths).toHaveLength(1);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _LogOut = require("../icons/LogOut.js");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
// Suppress console.error during tests
|
|
8
|
+
let consoleErrorSpy;
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
11
|
+
});
|
|
12
|
+
afterAll(() => {
|
|
13
|
+
consoleErrorSpy.mockRestore();
|
|
14
|
+
});
|
|
15
|
+
describe('LogOut Icon', () => {
|
|
16
|
+
test('renders SVG element', () => {
|
|
17
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LogOut.LogOut, null));
|
|
18
|
+
const svg = document.querySelector('svg');
|
|
19
|
+
expect(svg).toBeInTheDocument();
|
|
20
|
+
expect(svg.tagName).toBe('svg');
|
|
21
|
+
});
|
|
22
|
+
test('has correct default props', () => {
|
|
23
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LogOut.LogOut, null));
|
|
24
|
+
const svg = document.querySelector('svg');
|
|
25
|
+
expect(svg).toHaveAttribute('width', '24');
|
|
26
|
+
expect(svg).toHaveAttribute('height', '24');
|
|
27
|
+
expect(svg).toHaveAttribute('viewBox', '0 -960 960 960');
|
|
28
|
+
expect(svg).toHaveAttribute('fill', '#adb5bd');
|
|
29
|
+
expect(svg).toHaveClass('icon');
|
|
30
|
+
expect(svg).toHaveClass('log-out');
|
|
31
|
+
});
|
|
32
|
+
test('applies custom dimensions', () => {
|
|
33
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LogOut.LogOut, {
|
|
34
|
+
dimensions: 32
|
|
35
|
+
}));
|
|
36
|
+
const svg = document.querySelector('svg');
|
|
37
|
+
expect(svg).toHaveAttribute('width', '32');
|
|
38
|
+
expect(svg).toHaveAttribute('height', '32');
|
|
39
|
+
});
|
|
40
|
+
test('applies custom componentName and additionalClassName', () => {
|
|
41
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LogOut.LogOut, {
|
|
42
|
+
componentName: "custom-logout",
|
|
43
|
+
additionalClassName: "extra-class"
|
|
44
|
+
}));
|
|
45
|
+
const svg = document.querySelector('svg');
|
|
46
|
+
expect(svg).toHaveClass('icon');
|
|
47
|
+
expect(svg).toHaveClass('custom-logout');
|
|
48
|
+
expect(svg).toHaveClass('extra-class');
|
|
49
|
+
});
|
|
50
|
+
test('applies custom fill color', () => {
|
|
51
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LogOut.LogOut, {
|
|
52
|
+
fill: "#ff0000"
|
|
53
|
+
}));
|
|
54
|
+
const svg = document.querySelector('svg');
|
|
55
|
+
expect(svg).toHaveAttribute('fill', '#ff0000');
|
|
56
|
+
});
|
|
57
|
+
test('has correct path data', () => {
|
|
58
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LogOut.LogOut, null));
|
|
59
|
+
const svg = document.querySelector('svg');
|
|
60
|
+
const path = svg.querySelector('path');
|
|
61
|
+
expect(path).toHaveAttribute('d', 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h280v80H200Zm440-160-55-58 102-102H360v-80h327L585-622l55-58 200 200-200 200Z');
|
|
62
|
+
});
|
|
63
|
+
test('contains exactly one path element', () => {
|
|
64
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_LogOut.LogOut, null));
|
|
65
|
+
const svg = document.querySelector('svg');
|
|
66
|
+
const paths = svg.querySelectorAll('path');
|
|
67
|
+
expect(paths).toHaveLength(1);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _Magnify = require("../icons/Magnify.js");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
// Suppress console.error during tests
|
|
8
|
+
let consoleErrorSpy;
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
11
|
+
});
|
|
12
|
+
afterAll(() => {
|
|
13
|
+
consoleErrorSpy.mockRestore();
|
|
14
|
+
});
|
|
15
|
+
describe('Magnify Icon', () => {
|
|
16
|
+
test('renders SVG element', () => {
|
|
17
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Magnify.Magnify, null));
|
|
18
|
+
const svg = document.querySelector('svg');
|
|
19
|
+
expect(svg).toBeInTheDocument();
|
|
20
|
+
expect(svg.tagName).toBe('svg');
|
|
21
|
+
});
|
|
22
|
+
test('has correct default props', () => {
|
|
23
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Magnify.Magnify, null));
|
|
24
|
+
const svg = document.querySelector('svg');
|
|
25
|
+
expect(svg).toHaveAttribute('width', '24');
|
|
26
|
+
expect(svg).toHaveAttribute('height', '24');
|
|
27
|
+
expect(svg).toHaveAttribute('viewBox', '0 -960 960 960');
|
|
28
|
+
expect(svg).toHaveAttribute('fill', '#adb5bd');
|
|
29
|
+
expect(svg).toHaveClass('icon');
|
|
30
|
+
expect(svg).toHaveClass('magnify');
|
|
31
|
+
});
|
|
32
|
+
test('applies custom dimensions', () => {
|
|
33
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Magnify.Magnify, {
|
|
34
|
+
dimensions: 32
|
|
35
|
+
}));
|
|
36
|
+
const svg = document.querySelector('svg');
|
|
37
|
+
expect(svg).toHaveAttribute('width', '32');
|
|
38
|
+
expect(svg).toHaveAttribute('height', '32');
|
|
39
|
+
});
|
|
40
|
+
test('applies custom componentName and additionalClassName', () => {
|
|
41
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Magnify.Magnify, {
|
|
42
|
+
componentName: "custom-magnify",
|
|
43
|
+
additionalClassName: "extra-class"
|
|
44
|
+
}));
|
|
45
|
+
const svg = document.querySelector('svg');
|
|
46
|
+
expect(svg).toHaveClass('icon');
|
|
47
|
+
expect(svg).toHaveClass('custom-magnify');
|
|
48
|
+
expect(svg).toHaveClass('extra-class');
|
|
49
|
+
});
|
|
50
|
+
test('applies custom fill color', () => {
|
|
51
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Magnify.Magnify, {
|
|
52
|
+
fill: "#ff0000"
|
|
53
|
+
}));
|
|
54
|
+
const svg = document.querySelector('svg');
|
|
55
|
+
expect(svg).toHaveAttribute('fill', '#ff0000');
|
|
56
|
+
});
|
|
57
|
+
test('has correct path data', () => {
|
|
58
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Magnify.Magnify, null));
|
|
59
|
+
const svg = document.querySelector('svg');
|
|
60
|
+
const path = svg.querySelector('path');
|
|
61
|
+
expect(path).toHaveAttribute('d', 'M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z');
|
|
62
|
+
});
|
|
63
|
+
test('contains exactly one path element', () => {
|
|
64
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Magnify.Magnify, null));
|
|
65
|
+
const svg = document.querySelector('svg');
|
|
66
|
+
const paths = svg.querySelectorAll('path');
|
|
67
|
+
expect(paths).toHaveLength(1);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _News = require("../icons/News");
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
describe('News Icon', () => {
|
|
8
|
+
test('renders with default props', () => {
|
|
9
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, null));
|
|
10
|
+
const svg = document.querySelector('svg');
|
|
11
|
+
expect(svg).toBeInTheDocument();
|
|
12
|
+
expect(svg.tagName).toBe('svg');
|
|
13
|
+
});
|
|
14
|
+
test('applies correct default dimensions', () => {
|
|
15
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, null));
|
|
16
|
+
const svg = document.querySelector('svg');
|
|
17
|
+
expect(svg).toHaveAttribute('width', '24');
|
|
18
|
+
expect(svg).toHaveAttribute('height', '24');
|
|
19
|
+
});
|
|
20
|
+
test('applies custom dimensions', () => {
|
|
21
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, {
|
|
22
|
+
dimensions: 32
|
|
23
|
+
}));
|
|
24
|
+
const svg = document.querySelector('svg');
|
|
25
|
+
expect(svg).toHaveAttribute('width', '32');
|
|
26
|
+
expect(svg).toHaveAttribute('height', '32');
|
|
27
|
+
});
|
|
28
|
+
test('applies correct CSS classes', () => {
|
|
29
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, null));
|
|
30
|
+
const svg = document.querySelector('svg');
|
|
31
|
+
expect(svg).toHaveClass('icon', 'news');
|
|
32
|
+
});
|
|
33
|
+
test('applies additional className', () => {
|
|
34
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, {
|
|
35
|
+
additionalClassName: "custom-class"
|
|
36
|
+
}));
|
|
37
|
+
const svg = document.querySelector('svg');
|
|
38
|
+
expect(svg).toHaveClass('icon', 'news', 'custom-class');
|
|
39
|
+
});
|
|
40
|
+
test('applies custom fill color', () => {
|
|
41
|
+
(0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, {
|
|
42
|
+
fill: "#ff0000"
|
|
43
|
+
}));
|
|
44
|
+
const svg = document.querySelector('svg');
|
|
45
|
+
expect(svg).toHaveAttribute('fill', '#ff0000');
|
|
46
|
+
});
|
|
47
|
+
test('contains correct path data', () => {
|
|
48
|
+
const {
|
|
49
|
+
container
|
|
50
|
+
} = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, null));
|
|
51
|
+
const path = container.querySelector('path');
|
|
52
|
+
expect(path).toHaveAttribute('d', 'M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h440l200 200v440q0 33-23.5 56.5T760-120H200Zm0-80h560v-400H600v-160H200v560Zm80-80h400v-80H280v80Zm0-320h200v-80H280v80Zm0 160h400v-80H280v80Zm-80-320v160-160 560-560Z');
|
|
53
|
+
});
|
|
54
|
+
test('contains single path element', () => {
|
|
55
|
+
const {
|
|
56
|
+
container
|
|
57
|
+
} = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_News.News, null));
|
|
58
|
+
const paths = container.querySelectorAll('path');
|
|
59
|
+
expect(paths).toHaveLength(1);
|
|
60
|
+
});
|
|
61
|
+
});
|