diff --git a/src/lib/features/index.ts b/src/lib/features/index.ts index a287063eec..eb12dddd9a 100644 --- a/src/lib/features/index.ts +++ b/src/lib/features/index.ts @@ -10,3 +10,4 @@ export * from './project-environments/createEnvironmentService'; export * from './events/createEventsService'; export * from './instance-stats/createInstanceStatsService'; export * from './feature-lifecycle/createFeatureLifecycle'; +export * from './playground/createPlaygroundService'; diff --git a/src/lib/features/playground/createPlaygroundService.ts b/src/lib/features/playground/createPlaygroundService.ts new file mode 100644 index 0000000000..0288b64deb --- /dev/null +++ b/src/lib/features/playground/createPlaygroundService.ts @@ -0,0 +1,50 @@ +import type { Db, IUnleashConfig } from '../../server-impl'; +import { PlaygroundService } from './playground-service'; +import { + createFakeFeatureToggleService, + createFeatureToggleService, +} from '../feature-toggle/createFeatureToggleService'; +import { + createFakePrivateProjectChecker, + createPrivateProjectChecker, +} from '../private-project/createPrivateProjectChecker'; +import { SegmentReadModel } from '../segment/segment-read-model'; +import { FakeSegmentReadModel } from '../segment/fake-segment-read-model'; + +export const createPlaygroundService = ( + db: Db, + config: IUnleashConfig, +): PlaygroundService => { + const segmentReadModel = new SegmentReadModel(db); + const privateProjectChecker = createPrivateProjectChecker(db, config); + const featureToggleServiceV2 = createFeatureToggleService(db, config); + + const playgroundService = new PlaygroundService( + config, + { + featureToggleServiceV2, + privateProjectChecker, + }, + segmentReadModel, + ); + + return playgroundService; +}; + +export const createFakePlaygroundService = (config: IUnleashConfig) => { + const segmentReadModel = new FakeSegmentReadModel(); + const privateProjectChecker = createFakePrivateProjectChecker(); + const featureToggleServiceV2 = + createFakeFeatureToggleService(config).featureToggleService; + + const playgroundService = new PlaygroundService( + config, + { + featureToggleServiceV2, + privateProjectChecker, + }, + segmentReadModel, + ); + + return playgroundService; +}; diff --git a/src/lib/features/playground/playground-api.e2e.test.ts b/src/lib/features/playground/playground-api.e2e.test.ts index de13b37267..56c4b47db6 100644 --- a/src/lib/features/playground/playground-api.e2e.test.ts +++ b/src/lib/features/playground/playground-api.e2e.test.ts @@ -1,7 +1,7 @@ import dbInit, { type ITestDb } from '../../../test/e2e/helpers/database-init'; import { type IUnleashTest, - setupApp, + setupAppWithCustomConfig, } from '../../../test/e2e/helpers/test-helper'; import type { IUnleashStores } from '../../types'; import getLogger from '../../../test/fixtures/no-logger'; @@ -23,7 +23,7 @@ beforeAll(async () => { await stores.featureToggleStore.create('default', flag); - app = await setupApp(stores); + app = await setupAppWithCustomConfig(stores, {}, db.rawDatabase); }); afterAll(async () => { diff --git a/src/lib/services/index.ts b/src/lib/services/index.ts index b86dd7ae94..b05f97211d 100644 --- a/src/lib/services/index.ts +++ b/src/lib/services/index.ts @@ -137,6 +137,10 @@ import { import { IntegrationEventsService } from '../features/integration-events/integration-events-service'; import { FeatureCollaboratorsReadModel } from '../features/feature-toggle/feature-collaborators-read-model'; import { FakeFeatureCollaboratorsReadModel } from '../features/feature-toggle/fake-feature-collaborators-read-model'; +import { + createFakePlaygroundService, + createPlaygroundService, +} from '../features/playground/createPlaygroundService'; export const createServices = ( stores: IUnleashStores, @@ -319,14 +323,9 @@ export const createServices = ( const userSplashService = new UserSplashService(stores, config); const openApiService = new OpenApiService(config); const clientSpecService = new ClientSpecService(config); - const playgroundService = new PlaygroundService( - config, - { - featureToggleServiceV2, - privateProjectChecker, - }, - segmentReadModel, - ); + const playgroundService = db + ? createPlaygroundService(db, config) + : createFakePlaygroundService(config); const configurationRevisionService = ConfigurationRevisionService.getInstance(stores, config); diff --git a/src/test/e2e/api/admin/playground.e2e.test.ts b/src/test/e2e/api/admin/playground.e2e.test.ts index f10a3d0073..897928f7d2 100644 --- a/src/test/e2e/api/admin/playground.e2e.test.ts +++ b/src/test/e2e/api/admin/playground.e2e.test.ts @@ -2,7 +2,10 @@ import fc, { type Arbitrary } from 'fast-check'; import { clientFeature, clientFeatures } from '../../../arbitraries.test'; import { generate as generateRequest } from '../../../../lib/openapi/spec/playground-request-schema.test'; import dbInit, { type ITestDb } from '../../helpers/database-init'; -import { type IUnleashTest, setupAppWithAuth } from '../../helpers/test-helper'; +import { + type IUnleashTest, + setupAppWithCustomConfig, +} from '../../helpers/test-helper'; import { type FeatureToggle, WeightType } from '../../../../lib/types/model'; import getLogger from '../../../fixtures/no-logger'; import { @@ -21,7 +24,7 @@ let token: IApiToken; beforeAll(async () => { db = await dbInit('playground_api_serial', getLogger); - app = await setupAppWithAuth(db.stores); + app = await setupAppWithCustomConfig(db.stores, {}, db.rawDatabase); const { apiTokenService } = app.services; token = await apiTokenService.createApiTokenWithProjects({ type: ApiTokenType.ADMIN,