@instructure/ui-breadcrumb 8.46.1 → 8.46.2-snapshot-1

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 (34) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/es/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.js +106 -0
  3. package/es/Breadcrumb/__new-tests__/Breadcrumb.test.js +92 -0
  4. package/lib/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.js +108 -0
  5. package/lib/Breadcrumb/__new-tests__/Breadcrumb.test.js +93 -0
  6. package/package.json +17 -15
  7. package/src/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.tsx +123 -0
  8. package/src/Breadcrumb/__new-tests__/Breadcrumb.test.tsx +109 -0
  9. package/tsconfig.build.json +3 -3
  10. package/tsconfig.build.tsbuildinfo +1 -1
  11. package/types/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.d.ts +2 -0
  12. package/types/Breadcrumb/BreadcrumbLink/__new-tests__/BreadcrumbLink.test.d.ts.map +1 -0
  13. package/types/Breadcrumb/__new-tests__/Breadcrumb.test.d.ts +2 -0
  14. package/types/Breadcrumb/__new-tests__/Breadcrumb.test.d.ts.map +1 -0
  15. package/es/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.js +0 -28
  16. package/es/Breadcrumb/BreadcrumbLink/locator.js +0 -26
  17. package/es/Breadcrumb/BreadcrumbLocator.js +0 -37
  18. package/es/Breadcrumb/locator.js +0 -26
  19. package/lib/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.js +0 -35
  20. package/lib/Breadcrumb/BreadcrumbLink/locator.js +0 -38
  21. package/lib/Breadcrumb/BreadcrumbLocator.js +0 -49
  22. package/lib/Breadcrumb/locator.js +0 -38
  23. package/src/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.ts +0 -29
  24. package/src/Breadcrumb/BreadcrumbLink/locator.ts +0 -27
  25. package/src/Breadcrumb/BreadcrumbLocator.ts +0 -39
  26. package/src/Breadcrumb/locator.ts +0 -27
  27. package/types/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.d.ts +0 -566
  28. package/types/Breadcrumb/BreadcrumbLink/BreadcrumbLinkLocator.d.ts.map +0 -1
  29. package/types/Breadcrumb/BreadcrumbLink/locator.d.ts +0 -4
  30. package/types/Breadcrumb/BreadcrumbLink/locator.d.ts.map +0 -1
  31. package/types/Breadcrumb/BreadcrumbLocator.d.ts +0 -1963
  32. package/types/Breadcrumb/BreadcrumbLocator.d.ts.map +0 -1
  33. package/types/Breadcrumb/locator.d.ts +0 -4
  34. package/types/Breadcrumb/locator.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [8.46.2-snapshot-1](https://github.com/instructure/instructure-ui/compare/v8.46.1...v8.46.2-snapshot-1) (2023-10-16)
7
+
8
+ **Note:** Version bump only for package @instructure/ui-breadcrumb
9
+
10
+
11
+
12
+
13
+
6
14
  ## [8.46.1](https://github.com/instructure/instructure-ui/compare/v8.46.0...v8.46.1) (2023-10-13)
7
15
 
8
16
  **Note:** Version bump only for package @instructure/ui-breadcrumb
@@ -0,0 +1,106 @@
1
+ var _BreadcrumbLink, _BreadcrumbLink2, _BreadcrumbLink3, _BreadcrumbLink4, _BreadcrumbLink5, _BreadcrumbLink6;
2
+ /*
3
+ * The MIT License (MIT)
4
+ *
5
+ * Copyright (c) 2015 - present Instructure, Inc.
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ */
25
+
26
+ import React from 'react';
27
+ import { fireEvent, render, screen } from '@testing-library/react';
28
+ import '@testing-library/jest-dom/extend-expect';
29
+ import { runAxeCheck } from '@instructure/ui-axe-check';
30
+ import { BreadcrumbLink } from '../index';
31
+ const TEST_TEXT_01 = 'Account';
32
+ const TEST_LINK = 'http://instructure-test.com';
33
+ const TEST_TO = '/example';
34
+ const originalResizeObserver = global.ResizeObserver;
35
+ describe('<BreadcrumbLink />', () => {
36
+ beforeAll(() => {
37
+ // Mock for ResizeObserver browser API
38
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
39
+ observe: jest.fn(),
40
+ unobserve: jest.fn(),
41
+ disconnect: jest.fn()
42
+ }));
43
+ });
44
+ it('should render an anchor tag when given a href prop', () => {
45
+ render(_BreadcrumbLink || (_BreadcrumbLink = /*#__PURE__*/React.createElement(BreadcrumbLink, {
46
+ href: TEST_LINK
47
+ }, TEST_TEXT_01)));
48
+ const anchor = screen.getByRole('link');
49
+ expect(anchor).toHaveAttribute('href', TEST_LINK);
50
+ });
51
+ it('should render as a button and respond to onClick event', () => {
52
+ const onClick = jest.fn();
53
+ render( /*#__PURE__*/React.createElement(BreadcrumbLink, {
54
+ onClick: onClick
55
+ }, TEST_TEXT_01));
56
+ const button = screen.getByRole('button');
57
+ fireEvent.click(button);
58
+ expect(onClick).toHaveBeenCalledTimes(1);
59
+ });
60
+ it('should allow to prop to pass through', () => {
61
+ const _render = render(_BreadcrumbLink2 || (_BreadcrumbLink2 = /*#__PURE__*/React.createElement(BreadcrumbLink, {
62
+ to: TEST_TO
63
+ }, TEST_TEXT_01))),
64
+ container = _render.container;
65
+ const link = container.querySelector('a');
66
+ expect(link).toBeInTheDocument();
67
+ expect(link).toHaveAttribute('to', TEST_TO);
68
+ });
69
+ it('should not render a link when not given an href prop', () => {
70
+ const _render2 = render(_BreadcrumbLink3 || (_BreadcrumbLink3 = /*#__PURE__*/React.createElement(BreadcrumbLink, null, TEST_TEXT_01))),
71
+ container = _render2.container;
72
+ const elementWithHref = container.querySelector('[href]');
73
+ const anchor = container.querySelector('a');
74
+ const span = container.querySelector('span');
75
+ expect(elementWithHref).toBeNull();
76
+ expect(anchor).toBeNull();
77
+ expect(span).toBeInTheDocument();
78
+ expect(span).toHaveTextContent(TEST_TEXT_01);
79
+ });
80
+ it('should not render a button when not given an onClick prop', () => {
81
+ const _render3 = render(_BreadcrumbLink4 || (_BreadcrumbLink4 = /*#__PURE__*/React.createElement(BreadcrumbLink, null, TEST_TEXT_01))),
82
+ container = _render3.container;
83
+ const button = container.querySelector('button');
84
+ const span = container.querySelector('span');
85
+ expect(button).toBeNull();
86
+ expect(span).toBeInTheDocument();
87
+ expect(span).toHaveTextContent(TEST_TEXT_01);
88
+ });
89
+ it('should meet a11y standards as a link', async () => {
90
+ const _render4 = render(_BreadcrumbLink5 || (_BreadcrumbLink5 = /*#__PURE__*/React.createElement(BreadcrumbLink, {
91
+ href: TEST_LINK
92
+ }, TEST_TEXT_01))),
93
+ container = _render4.container;
94
+ const axeCheck = await runAxeCheck(container);
95
+ expect(axeCheck).toBe(true);
96
+ });
97
+ it('should meet a11y standards as a span', async () => {
98
+ const _render5 = render(_BreadcrumbLink6 || (_BreadcrumbLink6 = /*#__PURE__*/React.createElement(BreadcrumbLink, null, TEST_TEXT_01))),
99
+ container = _render5.container;
100
+ const axeCheck = await runAxeCheck(container);
101
+ expect(axeCheck).toBe(true);
102
+ });
103
+ afterAll(() => {
104
+ global.ResizeObserver = originalResizeObserver;
105
+ });
106
+ });
@@ -0,0 +1,92 @@
1
+ var _Breadcrumb, _Breadcrumb2, _Breadcrumb3;
2
+ /*
3
+ * The MIT License (MIT)
4
+ *
5
+ * Copyright (c) 2015 - present Instructure, Inc.
6
+ *
7
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ * of this software and associated documentation files (the "Software"), to deal
9
+ * in the Software without restriction, including without limitation the rights
10
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ * copies of the Software, and to permit persons to whom the Software is
12
+ * furnished to do so, subject to the following conditions:
13
+ *
14
+ * The above copyright notice and this permission notice shall be included in all
15
+ * copies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ */
25
+
26
+ import React from 'react';
27
+ import { render, screen } from '@testing-library/react';
28
+ import '@testing-library/jest-dom/extend-expect';
29
+
30
+ // eslint-disable-next-line no-restricted-imports
31
+ import { generateA11yTests } from '@instructure/ui-scripts/lib/test/generateA11yTests';
32
+ import { runAxeCheck } from '@instructure/ui-axe-check';
33
+ import { Breadcrumb } from '../index';
34
+ import BreadcrumbExamples from '../__examples__/Breadcrumb.examples';
35
+ const TEST_LABEL = 'You are here:';
36
+ const TEST_TEXT_01 = 'Account';
37
+ const TEST_TEXT_02 = 'Settings';
38
+ const TEST_LINK = 'http://instructure-test.com';
39
+ const originalResizeObserver = global.ResizeObserver;
40
+ describe('<Breadcrumb />', () => {
41
+ beforeAll(() => {
42
+ // Mock for ResizeObserver browser API
43
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
44
+ observe: jest.fn(),
45
+ unobserve: jest.fn(),
46
+ disconnect: jest.fn()
47
+ }));
48
+ });
49
+ it('should be accessible', async () => {
50
+ const _render = render(_Breadcrumb || (_Breadcrumb = /*#__PURE__*/React.createElement(Breadcrumb, {
51
+ label: TEST_LABEL
52
+ }, /*#__PURE__*/React.createElement(Breadcrumb.Link, {
53
+ href: TEST_LINK
54
+ }, TEST_TEXT_01), /*#__PURE__*/React.createElement(Breadcrumb.Link, null, TEST_TEXT_02)))),
55
+ container = _render.container;
56
+ const axeCheck = await runAxeCheck(container);
57
+ expect(axeCheck).toBe(true);
58
+ });
59
+ describe('with generated examples', () => {
60
+ const generatedComponents = generateA11yTests(Breadcrumb, BreadcrumbExamples);
61
+ it.each(generatedComponents)('should be accessible with example: $description', async ({
62
+ content
63
+ }) => {
64
+ const _render2 = render(content),
65
+ container = _render2.container;
66
+ const axeCheck = await runAxeCheck(container);
67
+ expect(axeCheck).toBe(true);
68
+ });
69
+ });
70
+ it('should render the label as an aria-label attribute', () => {
71
+ render(_Breadcrumb2 || (_Breadcrumb2 = /*#__PURE__*/React.createElement(Breadcrumb, {
72
+ label: TEST_LABEL
73
+ }, /*#__PURE__*/React.createElement(Breadcrumb.Link, null, TEST_TEXT_01))));
74
+ const label = screen.getByLabelText(TEST_LABEL);
75
+ expect(label).toBeInTheDocument();
76
+ expect(label).toHaveAttribute('aria-label', TEST_LABEL);
77
+ });
78
+ it('should render an icon as a separator', () => {
79
+ const _render3 = render(_Breadcrumb3 || (_Breadcrumb3 = /*#__PURE__*/React.createElement(Breadcrumb, {
80
+ label: TEST_LABEL
81
+ }, /*#__PURE__*/React.createElement(Breadcrumb.Link, {
82
+ href: TEST_LINK
83
+ }, TEST_TEXT_01), /*#__PURE__*/React.createElement(Breadcrumb.Link, null, TEST_TEXT_02)))),
84
+ container = _render3.container;
85
+ const icon = container.querySelector('svg');
86
+ expect(icon).toBeInTheDocument();
87
+ expect(icon).toHaveAttribute('aria-hidden', 'true');
88
+ });
89
+ afterAll(() => {
90
+ global.ResizeObserver = originalResizeObserver;
91
+ });
92
+ });
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ require("@testing-library/jest-dom/extend-expect");
7
+ var _runAxeCheck = require("@instructure/ui-axe-check/lib/runAxeCheck.js");
8
+ var _index = require("../index");
9
+ var _BreadcrumbLink, _BreadcrumbLink2, _BreadcrumbLink3, _BreadcrumbLink4, _BreadcrumbLink5, _BreadcrumbLink6;
10
+ /*
11
+ * The MIT License (MIT)
12
+ *
13
+ * Copyright (c) 2015 - present Instructure, Inc.
14
+ *
15
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
16
+ * of this software and associated documentation files (the "Software"), to deal
17
+ * in the Software without restriction, including without limitation the rights
18
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
19
+ * copies of the Software, and to permit persons to whom the Software is
20
+ * furnished to do so, subject to the following conditions:
21
+ *
22
+ * The above copyright notice and this permission notice shall be included in all
23
+ * copies or substantial portions of the Software.
24
+ *
25
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
27
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
28
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
29
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
30
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31
+ * SOFTWARE.
32
+ */
33
+ const TEST_TEXT_01 = 'Account';
34
+ const TEST_LINK = 'http://instructure-test.com';
35
+ const TEST_TO = '/example';
36
+ const originalResizeObserver = global.ResizeObserver;
37
+ describe('<BreadcrumbLink />', () => {
38
+ beforeAll(() => {
39
+ // Mock for ResizeObserver browser API
40
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
41
+ observe: jest.fn(),
42
+ unobserve: jest.fn(),
43
+ disconnect: jest.fn()
44
+ }));
45
+ });
46
+ it('should render an anchor tag when given a href prop', () => {
47
+ (0, _react2.render)(_BreadcrumbLink || (_BreadcrumbLink = /*#__PURE__*/_react.default.createElement(_index.BreadcrumbLink, {
48
+ href: TEST_LINK
49
+ }, TEST_TEXT_01)));
50
+ const anchor = _react2.screen.getByRole('link');
51
+ expect(anchor).toHaveAttribute('href', TEST_LINK);
52
+ });
53
+ it('should render as a button and respond to onClick event', () => {
54
+ const onClick = jest.fn();
55
+ (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_index.BreadcrumbLink, {
56
+ onClick: onClick
57
+ }, TEST_TEXT_01));
58
+ const button = _react2.screen.getByRole('button');
59
+ _react2.fireEvent.click(button);
60
+ expect(onClick).toHaveBeenCalledTimes(1);
61
+ });
62
+ it('should allow to prop to pass through', () => {
63
+ const _render = (0, _react2.render)(_BreadcrumbLink2 || (_BreadcrumbLink2 = /*#__PURE__*/_react.default.createElement(_index.BreadcrumbLink, {
64
+ to: TEST_TO
65
+ }, TEST_TEXT_01))),
66
+ container = _render.container;
67
+ const link = container.querySelector('a');
68
+ expect(link).toBeInTheDocument();
69
+ expect(link).toHaveAttribute('to', TEST_TO);
70
+ });
71
+ it('should not render a link when not given an href prop', () => {
72
+ const _render2 = (0, _react2.render)(_BreadcrumbLink3 || (_BreadcrumbLink3 = /*#__PURE__*/_react.default.createElement(_index.BreadcrumbLink, null, TEST_TEXT_01))),
73
+ container = _render2.container;
74
+ const elementWithHref = container.querySelector('[href]');
75
+ const anchor = container.querySelector('a');
76
+ const span = container.querySelector('span');
77
+ expect(elementWithHref).toBeNull();
78
+ expect(anchor).toBeNull();
79
+ expect(span).toBeInTheDocument();
80
+ expect(span).toHaveTextContent(TEST_TEXT_01);
81
+ });
82
+ it('should not render a button when not given an onClick prop', () => {
83
+ const _render3 = (0, _react2.render)(_BreadcrumbLink4 || (_BreadcrumbLink4 = /*#__PURE__*/_react.default.createElement(_index.BreadcrumbLink, null, TEST_TEXT_01))),
84
+ container = _render3.container;
85
+ const button = container.querySelector('button');
86
+ const span = container.querySelector('span');
87
+ expect(button).toBeNull();
88
+ expect(span).toBeInTheDocument();
89
+ expect(span).toHaveTextContent(TEST_TEXT_01);
90
+ });
91
+ it('should meet a11y standards as a link', async () => {
92
+ const _render4 = (0, _react2.render)(_BreadcrumbLink5 || (_BreadcrumbLink5 = /*#__PURE__*/_react.default.createElement(_index.BreadcrumbLink, {
93
+ href: TEST_LINK
94
+ }, TEST_TEXT_01))),
95
+ container = _render4.container;
96
+ const axeCheck = await (0, _runAxeCheck.runAxeCheck)(container);
97
+ expect(axeCheck).toBe(true);
98
+ });
99
+ it('should meet a11y standards as a span', async () => {
100
+ const _render5 = (0, _react2.render)(_BreadcrumbLink6 || (_BreadcrumbLink6 = /*#__PURE__*/_react.default.createElement(_index.BreadcrumbLink, null, TEST_TEXT_01))),
101
+ container = _render5.container;
102
+ const axeCheck = await (0, _runAxeCheck.runAxeCheck)(container);
103
+ expect(axeCheck).toBe(true);
104
+ });
105
+ afterAll(() => {
106
+ global.ResizeObserver = originalResizeObserver;
107
+ });
108
+ });
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ require("@testing-library/jest-dom/extend-expect");
7
+ var _generateA11yTests = require("@instructure/ui-scripts/lib/test/generateA11yTests");
8
+ var _runAxeCheck = require("@instructure/ui-axe-check/lib/runAxeCheck.js");
9
+ var _index = require("../index");
10
+ var _Breadcrumb4 = _interopRequireDefault(require("../__examples__/Breadcrumb.examples"));
11
+ var _Breadcrumb, _Breadcrumb2, _Breadcrumb3;
12
+ /*
13
+ * The MIT License (MIT)
14
+ *
15
+ * Copyright (c) 2015 - present Instructure, Inc.
16
+ *
17
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
18
+ * of this software and associated documentation files (the "Software"), to deal
19
+ * in the Software without restriction, including without limitation the rights
20
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
21
+ * copies of the Software, and to permit persons to whom the Software is
22
+ * furnished to do so, subject to the following conditions:
23
+ *
24
+ * The above copyright notice and this permission notice shall be included in all
25
+ * copies or substantial portions of the Software.
26
+ *
27
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
28
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
29
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
30
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
32
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
33
+ * SOFTWARE.
34
+ */
35
+ // eslint-disable-next-line no-restricted-imports
36
+ const TEST_LABEL = 'You are here:';
37
+ const TEST_TEXT_01 = 'Account';
38
+ const TEST_TEXT_02 = 'Settings';
39
+ const TEST_LINK = 'http://instructure-test.com';
40
+ const originalResizeObserver = global.ResizeObserver;
41
+ describe('<Breadcrumb />', () => {
42
+ beforeAll(() => {
43
+ // Mock for ResizeObserver browser API
44
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
45
+ observe: jest.fn(),
46
+ unobserve: jest.fn(),
47
+ disconnect: jest.fn()
48
+ }));
49
+ });
50
+ it('should be accessible', async () => {
51
+ const _render = (0, _react2.render)(_Breadcrumb || (_Breadcrumb = /*#__PURE__*/_react.default.createElement(_index.Breadcrumb, {
52
+ label: TEST_LABEL
53
+ }, /*#__PURE__*/_react.default.createElement(_index.Breadcrumb.Link, {
54
+ href: TEST_LINK
55
+ }, TEST_TEXT_01), /*#__PURE__*/_react.default.createElement(_index.Breadcrumb.Link, null, TEST_TEXT_02)))),
56
+ container = _render.container;
57
+ const axeCheck = await (0, _runAxeCheck.runAxeCheck)(container);
58
+ expect(axeCheck).toBe(true);
59
+ });
60
+ describe('with generated examples', () => {
61
+ const generatedComponents = (0, _generateA11yTests.generateA11yTests)(_index.Breadcrumb, _Breadcrumb4.default);
62
+ it.each(generatedComponents)('should be accessible with example: $description', async ({
63
+ content
64
+ }) => {
65
+ const _render2 = (0, _react2.render)(content),
66
+ container = _render2.container;
67
+ const axeCheck = await (0, _runAxeCheck.runAxeCheck)(container);
68
+ expect(axeCheck).toBe(true);
69
+ });
70
+ });
71
+ it('should render the label as an aria-label attribute', () => {
72
+ (0, _react2.render)(_Breadcrumb2 || (_Breadcrumb2 = /*#__PURE__*/_react.default.createElement(_index.Breadcrumb, {
73
+ label: TEST_LABEL
74
+ }, /*#__PURE__*/_react.default.createElement(_index.Breadcrumb.Link, null, TEST_TEXT_01))));
75
+ const label = _react2.screen.getByLabelText(TEST_LABEL);
76
+ expect(label).toBeInTheDocument();
77
+ expect(label).toHaveAttribute('aria-label', TEST_LABEL);
78
+ });
79
+ it('should render an icon as a separator', () => {
80
+ const _render3 = (0, _react2.render)(_Breadcrumb3 || (_Breadcrumb3 = /*#__PURE__*/_react.default.createElement(_index.Breadcrumb, {
81
+ label: TEST_LABEL
82
+ }, /*#__PURE__*/_react.default.createElement(_index.Breadcrumb.Link, {
83
+ href: TEST_LINK
84
+ }, TEST_TEXT_01), /*#__PURE__*/_react.default.createElement(_index.Breadcrumb.Link, null, TEST_TEXT_02)))),
85
+ container = _render3.container;
86
+ const icon = container.querySelector('svg');
87
+ expect(icon).toBeInTheDocument();
88
+ expect(icon).toHaveAttribute('aria-hidden', 'true');
89
+ });
90
+ afterAll(() => {
91
+ global.ResizeObserver = originalResizeObserver;
92
+ });
93
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instructure/ui-breadcrumb",
3
- "version": "8.46.1",
3
+ "version": "8.46.2-snapshot-1",
4
4
  "description": "A breadcrumb component",
5
5
  "author": "Instructure, Inc. Engineering and Product Design",
6
6
  "module": "./es/index.js",
@@ -23,23 +23,25 @@
23
23
  },
24
24
  "license": "MIT",
25
25
  "devDependencies": {
26
- "@instructure/ui-babel-preset": "8.46.1",
27
- "@instructure/ui-test-locator": "8.46.1",
28
- "@instructure/ui-test-utils": "8.46.1",
29
- "@instructure/ui-themes": "8.46.1"
26
+ "@instructure/ui-axe-check": "8.46.2-snapshot-1",
27
+ "@instructure/ui-babel-preset": "8.46.2-snapshot-1",
28
+ "@instructure/ui-scripts": "8.46.2-snapshot-1",
29
+ "@instructure/ui-themes": "8.46.2-snapshot-1",
30
+ "@testing-library/jest-dom": "^5.17.0",
31
+ "@testing-library/react": "^14.0.0"
30
32
  },
31
33
  "dependencies": {
32
34
  "@babel/runtime": "^7.22.15",
33
- "@instructure/emotion": "8.46.1",
34
- "@instructure/shared-types": "8.46.1",
35
- "@instructure/ui-icons": "8.46.1",
36
- "@instructure/ui-link": "8.46.1",
37
- "@instructure/ui-prop-types": "8.46.1",
38
- "@instructure/ui-react-utils": "8.46.1",
39
- "@instructure/ui-testable": "8.46.1",
40
- "@instructure/ui-truncate-text": "8.46.1",
41
- "@instructure/ui-utils": "8.46.1",
42
- "@instructure/ui-view": "8.46.1",
35
+ "@instructure/emotion": "8.46.2-snapshot-1",
36
+ "@instructure/shared-types": "8.46.2-snapshot-1",
37
+ "@instructure/ui-icons": "8.46.2-snapshot-1",
38
+ "@instructure/ui-link": "8.46.2-snapshot-1",
39
+ "@instructure/ui-prop-types": "8.46.2-snapshot-1",
40
+ "@instructure/ui-react-utils": "8.46.2-snapshot-1",
41
+ "@instructure/ui-testable": "8.46.2-snapshot-1",
42
+ "@instructure/ui-truncate-text": "8.46.2-snapshot-1",
43
+ "@instructure/ui-utils": "8.46.2-snapshot-1",
44
+ "@instructure/ui-view": "8.46.2-snapshot-1",
43
45
  "prop-types": "^15.8.1"
44
46
  },
45
47
  "peerDependencies": {
@@ -0,0 +1,123 @@
1
+ /*
2
+ * The MIT License (MIT)
3
+ *
4
+ * Copyright (c) 2015 - present Instructure, Inc.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in all
14
+ * copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ import React from 'react'
26
+ import { fireEvent, render, screen } from '@testing-library/react'
27
+ import '@testing-library/jest-dom/extend-expect'
28
+
29
+ import { runAxeCheck } from '@instructure/ui-axe-check'
30
+ import { BreadcrumbLink } from '../index'
31
+
32
+ const TEST_TEXT_01 = 'Account'
33
+ const TEST_LINK = 'http://instructure-test.com'
34
+ const TEST_TO = '/example'
35
+
36
+ const originalResizeObserver = global.ResizeObserver
37
+
38
+ describe('<BreadcrumbLink />', () => {
39
+ beforeAll(() => {
40
+ // Mock for ResizeObserver browser API
41
+ global.ResizeObserver = jest.fn().mockImplementation(() => ({
42
+ observe: jest.fn(),
43
+ unobserve: jest.fn(),
44
+ disconnect: jest.fn()
45
+ }))
46
+ })
47
+
48
+ it('should render an anchor tag when given a href prop', () => {
49
+ render(<BreadcrumbLink href={TEST_LINK}>{TEST_TEXT_01}</BreadcrumbLink>)
50
+ const anchor = screen.getByRole('link')
51
+
52
+ expect(anchor).toHaveAttribute('href', TEST_LINK)
53
+ })
54
+
55
+ it('should render as a button and respond to onClick event', () => {
56
+ const onClick = jest.fn()
57
+
58
+ render(<BreadcrumbLink onClick={onClick}>{TEST_TEXT_01}</BreadcrumbLink>)
59
+ const button = screen.getByRole('button')
60
+
61
+ fireEvent.click(button)
62
+
63
+ expect(onClick).toHaveBeenCalledTimes(1)
64
+ })
65
+
66
+ it('should allow to prop to pass through', () => {
67
+ const { container } = render(
68
+ <BreadcrumbLink to={TEST_TO}>{TEST_TEXT_01}</BreadcrumbLink>
69
+ )
70
+ const link = container.querySelector('a')
71
+
72
+ expect(link).toBeInTheDocument()
73
+ expect(link).toHaveAttribute('to', TEST_TO)
74
+ })
75
+
76
+ it('should not render a link when not given an href prop', () => {
77
+ const { container } = render(
78
+ <BreadcrumbLink>{TEST_TEXT_01}</BreadcrumbLink>
79
+ )
80
+ const elementWithHref = container.querySelector('[href]')
81
+ const anchor = container.querySelector('a')
82
+ const span = container.querySelector('span')
83
+
84
+ expect(elementWithHref).toBeNull()
85
+ expect(anchor).toBeNull()
86
+ expect(span).toBeInTheDocument()
87
+ expect(span).toHaveTextContent(TEST_TEXT_01)
88
+ })
89
+
90
+ it('should not render a button when not given an onClick prop', () => {
91
+ const { container } = render(
92
+ <BreadcrumbLink>{TEST_TEXT_01}</BreadcrumbLink>
93
+ )
94
+ const button = container.querySelector('button')
95
+ const span = container.querySelector('span')
96
+
97
+ expect(button).toBeNull()
98
+ expect(span).toBeInTheDocument()
99
+ expect(span).toHaveTextContent(TEST_TEXT_01)
100
+ })
101
+
102
+ it('should meet a11y standards as a link', async () => {
103
+ const { container } = render(
104
+ <BreadcrumbLink href={TEST_LINK}>{TEST_TEXT_01}</BreadcrumbLink>
105
+ )
106
+ const axeCheck = await runAxeCheck(container)
107
+
108
+ expect(axeCheck).toBe(true)
109
+ })
110
+
111
+ it('should meet a11y standards as a span', async () => {
112
+ const { container } = render(
113
+ <BreadcrumbLink>{TEST_TEXT_01}</BreadcrumbLink>
114
+ )
115
+ const axeCheck = await runAxeCheck(container)
116
+
117
+ expect(axeCheck).toBe(true)
118
+ })
119
+
120
+ afterAll(() => {
121
+ global.ResizeObserver = originalResizeObserver
122
+ })
123
+ })