| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import * as configcat from 'configcat-js'
- import { beforeEach, describe, expect, it, vi } from 'vitest'
- vi.mock('configcat-js', () => ({
- getClient: vi.fn(),
- PollingMode: {
- AutoPoll: 'AutoPoll',
- },
- ClientCacheState: {
- NoFlagData: 0,
- HasLocalOverrideFlagDataOnly: 1,
- HasCachedFlagDataOnly: 2,
- HasUpToDateFlagData: 3,
- },
- User: vi.fn(),
- }))
- describe('configcat', () => {
- const mockClient = {
- getAllValuesAsync: vi.fn(),
- waitForReady: vi.fn().mockResolvedValue(3), // HasUpToDateFlagData
- dispose: vi.fn(),
- }
- beforeEach(() => {
- vi.clearAllMocks()
- vi.resetModules()
- vi.unstubAllEnvs()
- ;(configcat.getClient as any).mockReturnValue(mockClient)
- })
- it('should return empty array when no email is provided', async () => {
- const { getFlags } = await import('./configcat')
- const result = await getFlags()
- expect(result).toEqual([])
- })
- it('should call getAllValuesAsync with user when email is provided', async () => {
- vi.stubEnv('NEXT_PUBLIC_CONFIGCAT_PROXY_URL', 'https://proxy.example.com')
- const { getFlags } = await import('./configcat')
- const email = 'test@example.com'
- const mockValues = { flag1: true, flag2: false }
- mockClient.getAllValuesAsync.mockResolvedValue(mockValues)
- const result = await getFlags(email)
- expect(configcat.User).toHaveBeenCalledWith(email, undefined, undefined, expect.any(Object))
- expect(mockClient.getAllValuesAsync).toHaveBeenCalled()
- expect(result).toEqual(mockValues)
- })
- it('should fall back to SDK key client when proxy returns NoFlagData', async () => {
- vi.stubEnv('NEXT_PUBLIC_CONFIGCAT_PROXY_URL', 'https://proxy.example.com')
- vi.stubEnv('NEXT_PUBLIC_CONFIGCAT_SDK_KEY', 'test-sdk-key')
- const proxyClient = {
- getAllValuesAsync: vi.fn(),
- waitForReady: vi.fn().mockResolvedValue(0), // NoFlagData
- dispose: vi.fn(),
- }
- const sdkClient = {
- getAllValuesAsync: vi.fn().mockResolvedValue([]),
- waitForReady: vi.fn().mockResolvedValue(3), // HasUpToDateFlagData
- dispose: vi.fn(),
- }
- ;(configcat.getClient as any).mockReturnValueOnce(proxyClient).mockReturnValueOnce(sdkClient)
- const { getFlags } = await import('./configcat')
- await getFlags()
- expect(configcat.getClient).toHaveBeenCalledTimes(2)
- expect(proxyClient.dispose).toHaveBeenCalled()
- expect(configcat.getClient).toHaveBeenNthCalledWith(2, 'test-sdk-key', 'AutoPoll', {
- pollIntervalSeconds: 7 * 60,
- })
- })
- })
|