5
5
"testing"
6
6
7
7
"github.com/stretchr/testify/assert"
8
+ "github.com/stretchr/testify/require"
8
9
9
10
"github.com/launchdarkly/go-sdk-common/v3/ldcontext"
10
11
"github.com/launchdarkly/go-sdk-common/v3/ldlog"
@@ -65,11 +66,42 @@ func TestScopedClientCollectsContexts(t *testing.T) {
65
66
66
67
assert .Equal (t , ldcontext .NewMulti (ldctx2 , ldctx3 , ldctx4 , dupeCtx ), c .CurrentContext ())
67
68
})
69
+
70
+ t .Run ("calling scoped client methods sends usage events" , func (t * testing.T ) {
71
+ client := makeTestClient ()
72
+ c := NewScopedClient (client , ldctx1 )
73
+ c .AddContext (ldctx2 , ldctx3 )
74
+ c .OverwriteContextByKind (ldctx3 , ldctx4 )
75
+
76
+ events := client .eventProcessor .(* mocks.CapturingEventProcessor ).Events
77
+ expectedEvents := []struct {
78
+ Key string
79
+ Context ldcontext.Context
80
+ DataString string
81
+ }{
82
+ {"$ld:scoped:usage" , ldctx1 , "new" },
83
+ {"$ld:scoped:usage" , ldctx2 , "add" },
84
+ {"$ld:scoped:usage" , ldctx3 , "add" },
85
+ {"$ld:scoped:usage" , ldctx3 , "overwrite" },
86
+ {"$ld:scoped:usage" , ldctx4 , "overwrite" },
87
+ }
88
+ require .Equal (t , len (expectedEvents ), len (events ))
89
+ for i , expected := range expectedEvents {
90
+ e := events [i ].(ldevents.CustomEventData )
91
+ assert .Equal (t , expected .Key , e .Key )
92
+ assert .Equal (t , ldevents .Context (expected .Context ), e .Context )
93
+ assert .Equal (t , ldvalue .String (expected .DataString ), e .Data )
94
+ }
95
+ })
68
96
}
69
97
70
98
// Testing the scoped versions of all the evaluation methods
71
99
// Almost the same as the tests in ldclient_evaluation_test.go, but with the scoped client instead
72
100
101
+ func clearCapturedEvents (client * LDClient ) {
102
+ client .eventProcessor .(* mocks.CapturingEventProcessor ).Events = nil
103
+ }
104
+
73
105
func TestScopedBoolVariation (t * testing.T ) {
74
106
expected , defaultVal := true , false
75
107
@@ -78,6 +110,7 @@ func TestScopedBoolVariation(t *testing.T) {
78
110
p .setupSingleValueFlag (evalFlagKey , ldvalue .Bool (true ))
79
111
80
112
scopedClient := NewScopedClient (p .client , evalTestUser )
113
+ clearCapturedEvents (p .client )
81
114
actual , err := scopedClient .BoolVariation (evalFlagKey , defaultVal )
82
115
83
116
assert .NoError (t , err )
@@ -91,6 +124,7 @@ func TestScopedBoolVariation(t *testing.T) {
91
124
p .setupSingleValueFlag (evalFlagKey , ldvalue .Bool (true ))
92
125
93
126
scopedClient := NewScopedClient (p .client , evalTestUser )
127
+ clearCapturedEvents (p .client )
94
128
actual , err := scopedClient .BoolVariationCtx (gocontext .TODO (), evalFlagKey , defaultVal )
95
129
96
130
assert .NoError (t , err )
@@ -104,6 +138,7 @@ func TestScopedBoolVariation(t *testing.T) {
104
138
p .setupSingleValueFlag (evalFlagKey , ldvalue .Bool (true ))
105
139
106
140
scopedClient := NewScopedClient (p .client , evalTestUser )
141
+ clearCapturedEvents (p .client )
107
142
actual , detail , err := scopedClient .BoolVariationDetail (evalFlagKey , defaultVal )
108
143
109
144
assert .NoError (t , err )
@@ -119,6 +154,7 @@ func TestScopedBoolVariation(t *testing.T) {
119
154
p .setupSingleValueFlag (evalFlagKey , ldvalue .Bool (true ))
120
155
121
156
scopedClient := NewScopedClient (p .client , evalTestUser )
157
+ clearCapturedEvents (p .client )
122
158
actual , detail , err := scopedClient .BoolVariationDetailCtx (gocontext .TODO (), evalFlagKey , defaultVal )
123
159
124
160
assert .NoError (t , err )
@@ -139,6 +175,7 @@ func TestScopedIntVariation(t *testing.T) {
139
175
p .setupSingleValueFlag (evalFlagKey , ldvalue .Int (expected ))
140
176
141
177
scopedClient := NewScopedClient (p .client , evalTestUser )
178
+ clearCapturedEvents (p .client )
142
179
actual , err := scopedClient .IntVariation (evalFlagKey , defaultVal )
143
180
144
181
assert .NoError (t , err )
@@ -152,6 +189,7 @@ func TestScopedIntVariation(t *testing.T) {
152
189
p .setupSingleValueFlag (evalFlagKey , ldvalue .Int (expected ))
153
190
154
191
scopedClient := NewScopedClient (p .client , evalTestUser )
192
+ clearCapturedEvents (p .client )
155
193
actual , err := scopedClient .IntVariationCtx (gocontext .TODO (), evalFlagKey , defaultVal )
156
194
157
195
assert .NoError (t , err )
@@ -165,6 +203,7 @@ func TestScopedIntVariation(t *testing.T) {
165
203
p .setupSingleValueFlag (evalFlagKey , ldvalue .Int (expected ))
166
204
167
205
scopedClient := NewScopedClient (p .client , evalTestUser )
206
+ clearCapturedEvents (p .client )
168
207
actual , detail , err := scopedClient .IntVariationDetail (evalFlagKey , defaultVal )
169
208
170
209
assert .NoError (t , err )
@@ -180,6 +219,7 @@ func TestScopedIntVariation(t *testing.T) {
180
219
p .setupSingleValueFlag (evalFlagKey , ldvalue .Int (expected ))
181
220
182
221
scopedClient := NewScopedClient (p .client , evalTestUser )
222
+ clearCapturedEvents (p .client )
183
223
actual , detail , err := scopedClient .IntVariationDetailCtx (gocontext .TODO (), evalFlagKey , defaultVal )
184
224
185
225
assert .NoError (t , err )
@@ -200,6 +240,7 @@ func TestScopedFloat64Variation(t *testing.T) {
200
240
p .setupSingleValueFlag (evalFlagKey , ldvalue .Float64 (expected ))
201
241
202
242
scopedClient := NewScopedClient (p .client , evalTestUser )
243
+ clearCapturedEvents (p .client )
203
244
actual , err := scopedClient .Float64Variation (evalFlagKey , defaultVal )
204
245
205
246
assert .NoError (t , err )
@@ -213,6 +254,7 @@ func TestScopedFloat64Variation(t *testing.T) {
213
254
p .setupSingleValueFlag (evalFlagKey , ldvalue .Float64 (expected ))
214
255
215
256
scopedClient := NewScopedClient (p .client , evalTestUser )
257
+ clearCapturedEvents (p .client )
216
258
actual , err := scopedClient .Float64VariationCtx (gocontext .TODO (), evalFlagKey , defaultVal )
217
259
218
260
assert .NoError (t , err )
@@ -226,6 +268,7 @@ func TestScopedFloat64Variation(t *testing.T) {
226
268
p .setupSingleValueFlag (evalFlagKey , ldvalue .Float64 (expected ))
227
269
228
270
scopedClient := NewScopedClient (p .client , evalTestUser )
271
+ clearCapturedEvents (p .client )
229
272
actual , detail , err := scopedClient .Float64VariationDetail (evalFlagKey , defaultVal )
230
273
231
274
assert .NoError (t , err )
@@ -241,6 +284,7 @@ func TestScopedFloat64Variation(t *testing.T) {
241
284
p .setupSingleValueFlag (evalFlagKey , ldvalue .Float64 (expected ))
242
285
243
286
scopedClient := NewScopedClient (p .client , evalTestUser )
287
+ clearCapturedEvents (p .client )
244
288
actual , detail , err := scopedClient .Float64VariationDetailCtx (gocontext .TODO (), evalFlagKey , defaultVal )
245
289
246
290
assert .NoError (t , err )
@@ -261,6 +305,7 @@ func TestScopedStringVariation(t *testing.T) {
261
305
p .setupSingleValueFlag (evalFlagKey , ldvalue .String (expected ))
262
306
263
307
scopedClient := NewScopedClient (p .client , evalTestUser )
308
+ clearCapturedEvents (p .client )
264
309
actual , err := scopedClient .StringVariation (evalFlagKey , defaultVal )
265
310
266
311
assert .NoError (t , err )
@@ -274,6 +319,7 @@ func TestScopedStringVariation(t *testing.T) {
274
319
p .setupSingleValueFlag (evalFlagKey , ldvalue .String (expected ))
275
320
276
321
scopedClient := NewScopedClient (p .client , evalTestUser )
322
+ clearCapturedEvents (p .client )
277
323
actual , err := scopedClient .StringVariationCtx (gocontext .TODO (), evalFlagKey , defaultVal )
278
324
279
325
assert .NoError (t , err )
@@ -287,6 +333,7 @@ func TestScopedStringVariation(t *testing.T) {
287
333
p .setupSingleValueFlag (evalFlagKey , ldvalue .String (expected ))
288
334
289
335
scopedClient := NewScopedClient (p .client , evalTestUser )
336
+ clearCapturedEvents (p .client )
290
337
actual , detail , err := scopedClient .StringVariationDetail (evalFlagKey , defaultVal )
291
338
292
339
assert .NoError (t , err )
@@ -302,6 +349,7 @@ func TestScopedStringVariation(t *testing.T) {
302
349
p .setupSingleValueFlag (evalFlagKey , ldvalue .String (expected ))
303
350
304
351
scopedClient := NewScopedClient (p .client , evalTestUser )
352
+ clearCapturedEvents (p .client )
305
353
actual , detail , err := scopedClient .StringVariationDetailCtx (gocontext .TODO (), evalFlagKey , defaultVal )
306
354
307
355
assert .NoError (t , err )
@@ -323,6 +371,7 @@ func TestScopedJSONVariation(t *testing.T) {
323
371
p .setupSingleValueFlag (evalFlagKey , expected )
324
372
325
373
scopedClient := NewScopedClient (p .client , evalTestUser )
374
+ clearCapturedEvents (p .client )
326
375
actual , err := scopedClient .JSONVariation (evalFlagKey , defaultVal )
327
376
328
377
assert .NoError (t , err )
@@ -336,6 +385,7 @@ func TestScopedJSONVariation(t *testing.T) {
336
385
p .setupSingleValueFlag (evalFlagKey , expected )
337
386
338
387
scopedClient := NewScopedClient (p .client , evalTestUser )
388
+ clearCapturedEvents (p .client )
339
389
actual , err := scopedClient .JSONVariationCtx (gocontext .TODO (), evalFlagKey , defaultVal )
340
390
341
391
assert .NoError (t , err )
@@ -349,6 +399,7 @@ func TestScopedJSONVariation(t *testing.T) {
349
399
p .setupSingleValueFlag (evalFlagKey , expected )
350
400
351
401
scopedClient := NewScopedClient (p .client , evalTestUser )
402
+ clearCapturedEvents (p .client )
352
403
actual , detail , err := scopedClient .JSONVariationDetail (evalFlagKey , defaultVal )
353
404
354
405
assert .NoError (t , err )
@@ -364,6 +415,7 @@ func TestScopedJSONVariation(t *testing.T) {
364
415
p .setupSingleValueFlag (evalFlagKey , expected )
365
416
366
417
scopedClient := NewScopedClient (p .client , evalTestUser )
418
+ clearCapturedEvents (p .client )
367
419
actual , detail , err := scopedClient .JSONVariationDetailCtx (gocontext .TODO (), evalFlagKey , defaultVal )
368
420
369
421
assert .NoError (t , err )
@@ -416,8 +468,8 @@ func TestScopedTrackCalls(t *testing.T) {
416
468
assert .NoError (t , err )
417
469
418
470
events := client .eventProcessor .(* mocks.CapturingEventProcessor ).Events
419
- assert .Equal (t , 1 , len (events ))
420
- e := events [0 ].(ldevents.CustomEventData )
471
+ assert .Equal (t , 2 , len (events ))
472
+ e := events [1 ].(ldevents.CustomEventData )
421
473
assert .Equal (t , ldevents .Context (evalTestUser ), e .Context )
422
474
assert .Equal (t , key , e .Key )
423
475
})
@@ -431,8 +483,8 @@ func TestScopedTrackCalls(t *testing.T) {
431
483
assert .NoError (t , err )
432
484
433
485
events := client .eventProcessor .(* mocks.CapturingEventProcessor ).Events
434
- assert .Equal (t , 1 , len (events ))
435
- e := events [0 ].(ldevents.CustomEventData )
486
+ assert .Equal (t , 2 , len (events ))
487
+ e := events [1 ].(ldevents.CustomEventData )
436
488
assert .Equal (t , ldevents .Context (evalTestUser ), e .Context )
437
489
assert .Equal (t , key , e .Key )
438
490
})
@@ -447,8 +499,8 @@ func TestScopedTrackCalls(t *testing.T) {
447
499
assert .NoError (t , err )
448
500
449
501
events := client .eventProcessor .(* mocks.CapturingEventProcessor ).Events
450
- assert .Equal (t , 1 , len (events ))
451
- e := events [0 ].(ldevents.CustomEventData )
502
+ assert .Equal (t , 2 , len (events ))
503
+ e := events [1 ].(ldevents.CustomEventData )
452
504
assert .Equal (t , ldevents .Context (evalTestUser ), e .Context )
453
505
assert .Equal (t , key , e .Key )
454
506
assert .Equal (t , data , e .Data )
@@ -464,8 +516,8 @@ func TestScopedTrackCalls(t *testing.T) {
464
516
assert .NoError (t , err )
465
517
466
518
events := client .eventProcessor .(* mocks.CapturingEventProcessor ).Events
467
- assert .Equal (t , 1 , len (events ))
468
- e := events [0 ].(ldevents.CustomEventData )
519
+ assert .Equal (t , 2 , len (events ))
520
+ e := events [1 ].(ldevents.CustomEventData )
469
521
assert .Equal (t , ldevents .Context (evalTestUser ), e .Context )
470
522
assert .Equal (t , key , e .Key )
471
523
assert .Equal (t , data , e .Data )
@@ -482,8 +534,8 @@ func TestScopedTrackCalls(t *testing.T) {
482
534
assert .NoError (t , err )
483
535
484
536
events := client .eventProcessor .(* mocks.CapturingEventProcessor ).Events
485
- assert .Equal (t , 1 , len (events ))
486
- e := events [0 ].(ldevents.CustomEventData )
537
+ assert .Equal (t , 2 , len (events ))
538
+ e := events [1 ].(ldevents.CustomEventData )
487
539
assert .Equal (t , ldevents .Context (evalTestUser ), e .Context )
488
540
assert .Equal (t , key , e .Key )
489
541
assert .Equal (t , data , e .Data )
@@ -501,8 +553,8 @@ func TestScopedTrackCalls(t *testing.T) {
501
553
assert .NoError (t , err )
502
554
503
555
events := client .eventProcessor .(* mocks.CapturingEventProcessor ).Events
504
- assert .Equal (t , 1 , len (events ))
505
- e := events [0 ].(ldevents.CustomEventData )
556
+ assert .Equal (t , 2 , len (events ))
557
+ e := events [1 ].(ldevents.CustomEventData )
506
558
assert .Equal (t , ldevents .Context (evalTestUser ), e .Context )
507
559
assert .Equal (t , key , e .Key )
508
560
assert .Equal (t , data , e .Data )
0 commit comments