summaryrefslogtreecommitdiff
path: root/frontend/test/components/Header.test.js
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/test/components/Header.test.js')
-rw-r--r--frontend/test/components/Header.test.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/frontend/test/components/Header.test.js b/frontend/test/components/Header.test.js
new file mode 100644
index 0000000..d6bf564
--- /dev/null
+++ b/frontend/test/components/Header.test.js
@@ -0,0 +1,73 @@
+import { describe, it, expect, beforeEach, vi } from 'vitest'
+import { setupThemeToggle } from '../../src/components/Header.js'
+
+// Mock DOM elements
+const mockDocument = {
+ documentElement: {
+ getAttribute: vi.fn(),
+ setAttribute: vi.fn()
+ },
+ getElementById: vi.fn()
+}
+
+global.document = mockDocument
+
+describe('Header', () => {
+ beforeEach(() => {
+ vi.clearAllMocks()
+ })
+
+ describe('toggleDarkMode', () => {
+ it('should toggle from dark to light theme', () => {
+ // Setup: current theme is dark
+ mockDocument.documentElement.getAttribute.mockReturnValue('dark')
+
+ const mockElement = {
+ addEventListener: vi.fn()
+ }
+ mockDocument.getElementById.mockReturnValue(mockElement)
+
+ // Get the toggle function by setting up the event listener
+ setupThemeToggle()
+ const clickHandler = mockElement.addEventListener.mock.calls[0][1]
+
+ // Execute the toggle function
+ clickHandler()
+
+ expect(mockDocument.documentElement.setAttribute).toHaveBeenCalledWith('data-theme', 'light')
+ })
+
+ it('should toggle from light to dark theme', () => {
+ // Setup: current theme is light
+ mockDocument.documentElement.getAttribute.mockReturnValue('light')
+
+ const mockElement = {
+ addEventListener: vi.fn()
+ }
+ mockDocument.getElementById.mockReturnValue(mockElement)
+
+ setupThemeToggle()
+ const clickHandler = mockElement.addEventListener.mock.calls[0][1]
+
+ clickHandler()
+
+ // This should work correctly
+ expect(mockDocument.documentElement.setAttribute).toHaveBeenCalledWith('data-theme', 'dark')
+ })
+
+
+ describe('setupThemeToggle', () => {
+ it('should add click event listener to theme toggle button', () => {
+ const mockElement = {
+ addEventListener: vi.fn()
+ }
+ mockDocument.getElementById.mockReturnValue(mockElement)
+
+ setupThemeToggle()
+
+ expect(mockDocument.getElementById).toHaveBeenCalledWith('theme')
+ expect(mockElement.addEventListener).toHaveBeenCalledWith('click', expect.any(Function))
+ })
+ })
+ })
+}); \ No newline at end of file