diff --git a/lib/project_config/project_config_manager.spec.ts b/lib/project_config/project_config_manager.spec.ts index a8c98ece4..76c9af736 100644 --- a/lib/project_config/project_config_manager.spec.ts +++ b/lib/project_config/project_config_manager.spec.ts @@ -121,24 +121,17 @@ describe('ProjectConfigManagerImpl', () => { expect(manager.getState()).toBe(ServiceState.Running); }); - it('should call onUpdate listeners registered before or after start() with the project config after resolving onRunning()', async () => { + it('should call onUpdate listeners registered before start() with the project config', async () => { const logger = getMockLogger(); const manager = new ProjectConfigManagerImpl({ logger, datafile: testData.getTestProjectConfig()}); - const listener1 = vi.fn(); - manager.onUpdate(listener1); + const listener = vi.fn(); + manager.onUpdate(listener); manager.start(); - const listener2 = vi.fn(); - manager.onUpdate(listener2); - expect(listener1).not.toHaveBeenCalled(); - expect(listener2).not.toHaveBeenCalledOnce(); await manager.onRunning(); - expect(listener1).toHaveBeenCalledOnce(); - expect(listener2).toHaveBeenCalledOnce(); - - expect(listener1).toHaveBeenCalledWith(createProjectConfig(testData.getTestProjectConfig())); - expect(listener2).toHaveBeenCalledWith(createProjectConfig(testData.getTestProjectConfig())); + expect(listener).toHaveBeenCalledOnce(); + expect(listener).toHaveBeenCalledWith(createProjectConfig(testData.getTestProjectConfig())); }); it('should return the correct config from getConfig() both before or after onRunning() resolves', async () => { @@ -187,8 +180,8 @@ describe('ProjectConfigManagerImpl', () => { const listener = vi.fn(); const manager = new ProjectConfigManagerImpl({ datafile: testData.getTestProjectConfig(), datafileManager }); - manager.start(); manager.onUpdate(listener); + manager.start(); await expect(manager.onRunning()).resolves.not.toThrow(); expect(listener).toHaveBeenCalledWith(createProjectConfig(testData.getTestProjectConfig())); }); @@ -309,11 +302,12 @@ describe('ProjectConfigManagerImpl', () => { const datafile = testData.getTestProjectConfig(); const manager = new ProjectConfigManagerImpl({ datafile, datafileManager }); - manager.start(); const listener = vi.fn(); manager.onUpdate(listener); + manager.start(); + expect(manager.getConfig()).toEqual(createProjectConfig(datafile)); await manager.onRunning(); expect(manager.getConfig()).toEqual(createProjectConfig(datafile)); @@ -334,11 +328,12 @@ describe('ProjectConfigManagerImpl', () => { const logger = getMockLogger(); const datafile = testData.getTestProjectConfig(); const manager = new ProjectConfigManagerImpl({ logger, datafile, datafileManager }); - manager.start(); const listener = vi.fn(); manager.onUpdate(listener); + manager.start(); + expect(manager.getConfig()).toEqual(createProjectConfig(testData.getTestProjectConfig())); await manager.onRunning(); expect(manager.getConfig()).toEqual(createProjectConfig(testData.getTestProjectConfig())); @@ -379,11 +374,12 @@ describe('ProjectConfigManagerImpl', () => { const datafile = testData.getTestProjectConfig(); const manager = new ProjectConfigManagerImpl({ datafile, datafileManager }); - manager.start(); const listener = vi.fn(); manager.onUpdate(listener); + manager.start(); + expect(manager.getConfig()).toEqual(createProjectConfig(datafile)); await manager.onRunning(); expect(manager.getConfig()).toEqual(createProjectConfig(datafile)); @@ -401,11 +397,12 @@ describe('ProjectConfigManagerImpl', () => { const datafileManager = getMockDatafileManager({}); const manager = new ProjectConfigManagerImpl({ datafile }); - manager.start(); const listener = vi.fn(); const dispose = manager.onUpdate(listener); + manager.start(); + await manager.onRunning(); expect(listener).toHaveBeenNthCalledWith(1, createProjectConfig(datafile)); @@ -420,11 +417,12 @@ describe('ProjectConfigManagerImpl', () => { const datafile = testData.getTestProjectConfig(); const manager = new ProjectConfigManagerImpl({ datafile: JSON.stringify(datafile) }); - manager.start(); const listener = vi.fn(); manager.onUpdate(listener); + manager.start(); + await manager.onRunning(); expect(listener).toHaveBeenCalledWith(createProjectConfig(datafile)); expect(manager.getConfig()).toEqual(createProjectConfig(datafile)); diff --git a/lib/project_config/project_config_manager.ts b/lib/project_config/project_config_manager.ts index edf88a174..8d7002c03 100644 --- a/lib/project_config/project_config_manager.ts +++ b/lib/project_config/project_config_manager.ts @@ -18,7 +18,6 @@ import { createOptimizelyConfig } from './optimizely_config'; import { OptimizelyConfig } from '../shared_types'; import { DatafileManager } from './datafile_manager'; import { ProjectConfig, toDatafile, tryCreatingProjectConfig } from './project_config'; -import { scheduleMicrotask } from '../utils/microtask'; import { Service, ServiceState, BaseService } from '../service'; import { Consumer, Fn, Transformer } from '../utils/type'; import { EventEmitter } from '../utils/event_emitter/event_emitter'; @@ -166,9 +165,7 @@ export class ProjectConfigManagerImpl extends BaseService implements ProjectConf if (this.projectConfig?.revision !== config.revision) { this.projectConfig = config; this.optimizelyConfig = undefined; - scheduleMicrotask(() => { - this.eventEmitter.emit('update', config); - }) + this.eventEmitter.emit('update', config); } } catch (err) { this.logger?.error(err);