Skip to content

Commit 0707f4b

Browse files
feat: add PARSE_ERROR and whitespace tests for evaluator ref (#361)
Signed-off-by: Lea Konvalinka <lea.konvalinka@dynatrace.com> Signed-off-by: Todd Baert <todd.baert@dynatrace.com> Co-authored-by: Todd Baert <todd.baert@dynatrace.com>
1 parent 31afd6e commit 0707f4b

4 files changed

Lines changed: 192 additions & 0 deletions

File tree

evaluator/flags/testkit-flags.json

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,78 @@
511511
"targeting": {
512512
"if": [{"sem_ver": [{"var": "version"}, "=", "1.0.0+build"]}, "match", "no-match"]
513513
}
514+
},
515+
"ref-whitespace-compact-flag": {
516+
"state": "ENABLED",
517+
"variants": {
518+
"hi": "hi",
519+
"bye": "bye",
520+
"fallback": "fallback"
521+
},
522+
"defaultVariant": "fallback",
523+
"targeting": {
524+
"if": [
525+
{
526+
"$ref":"is_ballmer"
527+
},
528+
"hi",
529+
"bye"
530+
]
531+
}
532+
},
533+
"ref-whitespace-space-after-colon-flag": {
534+
"state": "ENABLED",
535+
"variants": {
536+
"hi": "hi",
537+
"bye": "bye",
538+
"fallback": "fallback"
539+
},
540+
"defaultVariant": "fallback",
541+
"targeting": {
542+
"if": [
543+
{
544+
"$ref": "is_ballmer"
545+
},
546+
"hi",
547+
"bye"
548+
]
549+
}
550+
},
551+
"ref-whitespace-space-around-colon-flag": {
552+
"state": "ENABLED",
553+
"variants": {
554+
"hi": "hi",
555+
"bye": "bye",
556+
"fallback": "fallback"
557+
},
558+
"defaultVariant": "fallback",
559+
"targeting": {
560+
"if": [
561+
{
562+
"$ref" : "is_ballmer"
563+
},
564+
"hi",
565+
"bye"
566+
]
567+
}
568+
},
569+
"ref-to-nonexistent-evaluator-flag": {
570+
"state": "ENABLED",
571+
"variants": {
572+
"hit": "hit",
573+
"miss": "miss",
574+
"fallback": "fallback"
575+
},
576+
"defaultVariant": "fallback",
577+
"targeting": {
578+
"if": [
579+
{
580+
"$ref": "nonexistent_evaluator"
581+
},
582+
"hit",
583+
"miss"
584+
]
585+
}
514586
}
515587
},
516588
"$evaluators": {

evaluator/gherkin/evaluator-refs.feature

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,28 @@ Feature: Evaluator evaluator refs
1313
| key | value |
1414
| some-email-targeted-flag | hi |
1515
| some-other-email-targeted-flag | yes |
16+
17+
@evaluator-refs @evaluator-refs-whitespace
18+
Scenario Outline: Evaluator $ref resolves regardless of whitespace around the colon
19+
Given an evaluator
20+
And a String-flag with key "<key>" and a fallback value "fallback"
21+
And a context containing a key "email", with type "String" and with value "<email>"
22+
When the flag was evaluated with details
23+
Then the resolved details value should be "<value>"
24+
And the reason should be "TARGETING_MATCH"
25+
Examples:
26+
| key | email | value |
27+
| ref-whitespace-compact-flag | ballmer@macrosoft.com | hi |
28+
| ref-whitespace-space-after-colon-flag | ballmer@macrosoft.com | hi |
29+
| ref-whitespace-space-around-colon-flag | ballmer@macrosoft.com | hi |
30+
| ref-whitespace-compact-flag | user@example.com | bye |
31+
| ref-whitespace-space-after-colon-flag | user@example.com | bye |
32+
| ref-whitespace-space-around-colon-flag | user@example.com | bye |
33+
34+
@evaluator-refs @non-existent-evaluator-ref
35+
Scenario: Ref to nonexistent evaluator yields parse error
36+
Given an evaluator
37+
And a String-flag with key "ref-to-nonexistent-evaluator-flag" and a fallback value "fallback"
38+
When the flag was evaluated with details
39+
Then the resolved details value should be "fallback"
40+
And the error-code should be "PARSE_ERROR"

flags/evaluator-refs.json

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,78 @@
3535
"no"
3636
]
3737
}
38+
},
39+
"ref-whitespace-compact-flag": {
40+
"state": "ENABLED",
41+
"variants": {
42+
"hi": "hi",
43+
"bye": "bye",
44+
"fallback": "fallback"
45+
},
46+
"defaultVariant": "fallback",
47+
"targeting": {
48+
"if": [
49+
{
50+
"$ref":"is_ballmer"
51+
},
52+
"hi",
53+
"bye"
54+
]
55+
}
56+
},
57+
"ref-whitespace-space-after-colon-flag": {
58+
"state": "ENABLED",
59+
"variants": {
60+
"hi": "hi",
61+
"bye": "bye",
62+
"fallback": "fallback"
63+
},
64+
"defaultVariant": "fallback",
65+
"targeting": {
66+
"if": [
67+
{
68+
"$ref": "is_ballmer"
69+
},
70+
"hi",
71+
"bye"
72+
]
73+
}
74+
},
75+
"ref-whitespace-space-around-colon-flag": {
76+
"state": "ENABLED",
77+
"variants": {
78+
"hi": "hi",
79+
"bye": "bye",
80+
"fallback": "fallback"
81+
},
82+
"defaultVariant": "fallback",
83+
"targeting": {
84+
"if": [
85+
{
86+
"$ref" : "is_ballmer"
87+
},
88+
"hi",
89+
"bye"
90+
]
91+
}
92+
},
93+
"ref-to-nonexistent-evaluator-flag": {
94+
"state": "ENABLED",
95+
"variants": {
96+
"hit": "hit",
97+
"miss": "miss",
98+
"fallback": "fallback"
99+
},
100+
"defaultVariant": "fallback",
101+
"targeting": {
102+
"if": [
103+
{
104+
"$ref": "nonexistent_evaluator"
105+
},
106+
"hit",
107+
"miss"
108+
]
109+
}
38110
}
39111
},
40112
"$evaluators": {

gherkin/targeting.feature

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,29 @@ Feature: Targeting rules
2020
| some-email-targeted-flag | hi |
2121
| some-other-email-targeted-flag | yes |
2222

23+
@evaluator-refs @evaluator-refs-whitespace
24+
Scenario Outline: Evaluator $ref resolves regardless of whitespace around the colon
25+
Given a String-flag with key "<key>" and a default value "fallback"
26+
And a context containing a key "email", with type "String" and with value "<email>"
27+
When the flag was evaluated with details
28+
Then the resolved details value should be "<value>"
29+
And the reason should be "TARGETING_MATCH"
30+
Examples:
31+
| key | email | value |
32+
| ref-whitespace-compact-flag | ballmer@macrosoft.com | hi |
33+
| ref-whitespace-space-after-colon-flag | ballmer@macrosoft.com | hi |
34+
| ref-whitespace-space-around-colon-flag | ballmer@macrosoft.com | hi |
35+
| ref-whitespace-compact-flag | user@example.com | bye |
36+
| ref-whitespace-space-after-colon-flag | user@example.com | bye |
37+
| ref-whitespace-space-around-colon-flag | user@example.com | bye |
38+
39+
@evaluator-refs @non-existent-evaluator-ref
40+
Scenario: Ref to nonexistent evaluator yields parse error
41+
Given a String-flag with key "ref-to-nonexistent-evaluator-flag" and a default value "fallback"
42+
When the flag was evaluated with details
43+
Then the resolved details value should be "fallback"
44+
And the error-code should be "PARSE_ERROR"
45+
2346
# custom operators
2447
# @fractional-v1: legacy float-based bucketing (abs(hash) / i32::MAX * 100)
2548
# @fractional-v2: high-precision integer bucketing ((hash * totalWeight) >> 32)

0 commit comments

Comments
 (0)