@abstraks-dev/ui-library 1.1.26 → 1.1.29

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.
Files changed (109) hide show
  1. package/dist/__tests__/AccountBox.test.js +61 -0
  2. package/dist/__tests__/AccountCircle.test.js +69 -0
  3. package/dist/__tests__/Alert.test.js +144 -0
  4. package/dist/__tests__/ArrowIcon.test.js +61 -0
  5. package/dist/__tests__/ArrowRight.test.js +12 -7
  6. package/dist/__tests__/BookOpen.test.js +61 -0
  7. package/dist/__tests__/Camera.test.js +69 -0
  8. package/dist/__tests__/CaretDown.test.js +69 -0
  9. package/dist/__tests__/ChevronDown.test.js +13 -8
  10. package/dist/__tests__/Comment.test.js +69 -0
  11. package/dist/__tests__/Ellipses.test.js +61 -0
  12. package/dist/__tests__/Explore.test.js +61 -0
  13. package/dist/__tests__/FileInput.test.js +148 -0
  14. package/dist/__tests__/Filter.test.js +69 -0
  15. package/dist/__tests__/Form.test.js +471 -0
  16. package/dist/__tests__/Group.test.js +61 -0
  17. package/dist/__tests__/GroupReview.test.js +61 -0
  18. package/dist/__tests__/Hamburger.test.js +69 -0
  19. package/dist/__tests__/Header.test.js +211 -0
  20. package/dist/__tests__/Heart.test.js +69 -0
  21. package/dist/__tests__/Home.test.js +69 -0
  22. package/dist/__tests__/LoadingSpinner.test.js +78 -0
  23. package/dist/__tests__/LogOut.test.js +69 -0
  24. package/dist/__tests__/Magnify.test.js +69 -0
  25. package/dist/__tests__/News.test.js +61 -0
  26. package/dist/__tests__/Review.test.js +61 -0
  27. package/dist/__tests__/SaveIcon.test.js +61 -0
  28. package/dist/__tests__/Search.test.js +101 -0
  29. package/dist/__tests__/utils/accessibility.test.js +361 -0
  30. package/dist/__tests__/utils/inputValidation-core.test.js +80 -0
  31. package/dist/__tests__/utils/validation-core.test.js +123 -0
  32. package/dist/__tests__/utils/validation.test.js +362 -0
  33. package/dist/components/Alert.js +104 -0
  34. package/dist/components/FileInput.js +96 -0
  35. package/dist/components/Form.js +27 -3
  36. package/dist/components/Header.js +1 -1
  37. package/dist/components/Search.js +238 -0
  38. package/dist/icons/AccountBox.js +33 -0
  39. package/dist/icons/AccountCircle.js +33 -0
  40. package/dist/icons/ArrowIcon.js +3 -2
  41. package/dist/icons/ArrowRight.js +23 -12
  42. package/dist/icons/BookOpen.js +33 -0
  43. package/dist/icons/Camera.js +33 -0
  44. package/dist/icons/CaretDown.js +33 -0
  45. package/dist/icons/ChevronDown.js +19 -9
  46. package/dist/icons/Comment.js +33 -0
  47. package/dist/icons/Explore.js +33 -0
  48. package/dist/icons/Filter.js +33 -0
  49. package/dist/icons/Group.js +33 -0
  50. package/dist/icons/GroupReview.js +33 -0
  51. package/dist/icons/Hamburger.js +14 -20
  52. package/dist/icons/Heart.js +33 -0
  53. package/dist/icons/Home.js +33 -0
  54. package/dist/icons/LoadingSpinner.js +3 -2
  55. package/dist/icons/LogOut.js +33 -0
  56. package/dist/icons/Magnify.js +33 -0
  57. package/dist/icons/News.js +33 -0
  58. package/dist/icons/Review.js +35 -0
  59. package/dist/icons/SaveIcon.js +3 -2
  60. package/dist/icons/index.js +112 -0
  61. package/dist/index.js +41 -1
  62. package/dist/styles/_variables.scss +5 -0
  63. package/dist/styles/alert.css +218 -0
  64. package/dist/styles/alert.css.map +1 -0
  65. package/dist/styles/alert.scss +128 -0
  66. package/dist/styles/anchor.css.map +1 -1
  67. package/dist/styles/avatar.css.map +1 -1
  68. package/dist/styles/button.css.map +1 -1
  69. package/dist/styles/card.css.map +1 -1
  70. package/dist/styles/checkbox.css.map +1 -1
  71. package/dist/styles/crud.css.map +1 -1
  72. package/dist/styles/dragAndDrop.css.map +1 -1
  73. package/dist/styles/error.css.map +1 -1
  74. package/dist/styles/file-input.css +165 -0
  75. package/dist/styles/file-input.css.map +1 -0
  76. package/dist/styles/file-input.scss +69 -0
  77. package/dist/styles/footer.css.map +1 -1
  78. package/dist/styles/form.css.map +1 -1
  79. package/dist/styles/header.css.map +1 -1
  80. package/dist/styles/heading.css.map +1 -1
  81. package/dist/styles/hero.css.map +1 -1
  82. package/dist/styles/htmlElements.css.map +1 -1
  83. package/dist/styles/label.css.map +1 -1
  84. package/dist/styles/loader.css.map +1 -1
  85. package/dist/styles/main.css +344 -11
  86. package/dist/styles/main.css.map +1 -1
  87. package/dist/styles/menu-hover.css.map +1 -1
  88. package/dist/styles/paragraph.css.map +1 -1
  89. package/dist/styles/prompt.css.map +1 -1
  90. package/dist/styles/radio.css.map +1 -1
  91. package/dist/styles/search.css +302 -0
  92. package/dist/styles/search.css.map +1 -0
  93. package/dist/styles/search.scss +260 -0
  94. package/dist/styles/select.css.map +1 -1
  95. package/dist/styles/side-menu.css.map +1 -1
  96. package/dist/styles/tabs.css.map +1 -1
  97. package/dist/styles/text-area.css.map +1 -1
  98. package/dist/styles/text-input.css +0 -11
  99. package/dist/styles/text-input.css.map +1 -1
  100. package/dist/styles/text-input.scss +0 -14
  101. package/dist/utils/utils/validation.js +2 -2
  102. package/dist/utils/validation.js +2 -2
  103. package/package.json +1 -1
  104. package/dist/icons/__tests__/CheckCircle.test.js +0 -9
  105. package/dist/icons/__tests__/ChevronDown.test.js +0 -9
  106. package/dist/icons/__tests__/Close.test.js +0 -9
  107. package/dist/icons/__tests__/EditSquare.test.js +0 -9
  108. package/dist/icons/__tests__/PlusCircle.test.js +0 -9
  109. package/dist/icons/__tests__/TrashX.test.js +0 -9
@@ -0,0 +1,211 @@
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
+ hasAuth: true,
139
+ search: searchComponent
140
+ })));
141
+ expect(_react2.screen.getByTestId('search')).toBeInTheDocument();
142
+ });
143
+ test('does not render search component when hasAuth is false', () => {
144
+ const searchComponent = /*#__PURE__*/_react.default.createElement("input", {
145
+ "data-testid": "search",
146
+ placeholder: "Search",
147
+ "aria-label": "Search"
148
+ });
149
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
150
+ hasAuth: false,
151
+ search: searchComponent
152
+ })));
153
+ expect(_react2.screen.queryByTestId('search')).not.toBeInTheDocument();
154
+ });
155
+ test('applies custom className', () => {
156
+ const {
157
+ container
158
+ } = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
159
+ className: "custom-header"
160
+ })));
161
+ const headerElement = container.querySelector('header');
162
+ expect(headerElement).toHaveClass('custom-header');
163
+ });
164
+ test('renders SideMenu component in mobile view when isMenuOpen is true', () => {
165
+ // Mock mobile view
166
+ const {
167
+ useWindowSize
168
+ } = require('../utils/useWindowSize');
169
+ useWindowSize.mockReturnValue({
170
+ width: 500,
171
+ height: 800
172
+ });
173
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
174
+ isMenuOpen: true
175
+ })));
176
+
177
+ // SideMenu should be rendered and have the active class
178
+ const sideMenu = _react2.screen.getByTestId('side-menu');
179
+ expect(sideMenu).toBeInTheDocument();
180
+ expect(sideMenu).toHaveClass('side-menu--open');
181
+ });
182
+ test('forwards ref correctly', () => {
183
+ const ref = /*#__PURE__*/_react.default.createRef();
184
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
185
+ ref: ref
186
+ })));
187
+ expect(ref.current).toBeInstanceOf(HTMLElement);
188
+ expect(ref.current.tagName.toLowerCase()).toBe('header');
189
+ });
190
+ test('handles keyboard events', () => {
191
+ const onKeyDown = jest.fn();
192
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
193
+ onKeyDown: onKeyDown
194
+ })));
195
+ const headerElement = _react2.screen.getByRole('banner');
196
+ _react2.fireEvent.keyDown(headerElement, {
197
+ key: 'Escape'
198
+ });
199
+ expect(onKeyDown).toHaveBeenCalled();
200
+ });
201
+ test('closes menu on Escape key when menu is open', () => {
202
+ (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_Header.Header, _extends({}, mockProps, {
203
+ isMenuOpen: true
204
+ })));
205
+ const headerElement = _react2.screen.getByRole('banner');
206
+ _react2.fireEvent.keyDown(headerElement, {
207
+ key: 'Escape'
208
+ });
209
+ expect(mockProps.onMenuToggle).toHaveBeenCalledWith(false);
210
+ });
211
+ });
@@ -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
+ });