@@ -68,6 +68,27 @@ public void CanTrackSuccess()
6868 var tracker = new LdAiConfigTracker ( mockClient . Object , flagKey , config , context ) ;
6969 tracker . TrackSuccess ( ) ;
7070 mockClient . Verify ( x => x . Track ( "$ld:ai:generation" , context , data , 1.0f ) , Times . Once ) ;
71+ mockClient . Verify ( x => x . Track ( "$ld:ai:generation:success" , context , data , 1.0f ) , Times . Once ) ;
72+ }
73+
74+
75+ [ Fact ]
76+ public void CanTrackError ( )
77+ {
78+ var mockClient = new Mock < ILaunchDarklyClient > ( ) ;
79+ var context = Context . New ( "key" ) ;
80+ const string flagKey = "key" ;
81+ var config = LdAiConfig . Disabled ;
82+ var data = LdValue . ObjectFrom ( new Dictionary < string , LdValue >
83+ {
84+ { "variationKey" , LdValue . Of ( config . VariationKey ) } ,
85+ { "configKey" , LdValue . Of ( flagKey ) }
86+ } ) ;
87+
88+ var tracker = new LdAiConfigTracker ( mockClient . Object , flagKey , config , context ) ;
89+ tracker . TrackError ( ) ;
90+ mockClient . Verify ( x => x . Track ( "$ld:ai:generation" , context , data , 1.0f ) , Times . Once ) ;
91+ mockClient . Verify ( x => x . Track ( "$ld:ai:generation:error" , context , data , 1.0f ) , Times . Once ) ;
7192 }
7293
7394
@@ -189,6 +210,8 @@ public void CanTrackResponseWithSpecificLatency()
189210
190211 var result = tracker . TrackRequest ( Task . Run ( ( ) => givenResponse ) ) ;
191212 Assert . Equal ( givenResponse , result . Result ) ;
213+ mockClient . Verify ( x => x . Track ( "$ld:ai:generation:success" , context , data , 1.0f ) , Times . Once ) ;
214+ mockClient . Verify ( x => x . Track ( "$ld:ai:generation" , context , data , 1.0f ) , Times . Once ) ;
192215 mockClient . Verify ( x => x . Track ( "$ld:ai:tokens:total" , context , data , 1.0f ) , Times . Once ) ;
193216 mockClient . Verify ( x => x . Track ( "$ld:ai:tokens:input" , context , data , 2.0f ) , Times . Once ) ;
194217 mockClient . Verify ( x => x . Track ( "$ld:ai:tokens:output" , context , data , 3.0f ) , Times . Once ) ;
@@ -228,5 +251,29 @@ public void CanTrackResponseWithPartialData()
228251 // if latency isn't provided via Statistics, then it is automatically measured.
229252 mockClient . Verify ( x => x . Track ( "$ld:ai:duration:total" , context , data , It . IsAny < double > ( ) ) , Times . Once ) ;
230253 }
254+
255+ [ Fact ]
256+ public async Task CanTrackExceptionFromResponse ( )
257+ {
258+ var mockClient = new Mock < ILaunchDarklyClient > ( ) ;
259+ var context = Context . New ( "key" ) ;
260+ const string flagKey = "key" ;
261+ var config = LdAiConfig . Disabled ;
262+ var data = LdValue . ObjectFrom ( new Dictionary < string , LdValue >
263+ {
264+ { "variationKey" , LdValue . Of ( config . VariationKey ) } ,
265+ { "configKey" , LdValue . Of ( flagKey ) }
266+ } ) ;
267+
268+ var tracker = new LdAiConfigTracker ( mockClient . Object , flagKey , config , context ) ;
269+
270+ await Assert . ThrowsAsync < System . Exception > ( ( ) => tracker . TrackRequest ( Task . FromException < Response > ( new System . Exception ( "I am an exception" ) ) ) ) ;
271+
272+ mockClient . Verify ( x => x . Track ( "$ld:ai:generation" , context , data , 1.0f ) , Times . Once ) ;
273+ mockClient . Verify ( x => x . Track ( "$ld:ai:generation:error" , context , data , 1.0f ) , Times . Once ) ;
274+
275+ // if latency isn't provided via Statistics, then it is automatically measured.
276+ mockClient . Verify ( x => x . Track ( "$ld:ai:duration:total" , context , data , It . IsAny < double > ( ) ) , Times . Once ) ;
277+ }
231278 }
232279}
0 commit comments