mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-19 22:34:15 +00:00
refactor: remove any types from useMinimap and firebaseAuthStore tests
- useMinimap.test.ts: Created comprehensive mock interfaces for Node, Graph, Canvas, CanvasElement, ContainerElement, and Context2D - firebaseAuthStore.test.ts: Imported User type from firebase/auth and created MockUser type for mocking Part 8 - Phase 5 complete: 2 files fixed, 14 any instances removed (9 + 5)
This commit is contained in:
@@ -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<string, { id: string; target_id: string }>
|
||||
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()
|
||||
|
||||
@@ -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<User, 'getIdToken'> & {
|
||||
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<typeof useFirebaseAuthStore>
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user