@c15t/react
Version:
Developer-first CMP for React: cookie banner, consent manager, preferences centre. GDPR ready with minimal setup and rich customization
1 lines • 1.55 kB
JavaScript
import*as e from"react/jsx-runtime";import*as t from"vitest";import*as o from"vitest-browser-react";import*as l from"../../context/theme-context.js";import*as r from"../use-theme.js";(0,t.describe)("useTheme",()=>{(0,t.test)("returns global theme when no local theme is provided",()=>{let a={noStyle:!1,theme:{"dialog.root":"global-style"}},{result:n}=(0,o.renderHook)(()=>(0,r.useTheme)(),{wrapper:({children:t})=>(0,e.jsx)(l.GlobalThemeContext.Provider,{value:a,children:t})});(0,t.expect)(n.current).toEqual(a)}),(0,t.test)("merges global and local themes correctly",()=>{let a={noStyle:!1,theme:{"dialog.root":"global-style","dialog.title":"global-title"}},n={theme:{"dialog.root":"local-style","dialog.content":"local-content"}},{result:s}=(0,o.renderHook)(()=>(0,r.useTheme)(),{wrapper:({children:t})=>(0,e.jsx)(l.GlobalThemeContext.Provider,{value:a,children:(0,e.jsx)(l.LocalThemeContext.Provider,{value:n,children:t})})});(0,t.expect)(s.current).toEqual({noStyle:!1,theme:{"dialog.root":"local-style","dialog.title":"global-title","dialog.content":"local-content"}})}),(0,t.test)("local theme takes precedence over global theme",()=>{let a={noStyle:!1,theme:{"dialog.root":"global-style"}},n={noStyle:!0,theme:{"dialog.root":"local-style"}},{result:s}=(0,o.renderHook)(()=>(0,r.useTheme)(),{wrapper:({children:t})=>(0,e.jsx)(l.GlobalThemeContext.Provider,{value:a,children:(0,e.jsx)(l.LocalThemeContext.Provider,{value:n,children:t})})}),c=s.current;(0,t.expect)(c.theme["dialog.root"]).toBe("local-style"),(0,t.expect)(c.noStyle).toBe(!0)})});