diff --git a/libs/providers/flagd/src/e2e/constants.ts b/libs/providers/flagd/src/e2e/constants.ts index 13bfe14d7..a3319d3de 100644 --- a/libs/providers/flagd/src/e2e/constants.ts +++ b/libs/providers/flagd/src/e2e/constants.ts @@ -4,3 +4,4 @@ export const UNSTABLE_CLIENT_NAME = 'unstable'; export const UNAVAILABLE_CLIENT_NAME = 'unavailable'; export const GHERKIN_FLAGD = getGherkinTestPath('*.feature'); +export const CONFIG_FEATURE = getGherkinTestPath('config.feature'); diff --git a/libs/providers/flagd/src/e2e/step-definitions/configSteps.ts b/libs/providers/flagd/src/e2e/step-definitions/configSteps.ts index 4405978b6..0e52ebb9f 100644 --- a/libs/providers/flagd/src/e2e/step-definitions/configSteps.ts +++ b/libs/providers/flagd/src/e2e/step-definitions/configSteps.ts @@ -13,10 +13,19 @@ export const configSteps: Steps = (state: State) => { } } + const originalEnv = { ...process.env }; + return ({ given, when, then }: StepsDefinitionCallbackOptions) => { beforeEach(() => { state.options = {}; + state.config = undefined; + state.events = []; + Object.keys(process.env) + .filter((key) => !Object.prototype.hasOwnProperty.call(originalEnv, key)) + .forEach((key) => delete process.env[key]); + Object.assign(process.env, originalEnv); }); + given(/^an option "(.*)" of type "(.*)" with value "(.*)"$/, (name: string, type: string, value: string) => { state.options[mapName(name)] = mapValueToType(value, type); }); diff --git a/libs/providers/flagd/src/lib/configuration.spec.ts b/libs/providers/flagd/src/lib/configuration.spec.ts index 4a0b2d905..7f928e6bc 100644 --- a/libs/providers/flagd/src/lib/configuration.spec.ts +++ b/libs/providers/flagd/src/lib/configuration.spec.ts @@ -2,6 +2,10 @@ import type { Config, FlagdProviderOptions } from './configuration'; import { getConfig } from './configuration'; import { DEFAULT_MAX_CACHE_SIZE } from './constants'; import type { EvaluationContext } from '@openfeature/server-sdk'; +import { configSteps } from '../e2e/step-definitions/configSteps'; +import type { State } from '../e2e/step-definitions/state'; +import { autoBindSteps, loadFeatures } from 'jest-cucumber'; +import { CONFIG_FEATURE } from '../e2e'; describe('Configuration', () => { const OLD_ENV = process.env; @@ -163,4 +167,23 @@ describe('Configuration', () => { }); }); }); + + describe('config.feature', () => { + const state: State = { + resolverType: 'in-process', + options: {}, + config: undefined, + events: [], + }; + + autoBindSteps( + loadFeatures(CONFIG_FEATURE, { + scenarioNameTemplate: (vars) => { + const tags = [...new Set([...vars.scenarioTags, ...vars.featureTags])]; + return `${vars.scenarioTitle}${tags.length > 0 ? ` (${tags.join(', ')})` : ''}`; + }, + }), + [configSteps(state)], + ); + }); });