From c92288ecc19a979dd5e17993d66d0fdc754d34c5 Mon Sep 17 00:00:00 2001 From: Terry Jia Date: Fri, 4 Jul 2025 08:54:30 -0400 Subject: [PATCH] improve code --- src/services/newUserService.ts | 8 +-- .../tests/services/newUserService.test.ts | 57 +++++++++++++++++-- 2 files changed, 57 insertions(+), 8 deletions(-) diff --git a/src/services/newUserService.ts b/src/services/newUserService.ts index 97f5f83147..2bf84b90e2 100644 --- a/src/services/newUserService.ts +++ b/src/services/newUserService.ts @@ -1,10 +1,10 @@ import type { useSettingStore } from '@/stores/settingStore' -export const newUserService = () => { - let isNewUserDetermined = false - let isNewUserCached: boolean | null = null - let pendingCallbacks: Array<() => Promise> = [] +let pendingCallbacks: Array<() => Promise> = [] +let isNewUserDetermined = false +let isNewUserCached: boolean | null = null +export const newUserService = () => { function checkIsNewUser( settingStore: ReturnType ): boolean { diff --git a/tests-ui/tests/services/newUserService.test.ts b/tests-ui/tests/services/newUserService.test.ts index dd22a77f79..1e78efce51 100644 --- a/tests-ui/tests/services/newUserService.test.ts +++ b/tests-ui/tests/services/newUserService.test.ts @@ -1,7 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' -import { newUserService } from '@/services/newUserService' - const mockLocalStorage = vi.hoisted(() => ({ getItem: vi.fn(), setItem: vi.fn(), @@ -22,11 +20,20 @@ vi.mock('@/config/version', () => ({ global.__COMFYUI_FRONTEND_VERSION__ = '1.24.0' describe('newUserService', () => { - let service: ReturnType + let service: ReturnType< + typeof import('@/services/newUserService').newUserService + > let mockSettingStore: any + let newUserService: typeof import('@/services/newUserService').newUserService - beforeEach(() => { + beforeEach(async () => { vi.clearAllMocks() + + vi.resetModules() + + const module = await import('@/services/newUserService') + newUserService = module.newUserService + service = newUserService() mockSettingStore = { @@ -385,4 +392,46 @@ describe('newUserService', () => { expect(mockCallback2).toHaveBeenCalledTimes(1) }) }) + + describe('state sharing between instances', () => { + it('should share state between multiple service instances', async () => { + const service1 = newUserService() + const service2 = newUserService() + + mockSettingStore.settingValues = {} + mockSettingStore.get.mockImplementation((key: string) => { + if (key === 'Comfy.TutorialCompleted') return undefined + return undefined + }) + mockLocalStorage.getItem.mockReturnValue(null) + + await service1.initializeIfNewUser(mockSettingStore) + + expect(service2.isNewUser()).toBe(true) + expect(service1.isNewUser()).toBe(service2.isNewUser()) + }) + + it('should execute callbacks registered on different instances', async () => { + const service1 = newUserService() + const service2 = newUserService() + + const mockCallback1 = vi.fn().mockResolvedValue(undefined) + const mockCallback2 = vi.fn().mockResolvedValue(undefined) + + await service1.registerInitCallback(mockCallback1) + await service2.registerInitCallback(mockCallback2) + + mockSettingStore.settingValues = {} + mockSettingStore.get.mockImplementation((key: string) => { + if (key === 'Comfy.TutorialCompleted') return undefined + return undefined + }) + mockLocalStorage.getItem.mockReturnValue(null) + + await service1.initializeIfNewUser(mockSettingStore) + + expect(mockCallback1).toHaveBeenCalledTimes(1) + expect(mockCallback2).toHaveBeenCalledTimes(1) + }) + }) })