Skip to content

Commit

Permalink
Return an error with the default value
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas Poignant committed Dec 18, 2020
1 parent 50f9790 commit 4ee669b
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 36 deletions.
39 changes: 21 additions & 18 deletions variation.go
Expand Up @@ -2,29 +2,32 @@ package ffclient

import (
"errors"
"fmt"

"github.com/thomaspoignant/go-feature-flag/ffuser"
"github.com/thomaspoignant/go-feature-flag/internal/cache"
)

const errorCacheNotInit = "impossible to read the toggle before the initialisation"
const errorFlagNotAvailable = "flag %v is not present or disabled"
const errorWrongVariation = "wrong variation used for flag %v"

// BoolVariation return the value of the flag in boolean.
// An error is return if you don't have init the library before calling the function.
// If the key does not exist we return the default value.
func BoolVariation(flagKey string, user ffuser.User, defaultValue bool) (bool, error) {
if !cacheIsInitialized() {
return false, errors.New(errorCacheNotInit)
return defaultValue, errors.New(errorCacheNotInit)
}

flag, ok := cache.FlagsCache[flagKey]
if !ok || flag.Disable {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorFlagNotAvailable, flagKey)
}

res, ok := flag.Value(flagKey, user).(bool)
if !ok {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorWrongVariation, flagKey)
}
return res, nil
}
Expand All @@ -34,17 +37,17 @@ func BoolVariation(flagKey string, user ffuser.User, defaultValue bool) (bool, e
// If the key does not exist we return the default value.
func IntVariation(flagKey string, user ffuser.User, defaultValue int) (int, error) {
if !cacheIsInitialized() {
return 0, errors.New(errorCacheNotInit)
return defaultValue, errors.New(errorCacheNotInit)
}

flag, ok := cache.FlagsCache[flagKey]
if !ok || flag.Disable {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorFlagNotAvailable, flagKey)
}

res, ok := flag.Value(flagKey, user).(int)
if !ok {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorWrongVariation, flagKey)
}
return res, nil
}
Expand All @@ -54,17 +57,17 @@ func IntVariation(flagKey string, user ffuser.User, defaultValue int) (int, erro
// If the key does not exist we return the default value.
func Float64Variation(flagKey string, user ffuser.User, defaultValue float64) (float64, error) {
if !cacheIsInitialized() {
return 0, errors.New(errorCacheNotInit)
return defaultValue, errors.New(errorCacheNotInit)
}

flag, ok := cache.FlagsCache[flagKey]
if !ok || flag.Disable {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorFlagNotAvailable, flagKey)
}

res, ok := flag.Value(flagKey, user).(float64)
if !ok {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorWrongVariation, flagKey)
}
return res, nil
}
Expand All @@ -74,17 +77,17 @@ func Float64Variation(flagKey string, user ffuser.User, defaultValue float64) (f
// If the key does not exist we return the default value.
func StringVariation(flagKey string, user ffuser.User, defaultValue string) (string, error) {
if !cacheIsInitialized() {
return "", errors.New(errorCacheNotInit)
return defaultValue, errors.New(errorCacheNotInit)
}

flag, ok := cache.FlagsCache[flagKey]
if !ok || flag.Disable {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorFlagNotAvailable, flagKey)
}

res, ok := flag.Value(flagKey, user).(string)
if !ok || flag.Disable {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorWrongVariation, flagKey)
}
return res, nil
}
Expand All @@ -94,17 +97,17 @@ func StringVariation(flagKey string, user ffuser.User, defaultValue string) (str
// If the key does not exist we return the default value.
func JSONArrayVariation(flagKey string, user ffuser.User, defaultValue []interface{}) ([]interface{}, error) {
if !cacheIsInitialized() {
return nil, errors.New(errorCacheNotInit)
return defaultValue, errors.New(errorCacheNotInit)
}

flag, ok := cache.FlagsCache[flagKey]
if !ok || flag.Disable {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorFlagNotAvailable, flagKey)
}

res, ok := flag.Value(flagKey, user).([]interface{})
if !ok {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorWrongVariation, flagKey)
}
return res, nil
}
Expand All @@ -115,17 +118,17 @@ func JSONArrayVariation(flagKey string, user ffuser.User, defaultValue []interfa
func JSONVariation(
flagKey string, user ffuser.User, defaultValue map[string]interface{}) (map[string]interface{}, error) {
if !cacheIsInitialized() {
return nil, errors.New(errorCacheNotInit)
return defaultValue, errors.New(errorCacheNotInit)
}

flag, ok := cache.FlagsCache[flagKey]
if !ok || flag.Disable {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorFlagNotAvailable, flagKey)
}

res, ok := flag.Value(flagKey, user).(map[string]interface{})
if !ok {
return defaultValue, nil
return defaultValue, fmt.Errorf(errorWrongVariation, flagKey)
}
return res, nil
}
Expand Down
42 changes: 24 additions & 18 deletions variation_test.go
Expand Up @@ -49,7 +49,7 @@ func TestBoolVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: true,
wantErr: false,
wantErr: true,
},
{
name: "Get error when not init",
Expand All @@ -59,6 +59,7 @@ func TestBoolVariation(t *testing.T) {
defaultValue: true,
flagCache: nil,
},
want: true,
wantErr: true,
},
{
Expand All @@ -70,7 +71,7 @@ func TestBoolVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: true,
wantErr: false,
wantErr: true,
},
{
name: "Get default value, rule not apply",
Expand Down Expand Up @@ -122,7 +123,7 @@ func TestBoolVariation(t *testing.T) {
},
},
want: true,
wantErr: false,
wantErr: true,
},
}
for _, tt := range tests {
Expand Down Expand Up @@ -182,7 +183,7 @@ func TestFloat64Variation(t *testing.T) {
flagCache: flagCacheMock,
},
want: 120.0,
wantErr: false,
wantErr: true,
},
{
name: "Get error when not init",
Expand All @@ -192,6 +193,7 @@ func TestFloat64Variation(t *testing.T) {
defaultValue: 118.0,
flagCache: nil,
},
want: 118.0,
wantErr: true,
},
{
Expand All @@ -203,7 +205,7 @@ func TestFloat64Variation(t *testing.T) {
flagCache: flagCacheMock,
},
want: 118.0,
wantErr: false,
wantErr: true,
},
{
name: "Get default value, rule not apply",
Expand Down Expand Up @@ -255,7 +257,7 @@ func TestFloat64Variation(t *testing.T) {
},
},
want: 118.0,
wantErr: false,
wantErr: true,
},
}
for _, tt := range tests {
Expand Down Expand Up @@ -315,7 +317,7 @@ func TestJSONArrayVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: []interface{}{"toto"},
wantErr: false,
wantErr: true,
},
{
name: "Get error when not init",
Expand All @@ -325,6 +327,7 @@ func TestJSONArrayVariation(t *testing.T) {
defaultValue: []interface{}{"toto"},
flagCache: nil,
},
want: []interface{}{"toto"},
wantErr: true,
},
{
Expand All @@ -336,7 +339,7 @@ func TestJSONArrayVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: []interface{}{"toto"},
wantErr: false,
wantErr: true,
},
{
name: "Get default value, rule not apply",
Expand Down Expand Up @@ -388,7 +391,7 @@ func TestJSONArrayVariation(t *testing.T) {
},
},
want: []interface{}{"toto"},
wantErr: false,
wantErr: true,
},
}
for _, tt := range tests {
Expand Down Expand Up @@ -448,7 +451,7 @@ func TestJSONVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: map[string]interface{}{"default-notkey": true},
wantErr: false,
wantErr: true,
},
{
name: "Get error when not init",
Expand All @@ -458,6 +461,7 @@ func TestJSONVariation(t *testing.T) {
defaultValue: map[string]interface{}{"default-notkey": true},
flagCache: nil,
},
want: map[string]interface{}{"default-notkey": true},
wantErr: true,
},
{
Expand All @@ -469,7 +473,7 @@ func TestJSONVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: map[string]interface{}{"default-notkey": true},
wantErr: false,
wantErr: true,
},
{
name: "Get default value, rule not apply",
Expand Down Expand Up @@ -521,7 +525,7 @@ func TestJSONVariation(t *testing.T) {
},
},
want: map[string]interface{}{"default-notkey": true},
wantErr: false,
wantErr: true,
},
}
for _, tt := range tests {
Expand Down Expand Up @@ -581,7 +585,7 @@ func TestStringVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: "default-notkey",
wantErr: false,
wantErr: true,
},
{
name: "Get error when not init",
Expand All @@ -591,6 +595,7 @@ func TestStringVariation(t *testing.T) {
defaultValue: "default-notkey",
flagCache: nil,
},
want: "default-notkey",
wantErr: true,
},
{
Expand All @@ -602,7 +607,7 @@ func TestStringVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: "default-notkey",
wantErr: false,
wantErr: true,
},
{
name: "Get default value, rule not apply",
Expand Down Expand Up @@ -654,7 +659,7 @@ func TestStringVariation(t *testing.T) {
},
},
want: "default-notkey",
wantErr: false,
wantErr: true,
},
}
for _, tt := range tests {
Expand Down Expand Up @@ -714,7 +719,7 @@ func TestIntVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: 125,
wantErr: false,
wantErr: true,
},
{
name: "Get error when not init",
Expand All @@ -724,6 +729,7 @@ func TestIntVariation(t *testing.T) {
defaultValue: 118,
flagCache: nil,
},
want: 118,
wantErr: true,
},
{
Expand All @@ -735,7 +741,7 @@ func TestIntVariation(t *testing.T) {
flagCache: flagCacheMock,
},
want: 118,
wantErr: false,
wantErr: true,
},
{
name: "Get default value rule not apply",
Expand Down Expand Up @@ -787,7 +793,7 @@ func TestIntVariation(t *testing.T) {
},
},
want: 118,
wantErr: false,
wantErr: true,
},
}
for _, tt := range tests {
Expand Down

0 comments on commit 4ee669b

Please sign in to comment.