forked from kontent-ai/delivery-sdk-net
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFakeHttpClientTests.cs
77 lines (66 loc) · 2.88 KB
/
FakeHttpClientTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using FakeItEasy;
using Kontent.Ai.Delivery.Abstractions;
using Kontent.Ai.Delivery.Builders.DeliveryClient;
using Kontent.Ai.Delivery.Configuration;
using Kontent.Ai.Delivery.Tests.Models.ContentTypes;
using RichardSzalay.MockHttp;
using Xunit;
namespace Kontent.Ai.Delivery.Tests
{
/// <summary>
/// Sample test mocking HTTP client
/// </summary>
public class FakeHttpClientTests
{
[Fact]
public async void GetItemAsync()
{
// Arrange
const string testUrl = "https://tests.fake.url";
var deliveryOptions = MockDeliveryOptions(testUrl);
var deliveryHttpClient = new DeliveryHttpClient(MockHttpClient(testUrl));
var deliveryClient = MockDeliveryClient(deliveryOptions, deliveryHttpClient);
// Act
var contentItem = await deliveryClient.GetItemAsync<Home>("test");
// Assert
Assert.Equal("1bd6ba00-4bf2-4a2b-8334-917faa686f66", contentItem.Item.System.Id);
}
private static HttpClient MockHttpClient(string baseUrl)
{
var responseJsonPath = Path.Combine(Environment.CurrentDirectory, $"Fixtures{Path.DirectorySeparatorChar}home.json");
var responseJson = File.ReadAllText(responseJsonPath);
var mockHttp = new MockHttpMessageHandler();
mockHttp.When($"{baseUrl}/*").Respond("application/json", responseJson);
return mockHttp.ToHttpClient();
}
private static DeliveryOptions MockDeliveryOptions(string baseUrl)
=> DeliveryOptionsBuilder
.CreateInstance()
.WithProjectId(Guid.NewGuid())
.UseProductionApi()
.WithCustomEndpoint($"{baseUrl}/{{0}}")
.Build();
private static IDeliveryClient MockDeliveryClient(DeliveryOptions deliveryOptions, IDeliveryHttpClient deliveryHttpClient)
{
var contentLinkUrlResolver = A.Fake<IContentLinkUrlResolver>();
var retryPolicy = A.Fake<IRetryPolicy>();
var retryPolicyProvider = A.Fake<IRetryPolicyProvider>();
A.CallTo(() => retryPolicyProvider.GetRetryPolicy())
.Returns(retryPolicy);
A.CallTo(() => retryPolicy.ExecuteAsync(A<Func<Task<HttpResponseMessage>>>._))
.ReturnsLazily(c => c.GetArgument<Func<Task<HttpResponseMessage>>>(0)());
var client = DeliveryClientBuilder
.WithOptions(_ => deliveryOptions)
.WithDeliveryHttpClient(deliveryHttpClient)
.WithContentLinkUrlResolver(contentLinkUrlResolver)
.WithRetryPolicyProvider(retryPolicyProvider)
.WithTypeProvider(new CustomTypeProvider())
.Build();
return client;
}
}
}