|
4 | 4 | createConsoleLogger, |
5 | 5 | createFlagOverridesFromMap, |
6 | 6 | HookEvents, |
| 7 | + IConfigCatCache, |
7 | 8 | ISettingUnion, |
8 | 9 | LogLevel, |
9 | 10 | OverrideBehaviour, |
@@ -82,30 +83,51 @@ describe('ConfigCatProvider', () => { |
82 | 83 | }); |
83 | 84 | }); |
84 | 85 |
|
85 | | - it('should emit PROVIDER_ERROR event', () => { |
86 | | - const handler = jest.fn(); |
87 | | - const eventData: [string, unknown] = ['error', { error: 'error' }]; |
| 86 | + it("should emit PROVIDER_READY event when underlying client is initialized after provider's initialize", async () => { |
| 87 | + const cacheValue = '253370761200000\nW/"12345678-90a"\n{"f":{"booleanTrue":{"t":0,"v":{"b":true}}}}'; |
| 88 | + |
| 89 | + const fakeSharedCache = new (class implements IConfigCatCache { |
| 90 | + private _value?: string; |
| 91 | + get(key: string) { |
| 92 | + return this._value; |
| 93 | + } |
| 94 | + set(key: string, value: string) { |
| 95 | + this._value = value; |
| 96 | + } |
| 97 | + })(); |
| 98 | + |
| 99 | + const provider = ConfigCatProvider.create( |
| 100 | + 'configcat-sdk-1/1234567890123456789012/1234567890123456789012', |
| 101 | + PollingMode.AutoPoll, |
| 102 | + { |
| 103 | + cache: fakeSharedCache, |
| 104 | + logger: createConsoleLogger(LogLevel.Off), |
| 105 | + offline: true, |
| 106 | + maxInitWaitTimeSeconds: 1, |
| 107 | + }, |
| 108 | + ); |
88 | 109 |
|
89 | | - provider.events.addHandler(ProviderEvents.Error, handler); |
90 | | - configCatEmitter.emit('clientError', ...eventData); |
| 110 | + const readyHandler = jest.fn(); |
| 111 | + provider.events.addHandler(ProviderEvents.Ready, readyHandler); |
91 | 112 |
|
92 | | - expect(handler).toHaveBeenCalledWith({ |
93 | | - message: eventData[0], |
94 | | - metadata: eventData[1], |
95 | | - }); |
96 | | - }); |
| 113 | + try { |
| 114 | + await provider.initialize(); |
| 115 | + } catch (err) { |
| 116 | + expect((err as Error).message).toContain('underlying ConfigCat client could not initialize'); |
| 117 | + } |
97 | 118 |
|
98 | | - it('should emit PROVIDER_READY event after successful evaluation during ERROR condition', async () => { |
99 | | - const errorHandler = jest.fn(); |
100 | | - provider.events.addHandler(ProviderEvents.Error, errorHandler); |
| 119 | + expect(readyHandler).toHaveBeenCalledTimes(0); |
101 | 120 |
|
102 | | - configCatEmitter.emit('clientError', 'error', { error: 'error' }); |
103 | | - expect(errorHandler).toHaveBeenCalled(); |
| 121 | + fakeSharedCache.set('', cacheValue); |
104 | 122 |
|
105 | | - const readyHandler = jest.fn(); |
106 | | - provider.events.addHandler(ProviderEvents.Ready, readyHandler); |
| 123 | + // Make sure that the internal cache is refreshed. |
| 124 | + await provider.configCatClient?.forceRefreshAsync(); |
| 125 | + |
| 126 | + provider.resolveBooleanEvaluation('booleanTrue', false, { targetingKey }); |
| 127 | + |
| 128 | + // Wait a little while for the Ready event to be emitted. |
| 129 | + await new Promise((resolve) => setTimeout(resolve, 100)); |
107 | 130 |
|
108 | | - await provider.resolveBooleanEvaluation('booleanTrue', false, { targetingKey }); |
109 | 131 | expect(readyHandler).toHaveBeenCalled(); |
110 | 132 | }); |
111 | 133 | }); |
|
0 commit comments