Skip to content

Commit

Permalink
Merge b5c027f into ecf1d16
Browse files Browse the repository at this point in the history
  • Loading branch information
pawels-optimizely committed Apr 23, 2020
2 parents ecf1d16 + b5c027f commit 08ba8c3
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
6 changes: 5 additions & 1 deletion pkg/decision/composite_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
package decision

import (
"encoding/json"
"fmt"
"strconv"

Expand Down Expand Up @@ -48,7 +49,7 @@ func WithCompositeExperimentService(compositeExperimentService ExperimentService
// NewCompositeService returns a new instance of the CompositeService with the defaults
func NewCompositeService(sdkKey string, options ...CSOptionFunc) *CompositeService {
compositeService := &CompositeService{
logger:logging.GetLogger(sdkKey, "CompositeService"),
logger: logging.GetLogger(sdkKey, "CompositeService"),
notificationCenter: registry.GetNotificationCenter(sdkKey),
}

Expand Down Expand Up @@ -113,6 +114,9 @@ func (s CompositeService) GetFeatureDecision(featureDecisionContext FeatureDecis
convertedValue, e = strconv.ParseFloat(variableValue, 64)
case entities.Boolean:
convertedValue, e = strconv.ParseBool(variableValue)
case entities.JSON:
convertedValue = map[string]string{}
e = json.Unmarshal([]byte(variableValue), &convertedValue)
}

if e != nil {
Expand Down
69 changes: 69 additions & 0 deletions pkg/decision/composite_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,75 @@ func (s *CompositeServiceFeatureTestSuite) TestDecisionListenersNotificationWith

}

func (s *CompositeServiceFeatureTestSuite) TestDecisionListenersNotificationWithJSONVariable() {

compositeExperimentService := NewCompositeExperimentService("")
compositeFeatureDecisionService := NewCompositeFeatureService("", compositeExperimentService)
s.decisionContext.Variable = entities.Variable{
DefaultValue: "{\"field\": 12.01}",
ID: "1",
Key: "Key",
Type: entities.JSON,
}

decisionService := &CompositeService{
compositeFeatureService: compositeFeatureDecisionService,
notificationCenter: registry.GetNotificationCenter("some_key"),
}
decisionService.GetFeatureDecision(s.decisionContext, s.testUserContext)

var numberOfCalls = 0
note := notification.DecisionNotification{}
callback := func(notification notification.DecisionNotification) {
note = notification
numberOfCalls++
}
id, _ := decisionService.OnDecision(callback)

s.NotEqual(id, 0)

decisionService.GetFeatureDecision(s.decisionContext, s.testUserContext)
s.Equal(numberOfCalls, 1)

expectedDecisionInfo := map[string]interface{}{"feature": map[string]interface{}{"featureEnabled": false, "featureKey": "my_test_feature_3333", "source": FeatureTest,
"sourceInfo": map[string]string{"experimentKey": "test_experiment_1111", "variationKey": "2222"},
"variableKey": "Key", "variableType": entities.JSON, "variableValue": map[string]interface{}{"field": 12.01}}}

s.Equal(expectedDecisionInfo, note.DecisionInfo)

}

func (s *CompositeServiceFeatureTestSuite) TestDecisionListenersNotificationWithAllVariables() {

compositeExperimentService := NewCompositeExperimentService("")
compositeFeatureDecisionService := NewCompositeFeatureService("", compositeExperimentService)

decisionService := &CompositeService{
compositeFeatureService: compositeFeatureDecisionService,
notificationCenter: registry.GetNotificationCenter("some_key"),
}
decisionService.GetFeatureDecision(s.decisionContext, s.testUserContext)

var numberOfCalls = 0
note := notification.DecisionNotification{}
callback := func(notification notification.DecisionNotification) {
note = notification
numberOfCalls++
}
id, _ := decisionService.OnDecision(callback)

s.NotEqual(id, 0)

decisionService.GetFeatureDecision(s.decisionContext, s.testUserContext)
s.Equal(numberOfCalls, 1)

expectedDecisionInfo := map[string]interface{}{"feature": map[string]interface{}{"featureEnabled": false, "featureKey": "my_test_feature_3333", "source": FeatureTest,
"sourceInfo": map[string]string{"experimentKey": "test_experiment_1111", "variationKey": "2222"}}}

s.Equal(expectedDecisionInfo, note.DecisionInfo)

}

func (s *CompositeServiceFeatureTestSuite) TestDecisionListenersNotificationWithWrongTypelVariable() {

compositeExperimentService := NewCompositeExperimentService("")
Expand Down

0 comments on commit 08ba8c3

Please sign in to comment.