@windstream/react-shared-components 0.1.94 → 0.1.95
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/README.md +635 -635
- package/dist/contentful/index.esm.js +3 -3
- package/dist/contentful/index.esm.js.map +1 -1
- package/dist/contentful/index.js +3 -3
- package/dist/contentful/index.js.map +1 -1
- package/dist/core.d.ts +4 -4
- package/dist/index.esm.js +5 -13
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +5 -13
- package/dist/index.js.map +1 -1
- package/dist/next/index.esm.js +2 -2
- package/dist/next/index.esm.js.map +1 -1
- package/dist/next/index.js +2 -2
- package/dist/next/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utils/index.esm.js +1 -1
- package/dist/utils/index.esm.js.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/package.json +191 -191
- package/src/components/accordion/Accordion.stories.tsx +230 -230
- package/src/components/accordion/index.test.tsx +270 -270
- package/src/components/accordion/index.tsx +70 -70
- package/src/components/accordion/types.ts +12 -12
- package/src/components/alert-card/AlertCard.stories.tsx +171 -171
- package/src/components/alert-card/index.test.tsx +152 -152
- package/src/components/alert-card/index.tsx +41 -41
- package/src/components/alert-card/types.ts +13 -13
- package/src/components/animation-wrapper/index.test.tsx +424 -424
- package/src/components/animation-wrapper/index.tsx +129 -129
- package/src/components/animation-wrapper/types.ts +11 -11
- package/src/components/brand-button/BrandButton.stories.tsx +223 -223
- package/src/components/brand-button/helpers.ts +35 -35
- package/src/components/brand-button/index.test.tsx +292 -292
- package/src/components/brand-button/index.tsx +120 -120
- package/src/components/brand-button/types.ts +38 -38
- package/src/components/button/Button.stories.tsx +108 -108
- package/src/components/button/index.test.tsx +91 -91
- package/src/components/button/index.tsx +27 -27
- package/src/components/button/types.ts +14 -14
- package/src/components/call-button/CallButton.stories.tsx +324 -324
- package/src/components/call-button/index.test.tsx +260 -260
- package/src/components/call-button/index.tsx +106 -106
- package/src/components/call-button/types.ts +16 -16
- package/src/components/checkbox/Checkbox.stories.tsx +247 -247
- package/src/components/checkbox/index.test.tsx +252 -252
- package/src/components/checkbox/index.tsx +197 -197
- package/src/components/checkbox/types.ts +27 -27
- package/src/components/checklist/Checklist.stories.tsx +150 -150
- package/src/components/checklist/index.test.tsx +231 -231
- package/src/components/checklist/index.tsx +96 -96
- package/src/components/checklist/types.ts +23 -23
- package/src/components/collapse/Collapse.stories.tsx +255 -255
- package/src/components/collapse/index.test.tsx +277 -277
- package/src/components/collapse/index.tsx +47 -47
- package/src/components/collapse/types.ts +6 -6
- package/src/components/divider/Divider.stories.tsx +205 -205
- package/src/components/divider/index.test.tsx +53 -53
- package/src/components/divider/index.tsx +22 -22
- package/src/components/divider/type.ts +3 -3
- package/src/components/image/Image.stories.tsx +113 -113
- package/src/components/image/index.test.tsx +174 -174
- package/src/components/image/index.tsx +25 -25
- package/src/components/image/types.ts +40 -40
- package/src/components/input/Input.stories.tsx +325 -325
- package/src/components/input/index.test.tsx +348 -348
- package/src/components/input/index.tsx +177 -177
- package/src/components/input/types.ts +37 -37
- package/src/components/link/Link.stories.tsx +163 -163
- package/src/components/link/index.test.tsx +199 -199
- package/src/components/link/index.tsx +116 -116
- package/src/components/link/types.ts +25 -25
- package/src/components/list/List.stories.tsx +272 -272
- package/src/components/list/index.test.tsx +166 -166
- package/src/components/list/index.tsx +88 -88
- package/src/components/list/list-item/index.tsx +38 -38
- package/src/components/list/list-item/types.ts +13 -13
- package/src/components/list/types.ts +29 -29
- package/src/components/material-icon/MaterialIcon.stories.tsx +322 -322
- package/src/components/material-icon/constants.ts +99 -99
- package/src/components/material-icon/index.test.tsx +130 -130
- package/src/components/material-icon/index.tsx +47 -47
- package/src/components/material-icon/types.ts +31 -31
- package/src/components/modal/Modal.stories.tsx +171 -171
- package/src/components/modal/index.test.tsx +310 -310
- package/src/components/modal/index.tsx +164 -164
- package/src/components/modal/types.ts +24 -24
- package/src/components/next-image/index.test.tsx +406 -406
- package/src/components/next-image/index.tsx +74 -74
- package/src/components/next-image/types.ts +1 -1
- package/src/components/pagination/index.test.tsx +521 -521
- package/src/components/pagination/index.tsx +91 -91
- package/src/components/pagination/types.ts +6 -6
- package/src/components/radio-button/RadioButton.stories.tsx +307 -307
- package/src/components/radio-button/index.test.tsx +151 -151
- package/src/components/radio-button/index.tsx +75 -75
- package/src/components/radio-button/types.ts +21 -21
- package/src/components/see-more/SeeMore.stories.tsx +181 -181
- package/src/components/see-more/index.test.tsx +96 -96
- package/src/components/see-more/index.tsx +44 -44
- package/src/components/see-more/types.ts +4 -4
- package/src/components/select/Select.stories.tsx +411 -411
- package/src/components/select/index.test.tsx +256 -256
- package/src/components/select/index.tsx +155 -155
- package/src/components/select/types.ts +36 -36
- package/src/components/select-plan-button/SelectPlanButton.stories.tsx +184 -184
- package/src/components/select-plan-button/index.test.tsx +173 -173
- package/src/components/select-plan-button/index.tsx +63 -63
- package/src/components/select-plan-button/types.ts +17 -17
- package/src/components/skeleton/Skeleton.stories.tsx +179 -179
- package/src/components/skeleton/index.test.tsx +74 -74
- package/src/components/skeleton/index.tsx +61 -61
- package/src/components/skeleton/types.ts +4 -4
- package/src/components/spinner/Spinner.stories.tsx +335 -335
- package/src/components/spinner/index.test.tsx +76 -76
- package/src/components/spinner/index.tsx +44 -44
- package/src/components/spinner/types.ts +5 -5
- package/src/components/text/Text.stories.tsx +321 -321
- package/src/components/text/index.test.tsx +65 -65
- package/src/components/text/index.tsx +25 -25
- package/src/components/text/types.ts +45 -45
- package/src/components/tooltip/Tooltip.stories.tsx +219 -219
- package/src/components/tooltip/index.test.tsx +50 -50
- package/src/components/tooltip/index.tsx +74 -74
- package/src/components/tooltip/types.ts +7 -7
- package/src/components/view-cart-button/ViewCartButton.stories.tsx +252 -252
- package/src/components/view-cart-button/index.test.tsx +57 -57
- package/src/components/view-cart-button/index.tsx +42 -42
- package/src/components/view-cart-button/types.ts +5 -5
- package/src/contentful/blocks/accordion/Accordion.stories.mocks.tsx +128 -128
- package/src/contentful/blocks/accordion/Accordion.stories.tsx +98 -98
- package/src/contentful/blocks/accordion/index.test.tsx +218 -218
- package/src/contentful/blocks/accordion/index.tsx +114 -114
- package/src/contentful/blocks/accordion/types.ts +34 -34
- package/src/contentful/blocks/address-input-banner/index.test.tsx +132 -132
- package/src/contentful/blocks/address-input-banner/index.tsx +52 -52
- package/src/contentful/blocks/address-input-banner/types.ts +14 -14
- package/src/contentful/blocks/anchored-bottom-banner/index.test.tsx +287 -287
- package/src/contentful/blocks/anchored-bottom-banner/index.tsx +181 -181
- package/src/contentful/blocks/anchored-bottom-banner/types.ts +13 -13
- package/src/contentful/blocks/blogs-grid/BlogGrid.stories.mocks.tsx +144 -144
- package/src/contentful/blocks/blogs-grid/BlogGrid.stories.tsx +157 -157
- package/src/contentful/blocks/blogs-grid/index.test.tsx +355 -355
- package/src/contentful/blocks/blogs-grid/index.tsx +134 -134
- package/src/contentful/blocks/blogs-grid/types.ts +26 -26
- package/src/contentful/blocks/blogs-grid-base/index.test.tsx +274 -274
- package/src/contentful/blocks/blogs-grid-base/index.tsx +119 -119
- package/src/contentful/blocks/blogs-grid-base/types.ts +36 -36
- package/src/contentful/blocks/breadcrumbs/BreadcrumbNavigation.stories.tsx +147 -147
- package/src/contentful/blocks/breadcrumbs/index.test.tsx +281 -281
- package/src/contentful/blocks/breadcrumbs/index.tsx +95 -95
- package/src/contentful/blocks/breadcrumbs/types.ts +8 -8
- package/src/contentful/blocks/button/Button.stories.tsx +40 -40
- package/src/contentful/blocks/button/index.test.tsx +339 -339
- package/src/contentful/blocks/button/index.tsx +131 -131
- package/src/contentful/blocks/button/types.ts +39 -39
- package/src/contentful/blocks/callout/Callout.stories.tsx +23 -23
- package/src/contentful/blocks/callout/index.test.tsx +539 -539
- package/src/contentful/blocks/callout/index.tsx +277 -277
- package/src/contentful/blocks/callout/types.ts +78 -78
- package/src/contentful/blocks/cards/Cards.stories.tsx +23 -23
- package/src/contentful/blocks/cards/blog-card/index.test.tsx +218 -218
- package/src/contentful/blocks/cards/blog-card/index.tsx +129 -129
- package/src/contentful/blocks/cards/blog-card/types.ts +34 -34
- package/src/contentful/blocks/cards/floating-image-card/index.test.tsx +201 -201
- package/src/contentful/blocks/cards/floating-image-card/index.tsx +119 -119
- package/src/contentful/blocks/cards/floating-image-card/types.ts +30 -30
- package/src/contentful/blocks/cards/full-image-card/index.test.tsx +216 -216
- package/src/contentful/blocks/cards/full-image-card/index.tsx +130 -130
- package/src/contentful/blocks/cards/full-image-card/types.ts +29 -29
- package/src/contentful/blocks/cards/index.test.tsx +39 -39
- package/src/contentful/blocks/cards/index.tsx +13 -13
- package/src/contentful/blocks/cards/product-card/index.test.tsx +263 -263
- package/src/contentful/blocks/cards/product-card/index.tsx +251 -251
- package/src/contentful/blocks/cards/product-card/types.ts +28 -28
- package/src/contentful/blocks/cards/simple-card/index.test.tsx +364 -364
- package/src/contentful/blocks/cards/simple-card/index.tsx +325 -325
- package/src/contentful/blocks/cards/simple-card/types.ts +71 -71
- package/src/contentful/blocks/cards/testimonial-card/index.test.tsx +180 -180
- package/src/contentful/blocks/cards/testimonial-card/index.tsx +90 -90
- package/src/contentful/blocks/cards/testimonial-card/types.tsx +12 -12
- package/src/contentful/blocks/cards/types.ts +1 -1
- package/src/contentful/blocks/carousel/Carousel.stories.tsx +23 -23
- package/src/contentful/blocks/carousel/helper.test.tsx +539 -539
- package/src/contentful/blocks/carousel/helper.tsx +494 -494
- package/src/contentful/blocks/carousel/index.test.tsx +308 -308
- package/src/contentful/blocks/carousel/index.tsx +87 -87
- package/src/contentful/blocks/carousel/types.test.ts +16 -16
- package/src/contentful/blocks/carousel/types.ts +145 -145
- package/src/contentful/blocks/cart-retention-banner/index.test.tsx +409 -409
- package/src/contentful/blocks/cart-retention-banner/index.tsx +109 -109
- package/src/contentful/blocks/cart-retention-banner/types.ts +11 -11
- package/src/contentful/blocks/comparison-table/index.test.tsx +114 -114
- package/src/contentful/blocks/comparison-table/index.tsx +29 -29
- package/src/contentful/blocks/comparison-table/types.ts +6 -6
- package/src/contentful/blocks/cookiebanner/index.test.tsx +277 -277
- package/src/contentful/blocks/cookiebanner/index.tsx +146 -146
- package/src/contentful/blocks/cookiebanner/type.ts +7 -7
- package/src/contentful/blocks/cta-callout/CtaCallout.stories.tsx +46 -46
- package/src/contentful/blocks/cta-callout/index.test.tsx +244 -244
- package/src/contentful/blocks/cta-callout/index.tsx +73 -73
- package/src/contentful/blocks/cta-callout/types.ts +26 -26
- package/src/contentful/blocks/dynamic-tabs/index.test.tsx +240 -240
- package/src/contentful/blocks/dynamic-tabs/index.tsx +204 -204
- package/src/contentful/blocks/dynamic-tabs/types.ts +21 -21
- package/src/contentful/blocks/email-input-block/index.test.tsx +213 -213
- package/src/contentful/blocks/email-input-block/index.tsx +121 -121
- package/src/contentful/blocks/email-input-block/types.ts +16 -16
- package/src/contentful/blocks/find-kinetic/FindKinetic.stories.tsx +23 -23
- package/src/contentful/blocks/find-kinetic/index.test.tsx +269 -269
- package/src/contentful/blocks/find-kinetic/index.tsx +138 -138
- package/src/contentful/blocks/find-kinetic/types.ts +20 -20
- package/src/contentful/blocks/floating-banner/FloatingBanner.stories.tsx +34 -34
- package/src/contentful/blocks/floating-banner/index.test.tsx +246 -246
- package/src/contentful/blocks/floating-banner/index.tsx +97 -97
- package/src/contentful/blocks/floating-banner/types.ts +22 -22
- package/src/contentful/blocks/footer/Footer.stories.tsx +317 -317
- package/src/contentful/blocks/footer/index.test.tsx +302 -302
- package/src/contentful/blocks/footer/index.tsx +91 -91
- package/src/contentful/blocks/footer/types.ts +13 -13
- package/src/contentful/blocks/image-promo-bar/ImagePromoBar.stories.tsx +23 -23
- package/src/contentful/blocks/image-promo-bar/helper.test.tsx +61 -61
- package/src/contentful/blocks/image-promo-bar/helper.tsx +28 -28
- package/src/contentful/blocks/image-promo-bar/index.test.tsx +467 -467
- package/src/contentful/blocks/image-promo-bar/index.tsx +8 -6
- package/src/contentful/blocks/image-promo-bar/types.ts +44 -44
- package/src/contentful/blocks/image-promo-bar/vimeo-embed.test.tsx +142 -142
- package/src/contentful/blocks/image-promo-bar/vimeo-embed.tsx +93 -93
- package/src/contentful/blocks/image-promo-bar/youtube-embed.test.tsx +104 -104
- package/src/contentful/blocks/image-promo-bar/youtube-embed.tsx +46 -46
- package/src/contentful/blocks/modal/constants.ts +53 -53
- package/src/contentful/blocks/modal/index.test.tsx +209 -209
- package/src/contentful/blocks/modal/index.tsx +108 -108
- package/src/contentful/blocks/modal/types.ts +12 -12
- package/src/contentful/blocks/navigation/Navigation.stories.mocks.tsx +78 -78
- package/src/contentful/blocks/navigation/Navigation.stories.tsx +138 -138
- package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.test.tsx +208 -208
- package/src/contentful/blocks/navigation/desktop-link-groups.tsx/index.tsx +141 -141
- package/src/contentful/blocks/navigation/index.test.tsx +924 -924
- package/src/contentful/blocks/navigation/index.tsx +569 -569
- package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.test.tsx +131 -131
- package/src/contentful/blocks/navigation/mobile-link-groups.tsx/index.tsx +82 -82
- package/src/contentful/blocks/navigation/types.ts +71 -71
- package/src/contentful/blocks/primary-hero/PrimaryHero.stories.tsx +23 -23
- package/src/contentful/blocks/primary-hero/index.test.tsx +286 -286
- package/src/contentful/blocks/primary-hero/index.tsx +239 -239
- package/src/contentful/blocks/primary-hero/types.ts +37 -37
- package/src/contentful/blocks/search-block/index.test.tsx +268 -268
- package/src/contentful/blocks/search-block/index.tsx +90 -90
- package/src/contentful/blocks/search-block/types.ts +15 -15
- package/src/contentful/blocks/shape-background-wrapper/ShapeBackgroundWrapper.stories.tsx +26 -26
- package/src/contentful/blocks/shape-background-wrapper/index.test.tsx +284 -284
- package/src/contentful/blocks/shape-background-wrapper/index.tsx +124 -124
- package/src/contentful/blocks/shape-background-wrapper/types.ts +36 -36
- package/src/contentful/blocks/text/Text.stories.tsx +23 -23
- package/src/contentful/blocks/text/index.test.tsx +36 -36
- package/src/contentful/blocks/text/index.tsx +12 -12
- package/src/contentful/blocks/text/types.ts +1 -1
- package/src/contentful/index.test.ts +45 -45
- package/src/contentful/index.ts +105 -105
- package/src/global-mocks/contentful/to-document.ts +25 -25
- package/src/global-mocks/cookie.ts +48 -48
- package/src/global-mocks/cx.ts +37 -37
- package/src/global-mocks/index.ts +89 -89
- package/src/global-mocks/speed-card-bg.ts +27 -27
- package/src/global-mocks/utm.ts +49 -49
- package/src/hooks/contentful/use-contentful-rich-text.test.tsx +1758 -1758
- package/src/hooks/contentful/use-contentful-rich-text.tsx +309 -309
- package/src/hooks/contentful/use-processed-check-list.test.tsx +277 -277
- package/src/hooks/contentful/use-processed-check-list.ts +63 -63
- package/src/hooks/use-body-scroll-lock.test.ts +134 -134
- package/src/hooks/use-body-scroll-lock.ts +34 -34
- package/src/hooks/use-carousel-swipe.test.ts +393 -393
- package/src/hooks/use-carousel-swipe.ts +264 -264
- package/src/hooks/use-outside-click.test.ts +142 -142
- package/src/hooks/use-outside-click.ts +17 -17
- package/src/index.ts +107 -107
- package/src/next/index.test.ts +7 -7
- package/src/next/index.ts +5 -5
- package/src/setupTests.ts +52 -52
- package/src/stories/DocsTemplate.tsx +24 -24
- package/src/styles/globals.css +343 -343
- package/src/types/global.d.ts +9 -9
- package/src/types/micro-components.ts +99 -99
- package/src/types/utm.ts +49 -49
- package/src/utils/contentful/to-document.test.ts +85 -85
- package/src/utils/contentful/to-document.ts +24 -24
- package/src/utils/cookie.test.ts +180 -180
- package/src/utils/cookie.ts +84 -84
- package/src/utils/cx.test.ts +90 -90
- package/src/utils/cx.ts +49 -49
- package/src/utils/index.test.ts +115 -115
- package/src/utils/index.ts +41 -41
- package/src/utils/speed-card-bg.test.ts +46 -46
- package/src/utils/speed-card-bg.ts +24 -24
- package/src/utils/utm.test.ts +359 -359
- package/src/utils/utm.ts +221 -221
|
@@ -1,292 +1,292 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { BrandButton } from "./index";
|
|
3
|
-
|
|
4
|
-
import { fireEvent, render, screen } from "@testing-library/react";
|
|
5
|
-
|
|
6
|
-
import "@testing-library/jest-dom";
|
|
7
|
-
|
|
8
|
-
describe("BrandButton", () => {
|
|
9
|
-
describe("Rendering", () => {
|
|
10
|
-
it("renders as a button by default", () => {
|
|
11
|
-
render(<BrandButton text="Click me" />);
|
|
12
|
-
expect(screen.getByRole("button")).toBeInTheDocument();
|
|
13
|
-
expect(screen.getByRole("button")).toHaveTextContent("Click me");
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it("renders as an anchor when as='a'", () => {
|
|
17
|
-
render(<BrandButton as="a" href="/test" text="Link" />);
|
|
18
|
-
const link = screen.getByRole("link");
|
|
19
|
-
expect(link).toBeInTheDocument();
|
|
20
|
-
expect(link).toHaveAttribute("href", "/test");
|
|
21
|
-
expect(link).toHaveTextContent("Link");
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
it("has correct displayName", () => {
|
|
25
|
-
expect(BrandButton.displayName).toBe("BrandButton");
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it("renders text prop content", () => {
|
|
29
|
-
render(<BrandButton text="Submit" />);
|
|
30
|
-
expect(screen.getByText("Submit")).toBeInTheDocument();
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
describe("Variants", () => {
|
|
35
|
-
it("applies primary_brand variant classes by default", () => {
|
|
36
|
-
render(<BrandButton text="Primary" />);
|
|
37
|
-
const btn = screen.getByRole("button");
|
|
38
|
-
expect(btn.className).toContain("button--primary_brand");
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
it("applies primary_inverse variant classes", () => {
|
|
42
|
-
render(<BrandButton variant="primary_inverse" text="Inverse" />);
|
|
43
|
-
const btn = screen.getByRole("button");
|
|
44
|
-
expect(btn.className).toContain("button--primary_inverse");
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
it("applies secondary variant classes", () => {
|
|
48
|
-
render(<BrandButton variant="secondary" text="Secondary" />);
|
|
49
|
-
const btn = screen.getByRole("button");
|
|
50
|
-
expect(btn.className).toContain("button--secondary");
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
describe("Loading state", () => {
|
|
55
|
-
it("shows spinner icon when isLoading is true", () => {
|
|
56
|
-
render(<BrandButton isLoading={true} text="Loading" />);
|
|
57
|
-
expect(screen.getByText("progress_activity")).toBeInTheDocument();
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it("disables button when isLoading is true", () => {
|
|
61
|
-
render(<BrandButton isLoading={true} text="Loading" />);
|
|
62
|
-
expect(screen.getByRole("button")).toBeDisabled();
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it("adds loading class when isLoading", () => {
|
|
66
|
-
render(<BrandButton isLoading={true} text="Loading" />);
|
|
67
|
-
const btn = screen.getByRole("button");
|
|
68
|
-
expect(btn.className).toContain("button--loading");
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it("does not show spinner when isLoading is false", () => {
|
|
72
|
-
render(<BrandButton text="Not Loading" />);
|
|
73
|
-
expect(screen.queryByText("progress_activity")).not.toBeInTheDocument();
|
|
74
|
-
});
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
describe("Disabled state", () => {
|
|
78
|
-
it("disables button when disabled prop is true", () => {
|
|
79
|
-
render(<BrandButton disabled={true} text="Disabled" />);
|
|
80
|
-
expect(screen.getByRole("button")).toBeDisabled();
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it("adds disabled class when disabled", () => {
|
|
84
|
-
render(<BrandButton disabled={true} text="Disabled" />);
|
|
85
|
-
const btn = screen.getByRole("button");
|
|
86
|
-
expect(btn.className).toContain("button--disabled");
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
it("applies cursor-not-allowed when disabled", () => {
|
|
90
|
-
render(<BrandButton disabled={true} text="Disabled" />);
|
|
91
|
-
const btn = screen.getByRole("button");
|
|
92
|
-
expect(btn.className).toContain("cursor-not-allowed");
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
describe("Label prop", () => {
|
|
97
|
-
it("renders label and text when label is provided", () => {
|
|
98
|
-
render(<BrandButton label="Starting at" text="$49/mo" />);
|
|
99
|
-
expect(screen.getByText("Starting at")).toBeInTheDocument();
|
|
100
|
-
expect(screen.getByText("$49/mo")).toBeInTheDocument();
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
it("wraps label in a span with size class", () => {
|
|
104
|
-
const { container } = render(<BrandButton label="Label" text="Text" />);
|
|
105
|
-
const labelSpan = container.querySelector("span span");
|
|
106
|
-
expect(labelSpan).toHaveTextContent("Label");
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
describe("Size prop", () => {
|
|
111
|
-
it("applies base size class", () => {
|
|
112
|
-
render(<BrandButton size={{ base: "small" }} text="Small" />);
|
|
113
|
-
const btn = screen.getByRole("button");
|
|
114
|
-
expect(btn.className).toContain("btn-small");
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it("applies medium size by default", () => {
|
|
118
|
-
render(<BrandButton text="Default" />);
|
|
119
|
-
const btn = screen.getByRole("button");
|
|
120
|
-
expect(btn.className).toContain("btn-medium");
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it("applies responsive md size class for small", () => {
|
|
124
|
-
render(<BrandButton size={{ base: "small", md: "small" }} text="Resp" />);
|
|
125
|
-
const btn = screen.getByRole("button");
|
|
126
|
-
expect(btn.className).toContain("md:btn-small");
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
it("applies responsive md size class for medium", () => {
|
|
130
|
-
render(
|
|
131
|
-
<BrandButton size={{ base: "small", md: "medium" }} text="Resp" />
|
|
132
|
-
);
|
|
133
|
-
const btn = screen.getByRole("button");
|
|
134
|
-
expect(btn.className).toContain("md:btn-medium");
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
it("applies responsive md size class for large", () => {
|
|
138
|
-
render(<BrandButton size={{ base: "small", md: "large" }} text="Resp" />);
|
|
139
|
-
const btn = screen.getByRole("button");
|
|
140
|
-
expect(btn.className).toContain("md:btn-large");
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
it("applies responsive md size class for x-large", () => {
|
|
144
|
-
render(
|
|
145
|
-
<BrandButton size={{ base: "small", md: "x-large" }} text="Resp" />
|
|
146
|
-
);
|
|
147
|
-
const btn = screen.getByRole("button");
|
|
148
|
-
expect(btn.className).toContain("md:btn-x-large");
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
it("applies responsive lg size class", () => {
|
|
152
|
-
render(
|
|
153
|
-
<BrandButton size={{ base: "small", lg: "x-large" }} text="Resp" />
|
|
154
|
-
);
|
|
155
|
-
const btn = screen.getByRole("button");
|
|
156
|
-
expect(btn.className).toContain("lg:btn-x-large");
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
it("applies x-large label size with label3 class", () => {
|
|
160
|
-
const { container } = render(
|
|
161
|
-
<BrandButton size={{ base: "x-large" }} text="$49" label="Starting" />
|
|
162
|
-
);
|
|
163
|
-
const labelSpan = container.querySelector("span span");
|
|
164
|
-
expect(labelSpan?.className).toContain("label3");
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
it("applies non-x-large label size with label4 class", () => {
|
|
168
|
-
const { container } = render(
|
|
169
|
-
<BrandButton size={{ base: "small" }} text="$49" label="Starting" />
|
|
170
|
-
);
|
|
171
|
-
const labelSpan = container.querySelector("span span");
|
|
172
|
-
expect(labelSpan?.className).toContain("label4");
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
it("applies md label3 for x-large md size", () => {
|
|
176
|
-
const { container } = render(
|
|
177
|
-
<BrandButton
|
|
178
|
-
size={{ base: "small", md: "x-large" }}
|
|
179
|
-
text="$49"
|
|
180
|
-
label="Starting"
|
|
181
|
-
/>
|
|
182
|
-
);
|
|
183
|
-
const labelSpan = container.querySelector("span span");
|
|
184
|
-
expect(labelSpan?.className).toContain("md:label3");
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it("applies md label4 for non-x-large md size", () => {
|
|
188
|
-
const { container } = render(
|
|
189
|
-
<BrandButton
|
|
190
|
-
size={{ base: "small", md: "medium" }}
|
|
191
|
-
text="$49"
|
|
192
|
-
label="Starting"
|
|
193
|
-
/>
|
|
194
|
-
);
|
|
195
|
-
const labelSpan = container.querySelector("span span");
|
|
196
|
-
expect(labelSpan?.className).toContain("md:label4");
|
|
197
|
-
});
|
|
198
|
-
|
|
199
|
-
it("applies lg label3 for x-large lg size", () => {
|
|
200
|
-
const { container } = render(
|
|
201
|
-
<BrandButton
|
|
202
|
-
size={{ base: "small", lg: "x-large" }}
|
|
203
|
-
text="$49"
|
|
204
|
-
label="Starting"
|
|
205
|
-
/>
|
|
206
|
-
);
|
|
207
|
-
const labelSpan = container.querySelector("span span");
|
|
208
|
-
expect(labelSpan?.className).toContain("lg:label3");
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
it("applies lg label4 for non-x-large lg size", () => {
|
|
212
|
-
const { container } = render(
|
|
213
|
-
<BrandButton
|
|
214
|
-
size={{ base: "small", lg: "large" }}
|
|
215
|
-
text="$49"
|
|
216
|
-
label="Starting"
|
|
217
|
-
/>
|
|
218
|
-
);
|
|
219
|
-
const labelSpan = container.querySelector("span span");
|
|
220
|
-
expect(labelSpan?.className).toContain("lg:label4");
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
describe("fullWidth", () => {
|
|
225
|
-
it("applies w-full when fullWidth is true", () => {
|
|
226
|
-
render(<BrandButton fullWidth={true} text="Full" />);
|
|
227
|
-
const btn = screen.getByRole("button");
|
|
228
|
-
expect(btn.className).toContain("w-full");
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
it("applies w-auto when fullWidth is false", () => {
|
|
232
|
-
render(<BrandButton text="Auto" />);
|
|
233
|
-
const btn = screen.getByRole("button");
|
|
234
|
-
expect(btn.className).toContain("w-auto");
|
|
235
|
-
});
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
describe("buttonClassName", () => {
|
|
239
|
-
it("applies custom buttonClassName", () => {
|
|
240
|
-
render(<BrandButton buttonClassName="my-custom-class" text="Custom" />);
|
|
241
|
-
const btn = screen.getByRole("button");
|
|
242
|
-
expect(btn.className).toContain("my-custom-class");
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
describe("Ref forwarding", () => {
|
|
247
|
-
it("forwards ref to button element", () => {
|
|
248
|
-
const ref = React.createRef<HTMLButtonElement>();
|
|
249
|
-
render(<BrandButton ref={ref} text="Ref" />);
|
|
250
|
-
expect(ref.current).toBeInstanceOf(HTMLButtonElement);
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
it("forwards ref to anchor element", () => {
|
|
254
|
-
const ref = React.createRef<HTMLAnchorElement>();
|
|
255
|
-
render(<BrandButton ref={ref} as="a" href="/test" text="Ref" />);
|
|
256
|
-
expect(ref.current).toBeInstanceOf(HTMLAnchorElement);
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
describe("Event handling", () => {
|
|
261
|
-
it("calls onClick handler when clicked", () => {
|
|
262
|
-
const onClick = jest.fn();
|
|
263
|
-
render(<BrandButton text="Click" onClick={onClick} />);
|
|
264
|
-
fireEvent.click(screen.getByRole("button"));
|
|
265
|
-
expect(onClick).toHaveBeenCalledTimes(1);
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
it("does not call onClick when disabled", () => {
|
|
269
|
-
const onClick = jest.fn();
|
|
270
|
-
render(<BrandButton text="Click" onClick={onClick} disabled={true} />);
|
|
271
|
-
fireEvent.click(screen.getByRole("button"));
|
|
272
|
-
expect(onClick).not.toHaveBeenCalled();
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
describe("Anchor props", () => {
|
|
277
|
-
it("passes anchor-specific props when as='a'", () => {
|
|
278
|
-
render(
|
|
279
|
-
<BrandButton
|
|
280
|
-
as="a"
|
|
281
|
-
href="/test"
|
|
282
|
-
target="_blank"
|
|
283
|
-
rel="noopener"
|
|
284
|
-
text="Link"
|
|
285
|
-
/>
|
|
286
|
-
);
|
|
287
|
-
const link = screen.getByRole("link");
|
|
288
|
-
expect(link).toHaveAttribute("target", "_blank");
|
|
289
|
-
expect(link).toHaveAttribute("rel", "noopener");
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
});
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { BrandButton } from "./index";
|
|
3
|
+
|
|
4
|
+
import { fireEvent, render, screen } from "@testing-library/react";
|
|
5
|
+
|
|
6
|
+
import "@testing-library/jest-dom";
|
|
7
|
+
|
|
8
|
+
describe("BrandButton", () => {
|
|
9
|
+
describe("Rendering", () => {
|
|
10
|
+
it("renders as a button by default", () => {
|
|
11
|
+
render(<BrandButton text="Click me" />);
|
|
12
|
+
expect(screen.getByRole("button")).toBeInTheDocument();
|
|
13
|
+
expect(screen.getByRole("button")).toHaveTextContent("Click me");
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
it("renders as an anchor when as='a'", () => {
|
|
17
|
+
render(<BrandButton as="a" href="/test" text="Link" />);
|
|
18
|
+
const link = screen.getByRole("link");
|
|
19
|
+
expect(link).toBeInTheDocument();
|
|
20
|
+
expect(link).toHaveAttribute("href", "/test");
|
|
21
|
+
expect(link).toHaveTextContent("Link");
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it("has correct displayName", () => {
|
|
25
|
+
expect(BrandButton.displayName).toBe("BrandButton");
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("renders text prop content", () => {
|
|
29
|
+
render(<BrandButton text="Submit" />);
|
|
30
|
+
expect(screen.getByText("Submit")).toBeInTheDocument();
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
describe("Variants", () => {
|
|
35
|
+
it("applies primary_brand variant classes by default", () => {
|
|
36
|
+
render(<BrandButton text="Primary" />);
|
|
37
|
+
const btn = screen.getByRole("button");
|
|
38
|
+
expect(btn.className).toContain("button--primary_brand");
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("applies primary_inverse variant classes", () => {
|
|
42
|
+
render(<BrandButton variant="primary_inverse" text="Inverse" />);
|
|
43
|
+
const btn = screen.getByRole("button");
|
|
44
|
+
expect(btn.className).toContain("button--primary_inverse");
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("applies secondary variant classes", () => {
|
|
48
|
+
render(<BrandButton variant="secondary" text="Secondary" />);
|
|
49
|
+
const btn = screen.getByRole("button");
|
|
50
|
+
expect(btn.className).toContain("button--secondary");
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe("Loading state", () => {
|
|
55
|
+
it("shows spinner icon when isLoading is true", () => {
|
|
56
|
+
render(<BrandButton isLoading={true} text="Loading" />);
|
|
57
|
+
expect(screen.getByText("progress_activity")).toBeInTheDocument();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("disables button when isLoading is true", () => {
|
|
61
|
+
render(<BrandButton isLoading={true} text="Loading" />);
|
|
62
|
+
expect(screen.getByRole("button")).toBeDisabled();
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it("adds loading class when isLoading", () => {
|
|
66
|
+
render(<BrandButton isLoading={true} text="Loading" />);
|
|
67
|
+
const btn = screen.getByRole("button");
|
|
68
|
+
expect(btn.className).toContain("button--loading");
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("does not show spinner when isLoading is false", () => {
|
|
72
|
+
render(<BrandButton text="Not Loading" />);
|
|
73
|
+
expect(screen.queryByText("progress_activity")).not.toBeInTheDocument();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe("Disabled state", () => {
|
|
78
|
+
it("disables button when disabled prop is true", () => {
|
|
79
|
+
render(<BrandButton disabled={true} text="Disabled" />);
|
|
80
|
+
expect(screen.getByRole("button")).toBeDisabled();
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
it("adds disabled class when disabled", () => {
|
|
84
|
+
render(<BrandButton disabled={true} text="Disabled" />);
|
|
85
|
+
const btn = screen.getByRole("button");
|
|
86
|
+
expect(btn.className).toContain("button--disabled");
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it("applies cursor-not-allowed when disabled", () => {
|
|
90
|
+
render(<BrandButton disabled={true} text="Disabled" />);
|
|
91
|
+
const btn = screen.getByRole("button");
|
|
92
|
+
expect(btn.className).toContain("cursor-not-allowed");
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
describe("Label prop", () => {
|
|
97
|
+
it("renders label and text when label is provided", () => {
|
|
98
|
+
render(<BrandButton label="Starting at" text="$49/mo" />);
|
|
99
|
+
expect(screen.getByText("Starting at")).toBeInTheDocument();
|
|
100
|
+
expect(screen.getByText("$49/mo")).toBeInTheDocument();
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it("wraps label in a span with size class", () => {
|
|
104
|
+
const { container } = render(<BrandButton label="Label" text="Text" />);
|
|
105
|
+
const labelSpan = container.querySelector("span span");
|
|
106
|
+
expect(labelSpan).toHaveTextContent("Label");
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe("Size prop", () => {
|
|
111
|
+
it("applies base size class", () => {
|
|
112
|
+
render(<BrandButton size={{ base: "small" }} text="Small" />);
|
|
113
|
+
const btn = screen.getByRole("button");
|
|
114
|
+
expect(btn.className).toContain("btn-small");
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("applies medium size by default", () => {
|
|
118
|
+
render(<BrandButton text="Default" />);
|
|
119
|
+
const btn = screen.getByRole("button");
|
|
120
|
+
expect(btn.className).toContain("btn-medium");
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("applies responsive md size class for small", () => {
|
|
124
|
+
render(<BrandButton size={{ base: "small", md: "small" }} text="Resp" />);
|
|
125
|
+
const btn = screen.getByRole("button");
|
|
126
|
+
expect(btn.className).toContain("md:btn-small");
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
it("applies responsive md size class for medium", () => {
|
|
130
|
+
render(
|
|
131
|
+
<BrandButton size={{ base: "small", md: "medium" }} text="Resp" />
|
|
132
|
+
);
|
|
133
|
+
const btn = screen.getByRole("button");
|
|
134
|
+
expect(btn.className).toContain("md:btn-medium");
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("applies responsive md size class for large", () => {
|
|
138
|
+
render(<BrandButton size={{ base: "small", md: "large" }} text="Resp" />);
|
|
139
|
+
const btn = screen.getByRole("button");
|
|
140
|
+
expect(btn.className).toContain("md:btn-large");
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it("applies responsive md size class for x-large", () => {
|
|
144
|
+
render(
|
|
145
|
+
<BrandButton size={{ base: "small", md: "x-large" }} text="Resp" />
|
|
146
|
+
);
|
|
147
|
+
const btn = screen.getByRole("button");
|
|
148
|
+
expect(btn.className).toContain("md:btn-x-large");
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
it("applies responsive lg size class", () => {
|
|
152
|
+
render(
|
|
153
|
+
<BrandButton size={{ base: "small", lg: "x-large" }} text="Resp" />
|
|
154
|
+
);
|
|
155
|
+
const btn = screen.getByRole("button");
|
|
156
|
+
expect(btn.className).toContain("lg:btn-x-large");
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it("applies x-large label size with label3 class", () => {
|
|
160
|
+
const { container } = render(
|
|
161
|
+
<BrandButton size={{ base: "x-large" }} text="$49" label="Starting" />
|
|
162
|
+
);
|
|
163
|
+
const labelSpan = container.querySelector("span span");
|
|
164
|
+
expect(labelSpan?.className).toContain("label3");
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
it("applies non-x-large label size with label4 class", () => {
|
|
168
|
+
const { container } = render(
|
|
169
|
+
<BrandButton size={{ base: "small" }} text="$49" label="Starting" />
|
|
170
|
+
);
|
|
171
|
+
const labelSpan = container.querySelector("span span");
|
|
172
|
+
expect(labelSpan?.className).toContain("label4");
|
|
173
|
+
});
|
|
174
|
+
|
|
175
|
+
it("applies md label3 for x-large md size", () => {
|
|
176
|
+
const { container } = render(
|
|
177
|
+
<BrandButton
|
|
178
|
+
size={{ base: "small", md: "x-large" }}
|
|
179
|
+
text="$49"
|
|
180
|
+
label="Starting"
|
|
181
|
+
/>
|
|
182
|
+
);
|
|
183
|
+
const labelSpan = container.querySelector("span span");
|
|
184
|
+
expect(labelSpan?.className).toContain("md:label3");
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it("applies md label4 for non-x-large md size", () => {
|
|
188
|
+
const { container } = render(
|
|
189
|
+
<BrandButton
|
|
190
|
+
size={{ base: "small", md: "medium" }}
|
|
191
|
+
text="$49"
|
|
192
|
+
label="Starting"
|
|
193
|
+
/>
|
|
194
|
+
);
|
|
195
|
+
const labelSpan = container.querySelector("span span");
|
|
196
|
+
expect(labelSpan?.className).toContain("md:label4");
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
it("applies lg label3 for x-large lg size", () => {
|
|
200
|
+
const { container } = render(
|
|
201
|
+
<BrandButton
|
|
202
|
+
size={{ base: "small", lg: "x-large" }}
|
|
203
|
+
text="$49"
|
|
204
|
+
label="Starting"
|
|
205
|
+
/>
|
|
206
|
+
);
|
|
207
|
+
const labelSpan = container.querySelector("span span");
|
|
208
|
+
expect(labelSpan?.className).toContain("lg:label3");
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("applies lg label4 for non-x-large lg size", () => {
|
|
212
|
+
const { container } = render(
|
|
213
|
+
<BrandButton
|
|
214
|
+
size={{ base: "small", lg: "large" }}
|
|
215
|
+
text="$49"
|
|
216
|
+
label="Starting"
|
|
217
|
+
/>
|
|
218
|
+
);
|
|
219
|
+
const labelSpan = container.querySelector("span span");
|
|
220
|
+
expect(labelSpan?.className).toContain("lg:label4");
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
describe("fullWidth", () => {
|
|
225
|
+
it("applies w-full when fullWidth is true", () => {
|
|
226
|
+
render(<BrandButton fullWidth={true} text="Full" />);
|
|
227
|
+
const btn = screen.getByRole("button");
|
|
228
|
+
expect(btn.className).toContain("w-full");
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it("applies w-auto when fullWidth is false", () => {
|
|
232
|
+
render(<BrandButton text="Auto" />);
|
|
233
|
+
const btn = screen.getByRole("button");
|
|
234
|
+
expect(btn.className).toContain("w-auto");
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
describe("buttonClassName", () => {
|
|
239
|
+
it("applies custom buttonClassName", () => {
|
|
240
|
+
render(<BrandButton buttonClassName="my-custom-class" text="Custom" />);
|
|
241
|
+
const btn = screen.getByRole("button");
|
|
242
|
+
expect(btn.className).toContain("my-custom-class");
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
describe("Ref forwarding", () => {
|
|
247
|
+
it("forwards ref to button element", () => {
|
|
248
|
+
const ref = React.createRef<HTMLButtonElement>();
|
|
249
|
+
render(<BrandButton ref={ref} text="Ref" />);
|
|
250
|
+
expect(ref.current).toBeInstanceOf(HTMLButtonElement);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it("forwards ref to anchor element", () => {
|
|
254
|
+
const ref = React.createRef<HTMLAnchorElement>();
|
|
255
|
+
render(<BrandButton ref={ref} as="a" href="/test" text="Ref" />);
|
|
256
|
+
expect(ref.current).toBeInstanceOf(HTMLAnchorElement);
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
describe("Event handling", () => {
|
|
261
|
+
it("calls onClick handler when clicked", () => {
|
|
262
|
+
const onClick = jest.fn();
|
|
263
|
+
render(<BrandButton text="Click" onClick={onClick} />);
|
|
264
|
+
fireEvent.click(screen.getByRole("button"));
|
|
265
|
+
expect(onClick).toHaveBeenCalledTimes(1);
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
it("does not call onClick when disabled", () => {
|
|
269
|
+
const onClick = jest.fn();
|
|
270
|
+
render(<BrandButton text="Click" onClick={onClick} disabled={true} />);
|
|
271
|
+
fireEvent.click(screen.getByRole("button"));
|
|
272
|
+
expect(onClick).not.toHaveBeenCalled();
|
|
273
|
+
});
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
describe("Anchor props", () => {
|
|
277
|
+
it("passes anchor-specific props when as='a'", () => {
|
|
278
|
+
render(
|
|
279
|
+
<BrandButton
|
|
280
|
+
as="a"
|
|
281
|
+
href="/test"
|
|
282
|
+
target="_blank"
|
|
283
|
+
rel="noopener"
|
|
284
|
+
text="Link"
|
|
285
|
+
/>
|
|
286
|
+
);
|
|
287
|
+
const link = screen.getByRole("link");
|
|
288
|
+
expect(link).toHaveAttribute("target", "_blank");
|
|
289
|
+
expect(link).toHaveAttribute("rel", "noopener");
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
});
|