summaryrefslogtreecommitdiff
path: root/frontend/test/components/Header.test.js
diff options
context:
space:
mode:
authorAnjana Vakil <contact@anjana.dev>2025-08-27 08:49:51 -0500
committerAnjana Vakil <contact@anjana.dev>2025-08-27 08:49:51 -0500
commit0a413efa2f7784f176d1ee533d9b404b423713a4 (patch)
tree553ef412d606bfbc456374f0b12af3f2311da23e /frontend/test/components/Header.test.js
parent1dc4f56425209d4ce1d7bb78ec8b5e7b5a755a82 (diff)
exercise
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