diff --git a/src/renderer/extensions/minimap/composables/useMinimap.test.ts b/src/renderer/extensions/minimap/composables/useMinimap.test.ts index e33b46c535..22458744cc 100644 --- a/src/renderer/extensions/minimap/composables/useMinimap.test.ts +++ b/src/renderer/extensions/minimap/composables/useMinimap.test.ts @@ -1,6 +1,68 @@ +import type { Mock } from 'vitest' import { beforeEach, describe, expect, it, vi } from 'vitest' import { nextTick, shallowRef } from 'vue' +interface MockNode { + id: string + pos: number[] + size: number[] + color?: string + constructor?: { color: string } + outputs?: { links: string[] }[] | null +} + +interface MockGraph { + _nodes: MockNode[] + links: Record + getNodeById: Mock + setDirtyCanvas: Mock + onNodeAdded: ((node: MockNode) => void) | null + onNodeRemoved: ((node: MockNode) => void) | null + onConnectionChange: ((node: MockNode) => void) | null +} + +interface MockCanvas { + graph: MockGraph + canvas: { + width: number + height: number + clientWidth: number + clientHeight: number + } + ds: { + scale: number + offset: [number, number] + } + setDirty: Mock +} + +interface MockCanvasElement { + getContext: Mock + width: number + height: number + clientWidth: number + clientHeight: number +} + +interface MockContainerElement { + getBoundingClientRect: Mock +} + +interface MockContext2D { + clearRect: Mock + fillRect: Mock + strokeRect: Mock + beginPath: Mock + moveTo: Mock + lineTo: Mock + stroke: Mock + arc: Mock + fill: Mock + fillStyle: string + strokeStyle: string + lineWidth: number +} + const flushPromises = () => new Promise((resolve) => setTimeout(resolve, 0)) const triggerRAF = async () => { @@ -39,15 +101,15 @@ vi.mock('@vueuse/core', () => { } }), useThrottleFn: vi.fn((callback) => { - return (...args: any[]) => { + return (...args: unknown[]) => { return callback(...args) } }) } }) -let mockCanvas: any -let mockGraph: any +let mockCanvas: MockCanvas = null! +let mockGraph: MockGraph = null! const setupMocks = () => { const mockNodes = [ @@ -105,7 +167,10 @@ const setupMocks = () => { setupMocks() -const defaultCanvasStore = { +const defaultCanvasStore: { + canvas: MockCanvas | null + getCanvas: () => MockCanvas | null +} = { canvas: mockCanvas, getCanvas: () => defaultCanvasStore.canvas } @@ -158,16 +223,20 @@ const { useMinimap } = const { api } = await import('@/scripts/api') describe('useMinimap', () => { - let mockCanvas: any - let mockGraph: any - let mockCanvasElement: any - let mockContainerElement: any - let mockContext2D: any + let mockCanvas: MockCanvas + let mockGraph: MockGraph + let mockCanvasElement: MockCanvasElement + let mockContainerElement: MockContainerElement + let mockContext2D: MockContext2D async function createAndInitializeMinimap() { const minimap = useMinimap({ - containerRefMaybe: shallowRef(mockContainerElement), - canvasRefMaybe: shallowRef(mockCanvasElement) + containerRefMaybe: shallowRef( + mockContainerElement as unknown as HTMLDivElement + ), + canvasRefMaybe: shallowRef( + mockCanvasElement as unknown as HTMLCanvasElement + ) }) await minimap.init() await nextTick() @@ -432,7 +501,8 @@ describe('useMinimap', () => { mockGraph._nodes.push({ id: 'new-node', pos: [150, 150], - size: [100, 50] + size: [100, 50], + constructor: { color: '#666' } }) // Trigger RAF to process changes @@ -793,12 +863,14 @@ describe('useMinimap', () => { mockCanvas.canvas.clientWidth = 1200 mockCanvas.canvas.clientHeight = 900 - const resizeHandler = (window.addEventListener as any).mock.calls.find( - (call: any) => call[0] === 'resize' - )?.[1] + const resizeHandler = vi + .mocked(window.addEventListener) + .mock.calls.find((call) => call[0] === 'resize')?.[1] as + | EventListener + | undefined if (resizeHandler) { - resizeHandler() + resizeHandler(new Event('resize')) } await nextTick() diff --git a/src/stores/firebaseAuthStore.test.ts b/src/stores/firebaseAuthStore.test.ts index bbad432640..0a69acc1dd 100644 --- a/src/stores/firebaseAuthStore.test.ts +++ b/src/stores/firebaseAuthStore.test.ts @@ -1,12 +1,18 @@ import { FirebaseError } from 'firebase/app' +import type { User } from 'firebase/auth' import * as firebaseAuth from 'firebase/auth' import { createPinia, setActivePinia } from 'pinia' +import type { Mock } from 'vitest' import { beforeEach, describe, expect, it, vi } from 'vitest' import * as vuefire from 'vuefire' import { useDialogService } from '@/services/dialogService' import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore' +type MockUser = Omit & { + getIdToken: Mock +} + // Mock fetch const mockFetch = vi.fn() vi.stubGlobal('fetch', mockFetch) @@ -84,18 +90,18 @@ vi.mock('@/services/dialogService') describe('useFirebaseAuthStore', () => { let store: ReturnType - let authStateCallback: (user: any) => void - let idTokenCallback: (user: any) => void + let authStateCallback: (user: User | null) => void + let idTokenCallback: (user: User | null) => void const mockAuth = { /* mock Auth object */ } - const mockUser = { + const mockUser: MockUser = { uid: 'test-user-id', email: 'test@example.com', getIdToken: vi.fn().mockResolvedValue('mock-id-token') - } + } as unknown as MockUser beforeEach(() => { vi.resetAllMocks() @@ -112,9 +118,9 @@ describe('useFirebaseAuthStore', () => { // Mock onAuthStateChanged to capture the callback and simulate initial auth state vi.mocked(firebaseAuth.onAuthStateChanged).mockImplementation( (_, callback) => { - authStateCallback = callback as (user: any) => void + authStateCallback = callback as (user: User | null) => void // Call the callback with our mock user - ;(callback as (user: any) => void)(mockUser) + ;(callback as (user: User | null) => void)(mockUser) // Return an unsubscribe function return vi.fn() } @@ -156,7 +162,7 @@ describe('useFirebaseAuthStore', () => { vi.mocked(firebaseAuth.onIdTokenChanged).mockImplementation( (_auth, callback) => { - idTokenCallback = callback as (user: any) => void + idTokenCallback = callback as (user: User | null) => void return vi.fn() } ) @@ -180,14 +186,14 @@ describe('useFirebaseAuthStore', () => { }) it('should not increment when ID token event is for a different user UID', () => { - const otherUser = { uid: 'other-user-id' } + const otherUser = { uid: 'other-user-id' } as unknown as User idTokenCallback?.(mockUser) idTokenCallback?.(otherUser) expect(store.tokenRefreshTrigger).toBe(0) }) it('should increment after switching to a new UID and receiving a second event for that UID', () => { - const otherUser = { uid: 'other-user-id' } + const otherUser = { uid: 'other-user-id' } as unknown as User idTokenCallback?.(mockUser) idTokenCallback?.(otherUser) idTokenCallback?.(otherUser)