@@ -144,183 +144,6 @@ func TestTrackFail(t *testing.T) {
144
144
145
145
}
146
146
147
- func TestIsFeatureEnabled (t * testing.T ) {
148
- testUserContext := entities.UserContext {ID : "test_user_1" }
149
- testVariation := entities.Variation {
150
- ID : "22222" ,
151
- Key : "22222" ,
152
- FeatureEnabled : true ,
153
- }
154
- testExperiment := entities.Experiment {
155
- ID : "111111" ,
156
- Variations : map [string ]entities.Variation {"22222" : testVariation },
157
- }
158
- testFeatureKey := "test_feature_key"
159
- testFeature := entities.Feature {
160
- ID : "22222" ,
161
- Key : testFeatureKey ,
162
- FeatureExperiments : []entities.Experiment {testExperiment },
163
- }
164
- // Test happy path
165
- mockConfig := new (MockProjectConfig )
166
- mockConfig .On ("GetFeatureByKey" , testFeatureKey ).Return (testFeature , nil )
167
- mockConfigManager := new (MockProjectConfigManager )
168
- mockConfigManager .On ("GetConfig" ).Return (mockConfig , nil )
169
- // Set up the mock decision service and its return value
170
- testDecisionContext := decision.FeatureDecisionContext {
171
- Feature : & testFeature ,
172
- ProjectConfig : mockConfig ,
173
- }
174
-
175
- expectedFeatureDecision := decision.FeatureDecision {
176
- Experiment : testExperiment ,
177
- Variation : & testVariation ,
178
- }
179
-
180
- mockDecisionService := new (MockDecisionService )
181
- mockDecisionService .On ("GetFeatureDecision" , testDecisionContext , testUserContext ).Return (expectedFeatureDecision , nil )
182
-
183
- client := OptimizelyClient {
184
- ConfigManager : mockConfigManager ,
185
- DecisionService : mockDecisionService ,
186
- }
187
- result , _ := client .IsFeatureEnabled (testFeatureKey , testUserContext )
188
- assert .True (t , result )
189
- mockConfig .AssertExpectations (t )
190
- mockConfigManager .AssertExpectations (t )
191
- mockDecisionService .AssertExpectations (t )
192
- }
193
-
194
- func TestIsFeatureEnabledErrorCases (t * testing.T ) {
195
- testUserContext := entities.UserContext {ID : "test_user_1" }
196
- testFeatureKey := "test_feature_key"
197
-
198
- // Test instance invalid
199
- mockConfigManager := new (MockProjectConfigManager )
200
- mockConfigManager .On ("GetConfig" ).Return (nil , errors .New ("no project config available" ))
201
- mockDecisionService := new (MockDecisionService )
202
-
203
- client := OptimizelyClient {
204
- ConfigManager : mockConfigManager ,
205
- DecisionService : mockDecisionService ,
206
- }
207
- result , _ := client .IsFeatureEnabled (testFeatureKey , testUserContext )
208
- assert .False (t , result )
209
- mockDecisionService .AssertNotCalled (t , "GetFeatureDecision" )
210
-
211
- // Test invalid feature key
212
- expectedError := errors .New ("Invalid feature key" )
213
- mockConfig := new (MockProjectConfig )
214
- mockConfig .On ("GetFeatureByKey" , testFeatureKey ).Return (entities.Feature {}, expectedError )
215
-
216
- mockConfigManager = new (MockProjectConfigManager )
217
- mockConfigManager .On ("GetConfig" ).Return (mockConfig , nil )
218
- mockDecisionService = new (MockDecisionService )
219
- client = OptimizelyClient {
220
- ConfigManager : mockConfigManager ,
221
- DecisionService : mockDecisionService ,
222
- }
223
- result , err := client .IsFeatureEnabled (testFeatureKey , testUserContext )
224
- if assert .Error (t , err ) {
225
- assert .Equal (t , expectedError , err )
226
- }
227
- assert .False (t , result )
228
- mockConfigManager .AssertExpectations (t )
229
- mockDecisionService .AssertNotCalled (t , "GetDecision" )
230
- }
231
-
232
- func TestIsFeatureEnabledPanic (t * testing.T ) {
233
- testUserContext := entities.UserContext {ID : "test_user_1" }
234
- testFeatureKey := "test_feature_key"
235
-
236
- mockDecisionService := new (MockDecisionService )
237
-
238
- client := OptimizelyClient {
239
- ConfigManager : & PanickingConfigManager {},
240
- DecisionService : mockDecisionService ,
241
- }
242
-
243
- // ensure that the client calms back down and recovers
244
- result , err := client .IsFeatureEnabled (testFeatureKey , testUserContext )
245
- assert .False (t , result )
246
- assert .True (t , assert .Error (t , err ))
247
- }
248
-
249
- func TestGetEnabledFeatures (t * testing.T ) {
250
- testUserContext := entities.UserContext {ID : "test_user_1" }
251
- testVariationEnabled := entities.Variation {
252
- ID : "22222" ,
253
- Key : "22222" ,
254
- FeatureEnabled : true ,
255
- }
256
- testVariationDisabled := entities.Variation {
257
- ID : "22222" ,
258
- Key : "22222" ,
259
- FeatureEnabled : false ,
260
- }
261
- testExperimentEnabled := entities.Experiment {
262
- ID : "111111" ,
263
- Variations : map [string ]entities.Variation {"22222" : testVariationEnabled },
264
- }
265
- testExperimentDisabled := entities.Experiment {
266
- ID : "111111" ,
267
- Variations : map [string ]entities.Variation {"22222" : testVariationDisabled },
268
- }
269
- testFeatureEnabledKey := "test_feature_enabled_key"
270
- testFeatureEnabled := entities.Feature {
271
- ID : "22222" ,
272
- Key : testFeatureEnabledKey ,
273
- FeatureExperiments : []entities.Experiment {testExperimentEnabled },
274
- }
275
- testFeatureDisabledKey := "test_feature_disabled_key"
276
- testFeatureDisabled := entities.Feature {
277
- ID : "22222" ,
278
- Key : testFeatureDisabledKey ,
279
- FeatureExperiments : []entities.Experiment {testExperimentDisabled },
280
- }
281
- featureList := []entities.Feature {testFeatureEnabled , testFeatureDisabled }
282
- // Test happy path
283
- mockConfig := new (MockProjectConfig )
284
- mockConfig .On ("GetFeatureByKey" , testFeatureEnabledKey ).Return (testFeatureEnabled , nil )
285
- mockConfig .On ("GetFeatureByKey" , testFeatureDisabledKey ).Return (testFeatureDisabled , nil )
286
- mockConfig .On ("GetFeatureList" ).Return (featureList )
287
- mockConfigManager := new (MockProjectConfigManager )
288
- mockConfigManager .On ("GetConfig" ).Return (mockConfig , nil )
289
- // Set up the mock decision service and its return value
290
- testDecisionContextEnabled := decision.FeatureDecisionContext {
291
- Feature : & testFeatureEnabled ,
292
- ProjectConfig : mockConfig ,
293
- }
294
- testDecisionContextDisabled := decision.FeatureDecisionContext {
295
- Feature : & testFeatureDisabled ,
296
- ProjectConfig : mockConfig ,
297
- }
298
-
299
- expectedFeatureDecisionEnabled := decision.FeatureDecision {
300
- Experiment : testExperimentEnabled ,
301
- Variation : & testVariationEnabled ,
302
- }
303
- expectedFeatureDecisionDisabled := decision.FeatureDecision {
304
- Experiment : testExperimentDisabled ,
305
- Variation : & testVariationDisabled ,
306
- }
307
-
308
- mockDecisionService := new (MockDecisionService )
309
- mockDecisionService .On ("GetFeatureDecision" , testDecisionContextEnabled , testUserContext ).Return (expectedFeatureDecisionEnabled , nil )
310
- mockDecisionService .On ("GetFeatureDecision" , testDecisionContextDisabled , testUserContext ).Return (expectedFeatureDecisionDisabled , nil )
311
-
312
- client := OptimizelyClient {
313
- ConfigManager : mockConfigManager ,
314
- DecisionService : mockDecisionService ,
315
- }
316
- result , err := client .GetEnabledFeatures (testUserContext )
317
- assert .NoError (t , err )
318
- assert .ElementsMatch (t , result , []string {testFeatureEnabledKey })
319
- mockConfig .AssertExpectations (t )
320
- mockConfigManager .AssertExpectations (t )
321
- mockDecisionService .AssertExpectations (t )
322
- }
323
-
324
147
func TestGetEnabledFeaturesErrorCases (t * testing.T ) {
325
148
testUserContext := entities.UserContext {ID : "test_user_1" }
326
149
@@ -1639,7 +1462,7 @@ func (s *ClientTestSuiteAB) SetupTest() {
1639
1462
1640
1463
func (s * ClientTestSuiteAB ) TestActivate () {
1641
1464
testUserContext := entities.UserContext {ID : "test_user_1" }
1642
- testExperiment := getTestExperiment ("test_exp_1" )
1465
+ testExperiment := makeTestExperiment ("test_exp_1" )
1643
1466
s .mockConfig .On ("GetExperimentByKey" , "test_exp_1" ).Return (testExperiment , nil )
1644
1467
1645
1468
testDecisionContext := decision.ExperimentDecisionContext {
@@ -1683,7 +1506,7 @@ func (s *ClientTestSuiteAB) TestActivatePanics() {
1683
1506
1684
1507
func (s * ClientTestSuiteAB ) TestGetVariation () {
1685
1508
testUserContext := entities.UserContext {ID : "test_user_1" }
1686
- testExperiment := getTestExperiment ("test_exp_1" )
1509
+ testExperiment := makeTestExperiment ("test_exp_1" )
1687
1510
s .mockConfig .On ("GetExperimentByKey" , "test_exp_1" ).Return (testExperiment , nil )
1688
1511
1689
1512
testDecisionContext := decision.ExperimentDecisionContext {
@@ -1723,6 +1546,152 @@ func (s *ClientTestSuiteAB) TestGetVariationPanics() {
1723
1546
s .EqualError (err , "I'm panicking" )
1724
1547
}
1725
1548
1549
+ type ClientTestSuiteFM struct {
1550
+ suite.Suite
1551
+ mockConfig * MockProjectConfig
1552
+ mockConfigManager * MockProjectConfigManager
1553
+ mockDecisionService * MockDecisionService
1554
+ mockEventProcessor * MockEventProcessor
1555
+ }
1556
+
1557
+ func (s * ClientTestSuiteFM ) SetupTest () {
1558
+ s .mockConfig = new (MockProjectConfig )
1559
+ s .mockConfigManager = new (MockProjectConfigManager )
1560
+ s .mockConfigManager .On ("GetConfig" ).Return (s .mockConfig , nil )
1561
+ s .mockDecisionService = new (MockDecisionService )
1562
+ s .mockEventProcessor = new (MockEventProcessor )
1563
+ }
1564
+
1565
+ func (s * ClientTestSuiteFM ) TestIsFeatureEnabled () {
1566
+ testUserContext := entities.UserContext {ID : "test_user_1" }
1567
+
1568
+ // Test happy path
1569
+ testVariation := makeTestVariation ("green" , true )
1570
+ testExperiment := makeTestExperimentWithVariations ("number_1" , []entities.Variation {testVariation })
1571
+ testFeature := makeTestFeatureWithExperiment ("feature_1" , testExperiment )
1572
+ s .mockConfig .On ("GetFeatureByKey" , testFeature .Key ).Return (testFeature , nil )
1573
+ s .mockConfigManager .On ("GetConfig" ).Return (s .mockConfig , nil )
1574
+
1575
+ // Set up the mock decision service and its return value
1576
+ testDecisionContext := decision.FeatureDecisionContext {
1577
+ Feature : & testFeature ,
1578
+ ProjectConfig : s .mockConfig ,
1579
+ }
1580
+
1581
+ expectedFeatureDecision := decision.FeatureDecision {
1582
+ Experiment : testExperiment ,
1583
+ Variation : & testVariation ,
1584
+ }
1585
+
1586
+ s .mockDecisionService .On ("GetFeatureDecision" , testDecisionContext , testUserContext ).Return (expectedFeatureDecision , nil )
1587
+
1588
+ client := OptimizelyClient {
1589
+ ConfigManager : s .mockConfigManager ,
1590
+ DecisionService : s .mockDecisionService ,
1591
+ }
1592
+ result , _ := client .IsFeatureEnabled (testFeature .Key , testUserContext )
1593
+ s .True (result )
1594
+ s .mockConfig .AssertExpectations (s .T ())
1595
+ s .mockConfigManager .AssertExpectations (s .T ())
1596
+ s .mockDecisionService .AssertExpectations (s .T ())
1597
+ }
1598
+
1599
+ func (s * ClientTestSuiteFM ) TestIsFeatureEnabledErrorCases () {
1600
+ testUserContext := entities.UserContext {ID : "test_user_1" }
1601
+ testFeatureKey := "test_feature_key"
1602
+
1603
+ // Test instance invalid
1604
+ s .mockConfigManager .On ("GetConfig" ).Return (nil , errors .New ("no project config available" ))
1605
+
1606
+ client := OptimizelyClient {
1607
+ ConfigManager : s .mockConfigManager ,
1608
+ DecisionService : s .mockDecisionService ,
1609
+ }
1610
+ result , _ := client .IsFeatureEnabled (testFeatureKey , testUserContext )
1611
+ s .False (result )
1612
+ s .mockDecisionService .AssertNotCalled (s .T (), "GetFeatureDecision" )
1613
+
1614
+ // Test invalid feature key
1615
+ expectedError := errors .New ("Invalid feature key" )
1616
+ s .mockConfig .On ("GetFeatureByKey" , testFeatureKey ).Return (entities.Feature {}, expectedError )
1617
+ s .mockConfigManager .On ("GetConfig" ).Return (s .mockConfig , nil )
1618
+
1619
+ client = OptimizelyClient {
1620
+ ConfigManager : s .mockConfigManager ,
1621
+ DecisionService : s .mockDecisionService ,
1622
+ }
1623
+ result , err := client .IsFeatureEnabled (testFeatureKey , testUserContext )
1624
+ if s .Error (err ) {
1625
+ s .Equal (expectedError , err )
1626
+ }
1627
+ s .False (result )
1628
+ s .mockConfigManager .AssertExpectations (s .T ())
1629
+ s .mockDecisionService .AssertNotCalled (s .T (), "GetDecision" )
1630
+ }
1631
+
1632
+ func (s * ClientTestSuiteFM ) TestIsFeatureEnabledPanic () {
1633
+ testUserContext := entities.UserContext {ID : "test_user_1" }
1634
+ testFeatureKey := "test_feature_key"
1635
+
1636
+ client := OptimizelyClient {
1637
+ ConfigManager : & PanickingConfigManager {},
1638
+ }
1639
+
1640
+ // ensure that the client calms back down and recovers
1641
+ result , err := client .IsFeatureEnabled (testFeatureKey , testUserContext )
1642
+ s .False (result )
1643
+ s .Error (err )
1644
+ }
1645
+
1646
+ func (s * ClientTestSuiteFM ) TestGetEnabledFeatures () {
1647
+ testUserContext := entities.UserContext {ID : "test_user_1" }
1648
+ testVariationEnabled := makeTestVariation ("a" , true )
1649
+ testVariationDisabled := makeTestVariation ("b" , false )
1650
+ testExperimentEnabled := makeTestExperimentWithVariations ("enabled_exp" , []entities.Variation {testVariationEnabled })
1651
+ testExperimentDisabled := makeTestExperimentWithVariations ("disabled_exp" , []entities.Variation {testVariationDisabled })
1652
+ testFeatureEnabled := makeTestFeatureWithExperiment ("enabled_feat" , testExperimentEnabled )
1653
+ testFeatureDisabled := makeTestFeatureWithExperiment ("disabled_feat" , testExperimentDisabled )
1654
+
1655
+ featureList := []entities.Feature {testFeatureEnabled , testFeatureDisabled }
1656
+ s .mockConfig .On ("GetFeatureByKey" , testFeatureEnabled .Key ).Return (testFeatureEnabled , nil )
1657
+ s .mockConfig .On ("GetFeatureByKey" , testFeatureDisabled .Key ).Return (testFeatureDisabled , nil )
1658
+ s .mockConfig .On ("GetFeatureList" ).Return (featureList )
1659
+ s .mockConfigManager .On ("GetConfig" ).Return (s .mockConfig , nil )
1660
+
1661
+ testDecisionContextEnabled := decision.FeatureDecisionContext {
1662
+ Feature : & testFeatureEnabled ,
1663
+ ProjectConfig : s .mockConfig ,
1664
+ }
1665
+ testDecisionContextDisabled := decision.FeatureDecisionContext {
1666
+ Feature : & testFeatureDisabled ,
1667
+ ProjectConfig : s .mockConfig ,
1668
+ }
1669
+
1670
+ expectedFeatureDecisionEnabled := decision.FeatureDecision {
1671
+ Experiment : testExperimentEnabled ,
1672
+ Variation : & testVariationEnabled ,
1673
+ }
1674
+ expectedFeatureDecisionDisabled := decision.FeatureDecision {
1675
+ Experiment : testExperimentDisabled ,
1676
+ Variation : & testVariationDisabled ,
1677
+ }
1678
+
1679
+ s .mockDecisionService .On ("GetFeatureDecision" , testDecisionContextEnabled , testUserContext ).Return (expectedFeatureDecisionEnabled , nil )
1680
+ s .mockDecisionService .On ("GetFeatureDecision" , testDecisionContextDisabled , testUserContext ).Return (expectedFeatureDecisionDisabled , nil )
1681
+
1682
+ client := OptimizelyClient {
1683
+ ConfigManager : s .mockConfigManager ,
1684
+ DecisionService : s .mockDecisionService ,
1685
+ }
1686
+ result , err := client .GetEnabledFeatures (testUserContext )
1687
+ s .NoError (err )
1688
+ s .ElementsMatch (result , []string {testFeatureEnabled .Key })
1689
+ s .mockConfig .AssertExpectations (s .T ())
1690
+ s .mockConfigManager .AssertExpectations (s .T ())
1691
+ s .mockDecisionService .AssertExpectations (s .T ())
1692
+ }
1693
+
1726
1694
func TestClientTestSuite (t * testing.T ) {
1727
1695
suite .Run (t , new (ClientTestSuiteAB ))
1696
+ suite .Run (t , new (ClientTestSuiteFM ))
1728
1697
}
0 commit comments