Test Assets
This directory contains test assets for the OpenFeature specification, including Gherkin test scenarios and structured JSON test data for comprehensive implementation validation.
Overviewโ
The test assets improve the existing Gherkin test suite by providing structured JSON test data that eliminates the need for manual test data creation. The data includes various flag types with different targeting scenarios to test edge cases and standard behavior.
Test Data Structure (test-flags.json
)โ
The JSON test data contains flags organized into several categories based on their behavior and purpose:
Standard Flagsโ
Basic feature flags with straightforward evaluation:
boolean-flag
: Boolean flag with variantson
(true) andoff
(false), defaults toon
string-flag
: String flag with variantsgreeting
("hi") andparting
("bye"), defaults togreeting
integer-flag
: Integer flag with variantsone
(1) andten
(10), defaults toten
float-flag
: Float flag with variantstenth
(0.1) andhalf
(0.5), defaults tohalf
object-flag
: Object flag withempty
() andtemplate
variants, defaults totemplate
Zero Value Flagsโ
Flags specifically designed to test zero/empty value handling:
boolean-zero-flag
: Boolean flag that defaults tozero
variant (false)string-zero-flag
: String flag that defaults tozero
variant (empty string "")integer-zero-flag
: Integer flag that defaults tozero
variant (0)float-zero-flag
: Float flag that defaults tozero
variant (0.0)object-zero-flag
: Object flag that defaults tozero
variant (empty object )
Targeted Zero Flagsโ
Flags with CEL expressions that can evaluate to zero values based on context:
boolean-targeted-zero-flag
: Uses CEL targeting, defaults tozero
(false)string-targeted-zero-flag
: Uses CEL targeting, defaults tozero
(empty string)integer-targeted-zero-flag
: Uses CEL targeting, defaults tozero
(0)float-targeted-zero-flag
: Uses CEL targeting, defaults tozero
(0.0)object-targeted-zero-flag
: Uses CEL targeting, defaults tozero
(empty object)
Disabled Flagsโ
Flags that are statically disabled:
boolean-disabled-flag
: Disabled Flagstring-disabled-flag
: Disabled Flaginteger-disabled-flag
: Disabled Flagfloat-disabled-flag
: Disabled Flagobject-disabled-flag
: Disabled Flag
Special Testing Flagsโ
Flags for testing edge cases and metadata:
metadata-flag
: Boolean flag with rich metadata including string, integer, boolean, and float valuescomplex-targeted
: String flag with complex CEL expression for internal/external user distinctionnull-default-flag
: Flag with explicitly null default variantundefined-default-flag
: Flag with no default variant definedwrong-flag
: Flag for testing error scenarios
CEL Expression Variablesโ
The test data uses Common Expression Language (CEL) expressions in the contextEvaluator
field. Based on the expressions in the test data, the following context variables are expected:
Available Context Variablesโ
email
: User's email address (string)customer
: Boolean flag indicating customer statusage
: User's age (integer)
CEL Expressions Usedโ
Simple Email Targetingโ
email == 'ballmer@macrosoft.com' ? 'zero' : ''
Used in: boolean-targeted-zero-flag
, string-targeted-zero-flag
, integer-targeted-zero-flag
, float-targeted-zero-flag
, object-targeted-zero-flag
Complex Multi-Condition Targetingโ
!customer && email == 'ballmer@macrosoft.com' && age > 10 ? 'internal' : ''
Used in: complex-targeted
Flag Structure Schemaโ
Each flag in the test data follows this structure:
{
"flag-name": {
"variants": {
"variant-key": "variant-value"
},
"defaultVariant": "variant-key-or-null",
"contextEvaluator": "CEL-expression", // Optional
"flagMetadata": {} // Optional
}
}
Key Componentsโ
- variants: Object containing all possible flag values mapped to variant keys
- defaultVariant: The variant key to use when no targeting rules match (can be null or omitted)
- contextEvaluator: Optional CEL expression for dynamic targeting
- flagMetadata: Optional metadata object containing additional flag information
Usageโ
- Test Implementation: Parse the JSON file with your preferred JSON library
- Context Setup: Ensure your test contexts include the required variables (
email
,customer
,age
) - CEL Evaluation: Implement CEL expression evaluation for flags with
contextEvaluator
- Edge Case Testing: Use the zero flags and special flags to test boundary conditions
Test Context Examplesโ
For comprehensive testing, use these context combinations:
// Triggers targeted zero variants
{
"targetingKey": "user1",
"email": "ballmer@macrosoft.com",
"customer": false,
"age": 25
}
// Triggers complex targeting
{
"targetingKey": "user2",
"email": "ballmer@macrosoft.com",
"customer": false,
"age": 15
}
// Triggers alternative targeting
{
"targetingKey": "user3",
"email": "jobs@orange.com"
}
// Default behavior (no targeting matches)
{
"targetingKey": "user4",
"email": "test@example.com",
"customer": true,
"age": 30
}
Contributingโ
When modifying test data:
- Maintain the category structure (standard, zero, targeted-zero, disabled)
- Validate CEL expressions for syntax correctness
- Ensure all required context variables are documented
- Test both matching and non-matching targeting scenarios