diff --git a/.gitmodules b/.gitmodules index 06c9e18..93de146 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "tests/engine/engine-tests/engine-test-data"] path = tests/engine/engine-tests/engine-test-data url = git@github.com:Flagsmith/engine-test-data.git - branch = v3.0.0 + branch = v3.1.0 diff --git a/flagsmith-engine/evaluation/evaluationContext/mappers.ts b/flagsmith-engine/evaluation/evaluationContext/mappers.ts index 1fa898f..4593f60 100644 --- a/flagsmith-engine/evaluation/evaluationContext/mappers.ts +++ b/flagsmith-engine/evaluation/evaluationContext/mappers.ts @@ -116,11 +116,16 @@ function mapIdentityModelToIdentityContext( traitsContext[trait.traitKey] = trait.traitValue; } - return { + const identityContext: IdentityContext = { identifier: identity.identifier, - key: identity.djangoID?.toString() || identity.compositeKey, traits: traitsContext }; + + if (identity.djangoID !== undefined) { + identityContext.key = identity.djangoID.toString(); + } + + return identityContext; } function mapSegmentRuleModelToRule(rule: any): any { diff --git a/flagsmith-engine/index.ts b/flagsmith-engine/index.ts index 58f9adc..c57abd0 100644 --- a/flagsmith-engine/index.ts +++ b/flagsmith-engine/index.ts @@ -6,7 +6,7 @@ import { CustomFeatureMetadata, FlagResultWithMetadata } from './evaluation/models.js'; -import { getIdentitySegments } from './segments/evaluators.js'; +import { getIdentitySegments, getIdentityKey } from './segments/evaluators.js'; import { EvaluationResultFlags } from './evaluation/models.js'; import { TARGETING_REASONS } from './features/types.js'; import { getHashedPercentageForObjIds } from './utils/hashing/index.js'; @@ -131,7 +131,7 @@ export function evaluateFeatures( const { value: evaluatedValue, reason: evaluatedReason } = hasOverride ? { value: finalFeature.value, reason: undefined } - : evaluateFeatureValue(finalFeature, context.identity?.key); + : evaluateFeatureValue(finalFeature, getIdentityKey(context)); flags[finalFeature.name] = { name: finalFeature.name, diff --git a/flagsmith-engine/segments/evaluators.ts b/flagsmith-engine/segments/evaluators.ts index 0b08526..aecae7f 100644 --- a/flagsmith-engine/segments/evaluators.ts +++ b/flagsmith-engine/segments/evaluators.ts @@ -49,7 +49,7 @@ export function traitsMatchSegmentCondition( ): boolean { if (condition.operator === PERCENTAGE_SPLIT) { const contextValueKey = - getContextValue(condition.property, context) || context?.identity?.key; + getContextValue(condition.property, context) || getIdentityKey(context); const hashedPercentage = getHashedPercentageForObjIds([segmentKey, contextValueKey]); return hashedPercentage <= parseFloat(String(condition.value)); } @@ -173,3 +173,9 @@ export function getContextValue(jsonPath: string, context?: GenericEvaluationCon return undefined; } } + +export function getIdentityKey(context?: GenericEvaluationContext): string | undefined { + if (!context?.identity) return undefined; + + return context.identity.key || `${context.environment.key}_${context.identity.identifier}`; +} diff --git a/tests/engine/engine-tests/engine-test-data b/tests/engine/engine-tests/engine-test-data index 8d19e96..6ab57ec 160000 --- a/tests/engine/engine-tests/engine-test-data +++ b/tests/engine/engine-tests/engine-test-data @@ -1 +1 @@ -Subproject commit 8d19e9627013c0e0213c29f3318fd45a179868fa +Subproject commit 6ab57ec67bc84659e8b5aa41534b04fe45cc4cbe