@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,277 +1,277 @@
|
|
|
1
|
-
import "@testing-library/jest-dom";
|
|
2
|
-
|
|
3
|
-
import React from "react";
|
|
4
|
-
import CookieBanner from "./index";
|
|
5
|
-
|
|
6
|
-
import { act, fireEvent, render, screen } from "@testing-library/react";
|
|
7
|
-
|
|
8
|
-
// Mock cookie utilities
|
|
9
|
-
const mockGetCookie = jest.fn();
|
|
10
|
-
const mockSetCookie = jest.fn();
|
|
11
|
-
|
|
12
|
-
jest.mock("../../../utils/cookie", () => ({
|
|
13
|
-
getCookie: (...args: any[]) => mockGetCookie(...args),
|
|
14
|
-
setCookie: (...args: any[]) => mockSetCookie(...args),
|
|
15
|
-
}));
|
|
16
|
-
|
|
17
|
-
jest.mock("@shared/components/material-icon", () => ({
|
|
18
|
-
MaterialIcon: ({ name }: any) => (
|
|
19
|
-
<span data-testid={`icon-${name}`}>{name}</span>
|
|
20
|
-
),
|
|
21
|
-
}));
|
|
22
|
-
|
|
23
|
-
jest.mock("@shared/contentful/blocks/button", () => ({
|
|
24
|
-
Button: (props: any) => (
|
|
25
|
-
<button onClick={props.onClick} data-testid="cookie-button">
|
|
26
|
-
{props.children}
|
|
27
|
-
</button>
|
|
28
|
-
),
|
|
29
|
-
}));
|
|
30
|
-
|
|
31
|
-
describe("CookieBanner", () => {
|
|
32
|
-
const defaultContent = {
|
|
33
|
-
entryName: "Cookie Notice",
|
|
34
|
-
anchorId: "cookie-banner",
|
|
35
|
-
title: "Cookies",
|
|
36
|
-
richText: <p>We use cookies to improve your experience.</p>,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
beforeEach(() => {
|
|
40
|
-
jest.useFakeTimers();
|
|
41
|
-
mockGetCookie.mockReset();
|
|
42
|
-
mockSetCookie.mockReset();
|
|
43
|
-
// Default: cookie not set (banner should show)
|
|
44
|
-
mockGetCookie.mockReturnValue(null);
|
|
45
|
-
// Reset body classes
|
|
46
|
-
document.body.classList.remove("cookie-banner-visible");
|
|
47
|
-
// Reset CSS custom property
|
|
48
|
-
document.documentElement.style.removeProperty("--cookie-banner-height");
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
afterEach(() => {
|
|
52
|
-
jest.useRealTimers();
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
describe("cookie management", () => {
|
|
56
|
-
it("shows the banner when cookieBannerClosed cookie is not set", () => {
|
|
57
|
-
mockGetCookie.mockReturnValue(null);
|
|
58
|
-
render(<CookieBanner content={defaultContent} />);
|
|
59
|
-
expect(
|
|
60
|
-
screen.getByLabelText("Cookie usage notification")
|
|
61
|
-
).toBeInTheDocument();
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it("hides the banner when cookieBannerClosed cookie is true", () => {
|
|
65
|
-
mockGetCookie.mockReturnValue("true");
|
|
66
|
-
const { container } = render(<CookieBanner content={defaultContent} />);
|
|
67
|
-
expect(container.firstChild).toBeNull();
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
it("calls getCookie with cookieBannerClosed key", () => {
|
|
71
|
-
render(<CookieBanner content={defaultContent} />);
|
|
72
|
-
expect(mockGetCookie).toHaveBeenCalledWith("cookieBannerClosed");
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
it("sets cookieBannerClosed cookie on close", () => {
|
|
76
|
-
mockGetCookie.mockReturnValue(null);
|
|
77
|
-
render(<CookieBanner content={defaultContent} />);
|
|
78
|
-
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
79
|
-
expect(mockSetCookie).toHaveBeenCalledWith(
|
|
80
|
-
"cookieBannerClosed",
|
|
81
|
-
true,
|
|
82
|
-
expect.objectContaining({ expires: expect.any(Date) })
|
|
83
|
-
);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it("sets cookie with correct expiration (30 days)", () => {
|
|
87
|
-
mockGetCookie.mockReturnValue(null);
|
|
88
|
-
render(<CookieBanner content={defaultContent} />);
|
|
89
|
-
|
|
90
|
-
const now = Date.now();
|
|
91
|
-
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
92
|
-
|
|
93
|
-
const callArgs = mockSetCookie.mock.calls[0];
|
|
94
|
-
const expirationDate = callArgs[2].expires;
|
|
95
|
-
// 43200 minutes * 60 * 1000 = 30 days in milliseconds
|
|
96
|
-
const expectedMs = 43200 * 60 * 1000;
|
|
97
|
-
const diff = expirationDate.getTime() - now;
|
|
98
|
-
expect(diff).toBeGreaterThanOrEqual(expectedMs - 1000);
|
|
99
|
-
expect(diff).toBeLessThanOrEqual(expectedMs + 1000);
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
describe("rendering", () => {
|
|
104
|
-
it("renders with fixed positioning", () => {
|
|
105
|
-
render(<CookieBanner content={defaultContent} />);
|
|
106
|
-
const banner = screen.getByLabelText("Cookie usage notification");
|
|
107
|
-
expect(banner.className).toContain("fixed");
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it("renders the rich text content", () => {
|
|
111
|
-
render(<CookieBanner content={defaultContent} />);
|
|
112
|
-
expect(
|
|
113
|
-
screen.getByText("We use cookies to improve your experience.")
|
|
114
|
-
).toBeInTheDocument();
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it("does not render rich text when richText is falsy", () => {
|
|
118
|
-
const content = { ...defaultContent, richText: null as any };
|
|
119
|
-
render(<CookieBanner content={content} />);
|
|
120
|
-
const banner = screen.getByLabelText("Cookie usage notification");
|
|
121
|
-
// Banner is shown but no rich text inside
|
|
122
|
-
expect(banner.querySelector(".mx-auto")).toBeNull();
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
it("renders close button with close icon", () => {
|
|
126
|
-
render(<CookieBanner content={defaultContent} />);
|
|
127
|
-
expect(screen.getByTestId("icon-close")).toBeInTheDocument();
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
it("has correct z-index class", () => {
|
|
131
|
-
render(<CookieBanner content={defaultContent} />);
|
|
132
|
-
const banner = screen.getByLabelText("Cookie usage notification");
|
|
133
|
-
expect(banner.className).toContain("z-[1000]");
|
|
134
|
-
});
|
|
135
|
-
|
|
136
|
-
it("renders with correct max width", () => {
|
|
137
|
-
render(<CookieBanner content={defaultContent} />);
|
|
138
|
-
const banner = screen.getByLabelText("Cookie usage notification");
|
|
139
|
-
expect(banner.className).toContain("max-w-[350px]");
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
it("renders with correct positioning styles", () => {
|
|
143
|
-
render(<CookieBanner content={defaultContent} />);
|
|
144
|
-
const banner = screen.getByLabelText("Cookie usage notification");
|
|
145
|
-
expect(banner.style.bottom).toBe("0px");
|
|
146
|
-
expect(banner.style.right).toBe("20px");
|
|
147
|
-
});
|
|
148
|
-
|
|
149
|
-
it("has id cookie-banner", () => {
|
|
150
|
-
render(<CookieBanner content={defaultContent} />);
|
|
151
|
-
expect(document.getElementById("cookie-banner")).toBeInTheDocument();
|
|
152
|
-
});
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
describe("close behavior", () => {
|
|
156
|
-
it("hides banner on close button click", () => {
|
|
157
|
-
mockGetCookie.mockReturnValue(null);
|
|
158
|
-
render(<CookieBanner content={defaultContent} />);
|
|
159
|
-
expect(
|
|
160
|
-
screen.getByLabelText("Cookie usage notification")
|
|
161
|
-
).toBeInTheDocument();
|
|
162
|
-
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
163
|
-
expect(
|
|
164
|
-
screen.queryByLabelText("Cookie usage notification")
|
|
165
|
-
).not.toBeInTheDocument();
|
|
166
|
-
});
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
describe("body class management", () => {
|
|
170
|
-
it("adds cookie-banner-visible class to body when visible", () => {
|
|
171
|
-
mockGetCookie.mockReturnValue(null);
|
|
172
|
-
render(<CookieBanner content={defaultContent} />);
|
|
173
|
-
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
174
|
-
true
|
|
175
|
-
);
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
it("removes cookie-banner-visible class when banner is hidden", () => {
|
|
179
|
-
mockGetCookie.mockReturnValue(null);
|
|
180
|
-
render(<CookieBanner content={defaultContent} />);
|
|
181
|
-
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
182
|
-
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
183
|
-
false
|
|
184
|
-
);
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
it("removes cookie-banner-visible class on unmount", () => {
|
|
188
|
-
mockGetCookie.mockReturnValue(null);
|
|
189
|
-
const { unmount } = render(<CookieBanner content={defaultContent} />);
|
|
190
|
-
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
191
|
-
true
|
|
192
|
-
);
|
|
193
|
-
unmount();
|
|
194
|
-
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
195
|
-
false
|
|
196
|
-
);
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
describe("sticky footer detection", () => {
|
|
201
|
-
it("uses larger margin when anchored-banner element exists", () => {
|
|
202
|
-
const anchoredBanner = document.createElement("div");
|
|
203
|
-
anchoredBanner.id = "anchored-banner";
|
|
204
|
-
document.body.appendChild(anchoredBanner);
|
|
205
|
-
|
|
206
|
-
mockGetCookie.mockReturnValue(null);
|
|
207
|
-
render(<CookieBanner content={defaultContent} />);
|
|
208
|
-
const banner = screen.getByLabelText("Cookie usage notification");
|
|
209
|
-
// marginBottom = 14 * 4 = 56px when anchored-banner exists
|
|
210
|
-
expect(banner.style.marginBottom).toBe("56px");
|
|
211
|
-
|
|
212
|
-
document.body.removeChild(anchoredBanner);
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
it("uses smaller margin when anchored-banner does not exist", () => {
|
|
216
|
-
mockGetCookie.mockReturnValue(null);
|
|
217
|
-
render(<CookieBanner content={defaultContent} />);
|
|
218
|
-
const banner = screen.getByLabelText("Cookie usage notification");
|
|
219
|
-
// marginBottom = 3 * 4 = 12px when no anchored-banner
|
|
220
|
-
expect(banner.style.marginBottom).toBe("12px");
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
describe("CSS custom property for height", () => {
|
|
225
|
-
it("calculates and sets --cookie-banner-height property", () => {
|
|
226
|
-
mockGetCookie.mockReturnValue(null);
|
|
227
|
-
render(<CookieBanner content={defaultContent} />);
|
|
228
|
-
|
|
229
|
-
act(() => {
|
|
230
|
-
jest.advanceTimersByTime(350);
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
// The property should be set (value depends on getBoundingClientRect mock)
|
|
234
|
-
// In jsdom, getBoundingClientRect returns zeros, so spaceFromBottom = innerHeight - 0
|
|
235
|
-
const value = document.documentElement.style.getPropertyValue(
|
|
236
|
-
"--cookie-banner-height"
|
|
237
|
-
);
|
|
238
|
-
// Should be set (even though value may be 0px in jsdom)
|
|
239
|
-
expect(value).toBeDefined();
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
it("removes --cookie-banner-height on unmount", () => {
|
|
243
|
-
mockGetCookie.mockReturnValue(null);
|
|
244
|
-
const { unmount } = render(<CookieBanner content={defaultContent} />);
|
|
245
|
-
|
|
246
|
-
act(() => {
|
|
247
|
-
jest.advanceTimersByTime(350);
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
unmount();
|
|
251
|
-
const value = document.documentElement.style.getPropertyValue(
|
|
252
|
-
"--cookie-banner-height"
|
|
253
|
-
);
|
|
254
|
-
expect(value).toBe("");
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
it("recalculates height on window resize", () => {
|
|
258
|
-
mockGetCookie.mockReturnValue(null);
|
|
259
|
-
render(<CookieBanner content={defaultContent} />);
|
|
260
|
-
|
|
261
|
-
act(() => {
|
|
262
|
-
jest.advanceTimersByTime(350);
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
act(() => {
|
|
266
|
-
window.dispatchEvent(new Event("resize"));
|
|
267
|
-
jest.advanceTimersByTime(200);
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
// Should not throw and property remains set
|
|
271
|
-
const value = document.documentElement.style.getPropertyValue(
|
|
272
|
-
"--cookie-banner-height"
|
|
273
|
-
);
|
|
274
|
-
expect(value).toBeDefined();
|
|
275
|
-
});
|
|
276
|
-
});
|
|
277
|
-
});
|
|
1
|
+
import "@testing-library/jest-dom";
|
|
2
|
+
|
|
3
|
+
import React from "react";
|
|
4
|
+
import CookieBanner from "./index";
|
|
5
|
+
|
|
6
|
+
import { act, fireEvent, render, screen } from "@testing-library/react";
|
|
7
|
+
|
|
8
|
+
// Mock cookie utilities
|
|
9
|
+
const mockGetCookie = jest.fn();
|
|
10
|
+
const mockSetCookie = jest.fn();
|
|
11
|
+
|
|
12
|
+
jest.mock("../../../utils/cookie", () => ({
|
|
13
|
+
getCookie: (...args: any[]) => mockGetCookie(...args),
|
|
14
|
+
setCookie: (...args: any[]) => mockSetCookie(...args),
|
|
15
|
+
}));
|
|
16
|
+
|
|
17
|
+
jest.mock("@shared/components/material-icon", () => ({
|
|
18
|
+
MaterialIcon: ({ name }: any) => (
|
|
19
|
+
<span data-testid={`icon-${name}`}>{name}</span>
|
|
20
|
+
),
|
|
21
|
+
}));
|
|
22
|
+
|
|
23
|
+
jest.mock("@shared/contentful/blocks/button", () => ({
|
|
24
|
+
Button: (props: any) => (
|
|
25
|
+
<button onClick={props.onClick} data-testid="cookie-button">
|
|
26
|
+
{props.children}
|
|
27
|
+
</button>
|
|
28
|
+
),
|
|
29
|
+
}));
|
|
30
|
+
|
|
31
|
+
describe("CookieBanner", () => {
|
|
32
|
+
const defaultContent = {
|
|
33
|
+
entryName: "Cookie Notice",
|
|
34
|
+
anchorId: "cookie-banner",
|
|
35
|
+
title: "Cookies",
|
|
36
|
+
richText: <p>We use cookies to improve your experience.</p>,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
beforeEach(() => {
|
|
40
|
+
jest.useFakeTimers();
|
|
41
|
+
mockGetCookie.mockReset();
|
|
42
|
+
mockSetCookie.mockReset();
|
|
43
|
+
// Default: cookie not set (banner should show)
|
|
44
|
+
mockGetCookie.mockReturnValue(null);
|
|
45
|
+
// Reset body classes
|
|
46
|
+
document.body.classList.remove("cookie-banner-visible");
|
|
47
|
+
// Reset CSS custom property
|
|
48
|
+
document.documentElement.style.removeProperty("--cookie-banner-height");
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
afterEach(() => {
|
|
52
|
+
jest.useRealTimers();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
describe("cookie management", () => {
|
|
56
|
+
it("shows the banner when cookieBannerClosed cookie is not set", () => {
|
|
57
|
+
mockGetCookie.mockReturnValue(null);
|
|
58
|
+
render(<CookieBanner content={defaultContent} />);
|
|
59
|
+
expect(
|
|
60
|
+
screen.getByLabelText("Cookie usage notification")
|
|
61
|
+
).toBeInTheDocument();
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it("hides the banner when cookieBannerClosed cookie is true", () => {
|
|
65
|
+
mockGetCookie.mockReturnValue("true");
|
|
66
|
+
const { container } = render(<CookieBanner content={defaultContent} />);
|
|
67
|
+
expect(container.firstChild).toBeNull();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("calls getCookie with cookieBannerClosed key", () => {
|
|
71
|
+
render(<CookieBanner content={defaultContent} />);
|
|
72
|
+
expect(mockGetCookie).toHaveBeenCalledWith("cookieBannerClosed");
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("sets cookieBannerClosed cookie on close", () => {
|
|
76
|
+
mockGetCookie.mockReturnValue(null);
|
|
77
|
+
render(<CookieBanner content={defaultContent} />);
|
|
78
|
+
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
79
|
+
expect(mockSetCookie).toHaveBeenCalledWith(
|
|
80
|
+
"cookieBannerClosed",
|
|
81
|
+
true,
|
|
82
|
+
expect.objectContaining({ expires: expect.any(Date) })
|
|
83
|
+
);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it("sets cookie with correct expiration (30 days)", () => {
|
|
87
|
+
mockGetCookie.mockReturnValue(null);
|
|
88
|
+
render(<CookieBanner content={defaultContent} />);
|
|
89
|
+
|
|
90
|
+
const now = Date.now();
|
|
91
|
+
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
92
|
+
|
|
93
|
+
const callArgs = mockSetCookie.mock.calls[0];
|
|
94
|
+
const expirationDate = callArgs[2].expires;
|
|
95
|
+
// 43200 minutes * 60 * 1000 = 30 days in milliseconds
|
|
96
|
+
const expectedMs = 43200 * 60 * 1000;
|
|
97
|
+
const diff = expirationDate.getTime() - now;
|
|
98
|
+
expect(diff).toBeGreaterThanOrEqual(expectedMs - 1000);
|
|
99
|
+
expect(diff).toBeLessThanOrEqual(expectedMs + 1000);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
describe("rendering", () => {
|
|
104
|
+
it("renders with fixed positioning", () => {
|
|
105
|
+
render(<CookieBanner content={defaultContent} />);
|
|
106
|
+
const banner = screen.getByLabelText("Cookie usage notification");
|
|
107
|
+
expect(banner.className).toContain("fixed");
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it("renders the rich text content", () => {
|
|
111
|
+
render(<CookieBanner content={defaultContent} />);
|
|
112
|
+
expect(
|
|
113
|
+
screen.getByText("We use cookies to improve your experience.")
|
|
114
|
+
).toBeInTheDocument();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it("does not render rich text when richText is falsy", () => {
|
|
118
|
+
const content = { ...defaultContent, richText: null as any };
|
|
119
|
+
render(<CookieBanner content={content} />);
|
|
120
|
+
const banner = screen.getByLabelText("Cookie usage notification");
|
|
121
|
+
// Banner is shown but no rich text inside
|
|
122
|
+
expect(banner.querySelector(".mx-auto")).toBeNull();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it("renders close button with close icon", () => {
|
|
126
|
+
render(<CookieBanner content={defaultContent} />);
|
|
127
|
+
expect(screen.getByTestId("icon-close")).toBeInTheDocument();
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("has correct z-index class", () => {
|
|
131
|
+
render(<CookieBanner content={defaultContent} />);
|
|
132
|
+
const banner = screen.getByLabelText("Cookie usage notification");
|
|
133
|
+
expect(banner.className).toContain("z-[1000]");
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("renders with correct max width", () => {
|
|
137
|
+
render(<CookieBanner content={defaultContent} />);
|
|
138
|
+
const banner = screen.getByLabelText("Cookie usage notification");
|
|
139
|
+
expect(banner.className).toContain("max-w-[350px]");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("renders with correct positioning styles", () => {
|
|
143
|
+
render(<CookieBanner content={defaultContent} />);
|
|
144
|
+
const banner = screen.getByLabelText("Cookie usage notification");
|
|
145
|
+
expect(banner.style.bottom).toBe("0px");
|
|
146
|
+
expect(banner.style.right).toBe("20px");
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it("has id cookie-banner", () => {
|
|
150
|
+
render(<CookieBanner content={defaultContent} />);
|
|
151
|
+
expect(document.getElementById("cookie-banner")).toBeInTheDocument();
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
describe("close behavior", () => {
|
|
156
|
+
it("hides banner on close button click", () => {
|
|
157
|
+
mockGetCookie.mockReturnValue(null);
|
|
158
|
+
render(<CookieBanner content={defaultContent} />);
|
|
159
|
+
expect(
|
|
160
|
+
screen.getByLabelText("Cookie usage notification")
|
|
161
|
+
).toBeInTheDocument();
|
|
162
|
+
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
163
|
+
expect(
|
|
164
|
+
screen.queryByLabelText("Cookie usage notification")
|
|
165
|
+
).not.toBeInTheDocument();
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
describe("body class management", () => {
|
|
170
|
+
it("adds cookie-banner-visible class to body when visible", () => {
|
|
171
|
+
mockGetCookie.mockReturnValue(null);
|
|
172
|
+
render(<CookieBanner content={defaultContent} />);
|
|
173
|
+
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
174
|
+
true
|
|
175
|
+
);
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
it("removes cookie-banner-visible class when banner is hidden", () => {
|
|
179
|
+
mockGetCookie.mockReturnValue(null);
|
|
180
|
+
render(<CookieBanner content={defaultContent} />);
|
|
181
|
+
fireEvent.click(screen.getByTestId("cookie-button"));
|
|
182
|
+
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
183
|
+
false
|
|
184
|
+
);
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
it("removes cookie-banner-visible class on unmount", () => {
|
|
188
|
+
mockGetCookie.mockReturnValue(null);
|
|
189
|
+
const { unmount } = render(<CookieBanner content={defaultContent} />);
|
|
190
|
+
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
191
|
+
true
|
|
192
|
+
);
|
|
193
|
+
unmount();
|
|
194
|
+
expect(document.body.classList.contains("cookie-banner-visible")).toBe(
|
|
195
|
+
false
|
|
196
|
+
);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
describe("sticky footer detection", () => {
|
|
201
|
+
it("uses larger margin when anchored-banner element exists", () => {
|
|
202
|
+
const anchoredBanner = document.createElement("div");
|
|
203
|
+
anchoredBanner.id = "anchored-banner";
|
|
204
|
+
document.body.appendChild(anchoredBanner);
|
|
205
|
+
|
|
206
|
+
mockGetCookie.mockReturnValue(null);
|
|
207
|
+
render(<CookieBanner content={defaultContent} />);
|
|
208
|
+
const banner = screen.getByLabelText("Cookie usage notification");
|
|
209
|
+
// marginBottom = 14 * 4 = 56px when anchored-banner exists
|
|
210
|
+
expect(banner.style.marginBottom).toBe("56px");
|
|
211
|
+
|
|
212
|
+
document.body.removeChild(anchoredBanner);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
it("uses smaller margin when anchored-banner does not exist", () => {
|
|
216
|
+
mockGetCookie.mockReturnValue(null);
|
|
217
|
+
render(<CookieBanner content={defaultContent} />);
|
|
218
|
+
const banner = screen.getByLabelText("Cookie usage notification");
|
|
219
|
+
// marginBottom = 3 * 4 = 12px when no anchored-banner
|
|
220
|
+
expect(banner.style.marginBottom).toBe("12px");
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
describe("CSS custom property for height", () => {
|
|
225
|
+
it("calculates and sets --cookie-banner-height property", () => {
|
|
226
|
+
mockGetCookie.mockReturnValue(null);
|
|
227
|
+
render(<CookieBanner content={defaultContent} />);
|
|
228
|
+
|
|
229
|
+
act(() => {
|
|
230
|
+
jest.advanceTimersByTime(350);
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// The property should be set (value depends on getBoundingClientRect mock)
|
|
234
|
+
// In jsdom, getBoundingClientRect returns zeros, so spaceFromBottom = innerHeight - 0
|
|
235
|
+
const value = document.documentElement.style.getPropertyValue(
|
|
236
|
+
"--cookie-banner-height"
|
|
237
|
+
);
|
|
238
|
+
// Should be set (even though value may be 0px in jsdom)
|
|
239
|
+
expect(value).toBeDefined();
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
it("removes --cookie-banner-height on unmount", () => {
|
|
243
|
+
mockGetCookie.mockReturnValue(null);
|
|
244
|
+
const { unmount } = render(<CookieBanner content={defaultContent} />);
|
|
245
|
+
|
|
246
|
+
act(() => {
|
|
247
|
+
jest.advanceTimersByTime(350);
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
unmount();
|
|
251
|
+
const value = document.documentElement.style.getPropertyValue(
|
|
252
|
+
"--cookie-banner-height"
|
|
253
|
+
);
|
|
254
|
+
expect(value).toBe("");
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
it("recalculates height on window resize", () => {
|
|
258
|
+
mockGetCookie.mockReturnValue(null);
|
|
259
|
+
render(<CookieBanner content={defaultContent} />);
|
|
260
|
+
|
|
261
|
+
act(() => {
|
|
262
|
+
jest.advanceTimersByTime(350);
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
act(() => {
|
|
266
|
+
window.dispatchEvent(new Event("resize"));
|
|
267
|
+
jest.advanceTimersByTime(200);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// Should not throw and property remains set
|
|
271
|
+
const value = document.documentElement.style.getPropertyValue(
|
|
272
|
+
"--cookie-banner-height"
|
|
273
|
+
);
|
|
274
|
+
expect(value).toBeDefined();
|
|
275
|
+
});
|
|
276
|
+
});
|
|
277
|
+
});
|