diff --git a/evaluation-suites/dependent-flags/cases/dependent-flags.json b/evaluation-suites/dependent-flags/cases/dependent-flags.json index 76cde16..98c95d4 100644 --- a/evaluation-suites/dependent-flags/cases/dependent-flags.json +++ b/evaluation-suites/dependent-flags/cases/dependent-flags.json @@ -277,6 +277,38 @@ "targetingKey": "dependent-memoized", "variationType": "STRING" }, + { + "description": "A prerequisite with no assignment makes ONE_OF and NOT_ONE_OF conditions not match, so evaluation continues to the root fallback without publishing a prerequisite exposure.", + "attributes": {}, + "defaultValue": "caller-default", + "flag": "dependent-no-assignment-root", + "result": { + "reason": "STATIC", + "value": "no-assignment-fallback" + }, + "targetingKey": "dependent-no-assignment", + "variationType": "STRING", + "expectations": { + "exposures": [ + { + "allocation": "fallback", + "flag": "dependent-no-assignment-root", + "variant": "fallback" + } + ], + "evaluationEvents": [ + { + "flag": "dependent-no-assignment-parent", + "errorCode": null + }, + { + "flag": "dependent-no-assignment-root", + "errorCode": null + } + ], + "noUnmatchedEvents": true + } + }, { "description": "A successful prerequisite followed by a missing prerequisite aborts the graph and returns the caller default.", "attributes": {}, diff --git a/evaluation-suites/dependent-flags/ufc-config.json b/evaluation-suites/dependent-flags/ufc-config.json index e4fea47..58aa347 100644 --- a/evaluation-suites/dependent-flags/ufc-config.json +++ b/evaluation-suites/dependent-flags/ufc-config.json @@ -676,6 +676,95 @@ } ] }, + "dependent-no-assignment-parent": { + "key": "dependent-no-assignment-parent", + "enabled": true, + "variationType": "STRING", + "variations": { + "assigned": { + "key": "assigned", + "value": "must-not-be-returned" + } + }, + "allocations": [] + }, + "dependent-no-assignment-root": { + "key": "dependent-no-assignment-root", + "enabled": true, + "variationType": "STRING", + "variations": { + "matched": { + "key": "matched", + "value": "must-not-be-returned" + }, + "fallback": { + "key": "fallback", + "value": "no-assignment-fallback" + } + }, + "allocations": [ + { + "key": "parent-assigned", + "rules": [ + { + "conditions": [ + { + "flagEvaluation": { + "key": "dependent-no-assignment-parent" + }, + "operator": "ONE_OF", + "value": [ + "assigned" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "matched", + "shards": [] + } + ], + "doLog": true + }, + { + "key": "parent-not-assigned", + "rules": [ + { + "conditions": [ + { + "flagEvaluation": { + "key": "dependent-no-assignment-parent" + }, + "operator": "NOT_ONE_OF", + "value": [ + "assigned" + ] + } + ] + } + ], + "splits": [ + { + "variationKey": "matched", + "shards": [] + } + ], + "doLog": true + }, + { + "key": "fallback", + "splits": [ + { + "variationKey": "fallback", + "shards": [] + } + ], + "doLog": true + } + ] + }, "dependent-atomic-error-root": { "key": "dependent-atomic-error-root", "enabled": true,