Skip to content

Commit 61968c9

Browse files
Add test for new flag format
Signed-off-by: Thomas Poignant <[email protected]>
1 parent f4053ea commit 61968c9

File tree

2 files changed

+126
-11
lines changed

2 files changed

+126
-11
lines changed

internal/dto/converter_v0_test.go internal/dto/converter_test.go

+125-10
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,11 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
2020
want flag.InternalFlag
2121
}{
2222
{
23-
name: "Simplest flag, no converter provided",
23+
name: "Should return empty if flag dto is nil",
24+
want: flag.InternalFlag{},
25+
},
26+
{
27+
name: "[v0] Simplest flag, no converter provided",
2428
d: dto.DTO{DTOv0: dto.DTOv0{
2529
True: testconvert.Interface("true"),
2630
False: testconvert.Interface("false"),
@@ -43,7 +47,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
4347
},
4448
},
4549
{
46-
name: "Flag with percentage",
50+
name: "[v0] Flag with percentage",
4751
d: dto.DTO{DTOv0: dto.DTOv0{
4852
Percentage: testconvert.Float64(10),
4953
True: testconvert.Interface("true"),
@@ -66,7 +70,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
6670
},
6771
},
6872
{
69-
name: "Flag with 100 percentage",
73+
name: "[v0] Flag with 100 percentage",
7074
d: dto.DTO{DTOv0: dto.DTOv0{
7175
Percentage: testconvert.Float64(100),
7276
True: testconvert.Interface("true"),
@@ -90,7 +94,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
9094
},
9195
},
9296
{
93-
name: "Flag with rule not match",
97+
name: "[v0] Flag with rule not match",
9498
d: dto.DTO{DTOv0: dto.DTOv0{
9599
Rule: testconvert.String("key eq \"random\""),
96100
True: testconvert.Interface("true"),
@@ -120,7 +124,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
120124
},
121125
},
122126
{
123-
name: "Flag with rule match",
127+
name: "[v0] Flag with rule match",
124128
d: dto.DTO{DTOv0: dto.DTOv0{
125129
Rule: testconvert.String("key eq \"test-user\""),
126130
True: testconvert.Interface("true"),
@@ -150,7 +154,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
150154
},
151155
},
152156
{
153-
name: "Flag with rule match + 10% percentage",
157+
name: "[v0] Flag with rule match + 10% percentage",
154158
d: dto.DTO{DTOv0: dto.DTOv0{
155159
Rule: testconvert.String("key eq \"test-user\""),
156160
Percentage: testconvert.Float64(10),
@@ -181,7 +185,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
181185
},
182186
},
183187
{
184-
name: "Flag with query + experimentation rollout",
188+
name: "[v0] Flag with query + experimentation rollout",
185189
d: dto.DTO{
186190
DTOv0: dto.DTOv0{
187191
Rule: testconvert.String("key eq \"test-user\""),
@@ -228,7 +232,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
228232
},
229233
},
230234
{
231-
name: "Flag with query + progressive rollout",
235+
name: "[v0] Flag with query + progressive rollout",
232236
d: dto.DTO{
233237
DTOv0: dto.DTOv0{
234238
Rule: testconvert.String("key eq \"test-user\""),
@@ -283,7 +287,7 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
283287
},
284288
},
285289
{
286-
name: "Flag without query + progressive rollout",
290+
name: "[v0] Flag without query + progressive rollout",
287291
d: dto.DTO{
288292
DTOv0: dto.DTOv0{
289293
True: testconvert.Interface("true"),
@@ -328,10 +332,121 @@ func TestConvertV0DtoToInternalFlag(t *testing.T) {
328332
},
329333
},
330334
},
335+
{
336+
name: "[v1] Complete and complex flag v1",
337+
d: dto.DTO{
338+
DTOv1: dto.DTOv1{
339+
Variations: &map[string]*interface{}{
340+
"VariationDefault": testconvert.Interface(false),
341+
"VariationBar": testconvert.Interface(false),
342+
"VariationFoo": testconvert.Interface(true),
343+
},
344+
Rules: &[]flag.Rule{
345+
{
346+
Name: testconvert.String("rule-number-1"),
347+
Query: testconvert.String("key eq \"random-key\""),
348+
Percentages: &map[string]float64{
349+
"VariationBar": 0,
350+
"VariationFoo": 100,
351+
},
352+
},
353+
{
354+
Name: testconvert.String("rule-number-2"),
355+
Query: testconvert.String("key eq \"other-random-key\""),
356+
ProgressiveRollout: &flag.ProgressiveRollout{
357+
Initial: &flag.ProgressiveRolloutStep{
358+
Variation: testconvert.String("VariationBar"),
359+
Percentage: testconvert.Float64(0),
360+
Date: testconvert.Time(time.Date(2021, time.February, 1, 10, 10, 10, 10, time.UTC)),
361+
},
362+
End: &flag.ProgressiveRolloutStep{
363+
Variation: testconvert.String("VariationFoo"),
364+
Percentage: testconvert.Float64(100),
365+
Date: testconvert.Time(time.Date(2021, time.February, 2, 10, 10, 10, 10, time.UTC)),
366+
},
367+
},
368+
},
369+
},
370+
DefaultRule: &flag.Rule{
371+
VariationResult: testconvert.String("VariationDefault"),
372+
},
373+
},
374+
Rollout: &dto.Rollout{
375+
CommonRollout: dto.CommonRollout{
376+
Experimentation: &dto.ExperimentationDto{
377+
Start: testconvert.Time(time.Date(2021, time.February, 1, 10, 10, 10, 10, time.UTC)),
378+
End: testconvert.Time(time.Date(2021, time.February, 2, 10, 10, 10, 10, time.UTC)),
379+
},
380+
},
381+
V1Rollout: dto.V1Rollout{Scheduled: &[]flag.ScheduledStep{
382+
{
383+
InternalFlag: flag.InternalFlag{
384+
Variations: &map[string]*interface{}{
385+
"VariationDefault": testconvert.Interface(true),
386+
},
387+
},
388+
Date: testconvert.Time(time.Date(2021, time.February, 2, 10, 10, 10, 10, time.UTC)),
389+
},
390+
}},
391+
},
392+
},
393+
want: flag.InternalFlag{
394+
Variations: &map[string]*interface{}{
395+
"VariationDefault": testconvert.Interface(false),
396+
"VariationBar": testconvert.Interface(false),
397+
"VariationFoo": testconvert.Interface(true),
398+
},
399+
Rules: &[]flag.Rule{
400+
{
401+
Name: testconvert.String("rule-number-1"),
402+
Query: testconvert.String("key eq \"random-key\""),
403+
Percentages: &map[string]float64{
404+
"VariationBar": 0,
405+
"VariationFoo": 100,
406+
},
407+
},
408+
{
409+
Name: testconvert.String("rule-number-2"),
410+
Query: testconvert.String("key eq \"other-random-key\""),
411+
ProgressiveRollout: &flag.ProgressiveRollout{
412+
Initial: &flag.ProgressiveRolloutStep{
413+
Variation: testconvert.String("VariationBar"),
414+
Percentage: testconvert.Float64(0),
415+
Date: testconvert.Time(time.Date(2021, time.February, 1, 10, 10, 10, 10, time.UTC)),
416+
},
417+
End: &flag.ProgressiveRolloutStep{
418+
Variation: testconvert.String("VariationFoo"),
419+
Percentage: testconvert.Float64(100),
420+
Date: testconvert.Time(time.Date(2021, time.February, 2, 10, 10, 10, 10, time.UTC)),
421+
},
422+
},
423+
},
424+
},
425+
DefaultRule: &flag.Rule{
426+
VariationResult: testconvert.String("VariationDefault"),
427+
},
428+
Rollout: &flag.Rollout{
429+
Experimentation: &flag.ExperimentationRollout{
430+
Start: testconvert.Time(time.Date(2021, time.February, 1, 10, 10, 10, 10, time.UTC)),
431+
End: testconvert.Time(time.Date(2021, time.February, 2, 10, 10, 10, 10, time.UTC)),
432+
},
433+
Scheduled: &[]flag.ScheduledStep{
434+
{
435+
InternalFlag: flag.InternalFlag{
436+
Variations: &map[string]*interface{}{
437+
"VariationDefault": testconvert.Interface(true),
438+
},
439+
},
440+
Date: testconvert.Time(time.Date(2021, time.February, 2, 10, 10, 10, 10, time.UTC)),
441+
},
442+
},
443+
},
444+
},
445+
},
331446
}
332447
for _, tt := range tests {
333448
t.Run(tt.name, func(t *testing.T) {
334-
assert.Equal(t, tt.want, dto.ConvertV0DtoToInternalFlag(tt.d, false))
449+
assert.Equal(t, tt.want, tt.d.Convert())
335450
})
336451
}
337452
}

internal/dto/dto.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ type DTOv0 struct {
7070
}
7171

7272
func (d *DTO) Convert() flag.InternalFlag {
73-
if d == nil {
73+
if d == nil || (DTO{}) == *d {
7474
return flag.InternalFlag{}
7575
}
7676
if (d.Converter != nil && *d.Converter == "v0") || d.True != nil || d.False != nil {

0 commit comments

Comments
 (0)