1+ using Shouldly ;
2+ using System ;
3+ using System . Collections . Generic ;
4+ using System . Net ;
5+ using System . Net . Http ;
6+ using System . Text ;
7+ using System . Threading ;
8+ using System . Threading . Tasks ;
9+ using Xunit ;
10+ using Moq ;
11+ using Xunit . Sdk ;
12+ using Moq . Protected ;
13+
14+ namespace Checkout
15+ {
16+ public class CheckoutSdkTelemetryIntegrationTest
17+ {
18+ [ Fact ]
19+ public async Task ShouldSendTelemetryByDefault ( )
20+ {
21+ Mock < HttpMessageHandler > mockedMessageHandler = new Mock < HttpMessageHandler > ( ) ;
22+ mockedMessageHandler . Protected ( )
23+ . Setup < Task < HttpResponseMessage > > ( "SendAsync" , ItExpr . IsAny < HttpRequestMessage > ( ) , ItExpr . IsAny < CancellationToken > ( ) )
24+ . Returns ( ( HttpRequestMessage request , CancellationToken token ) =>
25+ {
26+ return Task . FromResult ( new HttpResponseMessage ( HttpStatusCode . OK ) ) ;
27+ } )
28+ . Verifiable ( ) ;
29+
30+ var httpFactory = new TestingClientFactory ( mockedMessageHandler . Object ) ;
31+
32+ var checkoutApi = CheckoutSdk
33+ . Builder ( )
34+ . Previous ( )
35+ . StaticKeys ( )
36+ . PublicKey ( System . Environment . GetEnvironmentVariable ( "CHECKOUT_PREVIOUS_PUBLIC_KEY" ) )
37+ . SecretKey ( System . Environment . GetEnvironmentVariable ( "CHECKOUT_PREVIOUS_SECRET_KEY" ) )
38+ . Environment ( Environment . Sandbox )
39+ . HttpClientFactory ( httpFactory )
40+ . Build ( ) ;
41+
42+ checkoutApi . ShouldNotBeNull ( ) ;
43+
44+ await checkoutApi . EventsClient ( ) . RetrieveAllEventTypes ( ) ;
45+ await checkoutApi . EventsClient ( ) . RetrieveAllEventTypes ( ) ;
46+ await checkoutApi . EventsClient ( ) . RetrieveAllEventTypes ( ) ;
47+
48+ mockedMessageHandler . Protected ( ) . Verify (
49+ "SendAsync" ,
50+ Times . Exactly ( 2 ) , // we expected two sends to contain the telemetry header
51+ ItExpr . Is < HttpRequestMessage > ( req =>
52+ req . Headers . Contains ( "cko-sdk-telemetry" )
53+ ) ,
54+ ItExpr . IsAny < CancellationToken > ( )
55+ ) ;
56+ }
57+
58+ [ Fact ]
59+ public async Task ShouldNotSendTelemetryWhenOptedOut ( )
60+ {
61+ Mock < HttpMessageHandler > mockedMessageHandler = new Mock < HttpMessageHandler > ( ) ;
62+ mockedMessageHandler . Protected ( )
63+ . Setup < Task < HttpResponseMessage > > ( "SendAsync" , ItExpr . IsAny < HttpRequestMessage > ( ) , ItExpr . IsAny < CancellationToken > ( ) )
64+ . Returns ( ( HttpRequestMessage request , CancellationToken token ) =>
65+ {
66+ return Task . FromResult ( new HttpResponseMessage ( HttpStatusCode . OK ) ) ;
67+ } )
68+ . Verifiable ( ) ;
69+
70+ var httpFactory = new TestingClientFactory ( mockedMessageHandler . Object ) ;
71+
72+ var checkoutApi = CheckoutSdk
73+ . Builder ( )
74+ . Previous ( )
75+ . StaticKeys ( )
76+ . PublicKey ( System . Environment . GetEnvironmentVariable ( "CHECKOUT_PREVIOUS_PUBLIC_KEY" ) )
77+ . SecretKey ( System . Environment . GetEnvironmentVariable ( "CHECKOUT_PREVIOUS_SECRET_KEY" ) )
78+ . RecordTelemetry ( false )
79+ . Environment ( Environment . Sandbox )
80+ . HttpClientFactory ( httpFactory )
81+ . Build ( ) ;
82+
83+ checkoutApi . ShouldNotBeNull ( ) ;
84+
85+ await checkoutApi . EventsClient ( ) . RetrieveAllEventTypes ( ) ;
86+ await checkoutApi . EventsClient ( ) . RetrieveAllEventTypes ( ) ;
87+
88+ mockedMessageHandler . Protected ( ) . Verify (
89+ "SendAsync" ,
90+ Times . Exactly ( 0 ) , // we expected only one to contain the telemetry header
91+ ItExpr . Is < HttpRequestMessage > ( req =>
92+ req . Headers . Contains ( "cko-sdk-telemetry" )
93+ ) ,
94+ ItExpr . IsAny < CancellationToken > ( )
95+ ) ;
96+ }
97+
98+ private class TestingClientFactory : IHttpClientFactory
99+ {
100+ HttpMessageHandler _handler ;
101+
102+ public TestingClientFactory ( HttpMessageHandler handler )
103+ {
104+ _handler = handler ;
105+ }
106+
107+ public HttpClient CreateClient ( )
108+ {
109+ var httpClient = new HttpClient ( _handler ) ;
110+ httpClient . Timeout = TimeSpan . FromSeconds ( 2 ) ;
111+ return httpClient ;
112+ }
113+ }
114+ }
115+ }
0 commit comments