@@ -20,9 +20,100 @@ import (
2020 "errors"
2121 "testing"
2222
23+ "github.com/optimizely/go-sdk/optimizely/config"
24+ "github.com/optimizely/go-sdk/optimizely/config/datafileprojectconfig"
25+ "github.com/optimizely/go-sdk/optimizely/event"
2326 "github.com/stretchr/testify/assert"
2427)
2528
29+ type MockDispatcher struct {
30+ Events []event.LogEvent
31+ }
32+
33+ func (f * MockDispatcher ) DispatchEvent (event event.LogEvent , callback func (success bool )) {
34+ f .Events = append (f .Events , event )
35+ callback (true )
36+ }
37+
38+ func TestFactoryClientReturnsDefaultClient (t * testing.T ) {
39+ factory := OptimizelyFactory {}
40+
41+ client , err := factory .Client ()
42+ expectedErr := errors .New ("unable to instantiate client: no project config manager, SDK key, or a Datafile provided" )
43+ assert .False (t , client .isValid )
44+ if assert .Error (t , err ) {
45+ assert .Equal (t , err , expectedErr )
46+ }
47+ }
48+
49+ func TestClientWithSDKKey (t * testing.T ) {
50+ factory := OptimizelyFactory {SDKKey : "1212" }
51+
52+ clientOptions := Options {}
53+
54+ client , err := factory .ClientWithOptions (clientOptions )
55+ assert .True (t , client .isValid )
56+ assert .NoError (t , err )
57+ assert .NotNil (t , client .configManager )
58+ assert .NotNil (t , client .decisionService )
59+ assert .NotNil (t , client .eventProcessor )
60+ }
61+
62+ func TestClientWithProjectConfigManagerInOptions (t * testing.T ) {
63+ factory := OptimizelyFactory {}
64+ projectConfig := datafileprojectconfig.DatafileProjectConfig {}
65+ configManager := config .NewStaticProjectConfigManager (projectConfig )
66+
67+ clientOptions := Options {ProjectConfigManager : configManager }
68+
69+ client , err := factory .ClientWithOptions (clientOptions )
70+ assert .True (t , client .isValid )
71+ assert .NoError (t , err )
72+ assert .NotNil (t , client .configManager )
73+ assert .NotNil (t , client .decisionService )
74+ assert .NotNil (t , client .eventProcessor )
75+ }
76+
77+ func TestClientWithNoDecisionServiceAndEventProcessorInOptions (t * testing.T ) {
78+ factory := OptimizelyFactory {}
79+ projectConfig := datafileprojectconfig.DatafileProjectConfig {}
80+ configManager := config .NewStaticProjectConfigManager (projectConfig )
81+
82+ clientOptions := Options {ProjectConfigManager : configManager }
83+
84+ client , err := factory .ClientWithOptions (clientOptions )
85+ assert .True (t , client .isValid )
86+ assert .NoError (t , err )
87+ assert .NotNil (t , client .configManager )
88+ assert .NotNil (t , client .decisionService )
89+ assert .NotNil (t , client .eventProcessor )
90+ }
91+
92+ func TestClientWithDecisionServiceAndEventProcessorInOptions (t * testing.T ) {
93+ factory := OptimizelyFactory {}
94+ projectConfig := datafileprojectconfig.DatafileProjectConfig {}
95+ configManager := config .NewStaticProjectConfigManager (projectConfig )
96+ decisionService := new (MockDecisionService )
97+ processor := & event.QueueingEventProcessor {
98+ MaxQueueSize : 100 ,
99+ FlushInterval : 100 ,
100+ Q : event .NewInMemoryQueue (100 ),
101+ EventDispatcher : & MockDispatcher {},
102+ }
103+
104+ clientOptions := Options {
105+ ProjectConfigManager : configManager ,
106+ DecisionService : decisionService ,
107+ EventProcessor : processor ,
108+ }
109+
110+ client , err := factory .ClientWithOptions (clientOptions )
111+ assert .True (t , client .isValid )
112+ assert .NoError (t , err )
113+ assert .Equal (t , decisionService , client .decisionService )
114+ assert .Equal (t , processor , client .eventProcessor )
115+ }
116+
26117func TestClientWithOptionsErrorCase (t * testing.T ) {
27118 // Error when no config manager, sdk key, or datafile is provided
28119 factory := OptimizelyFactory {}
0 commit comments