Skip to content

Commit fbbb090

Browse files
Add test to confirm configuring RecordTelemetry
1 parent d81373f commit fbbb090

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
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

Comments
 (0)