forked from JohnnyCrazy/SpotifyAPI-NET
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAPIConnectorTest.cs
More file actions
101 lines (88 loc) · 3.83 KB
/
APIConnectorTest.cs
File metadata and controls
101 lines (88 loc) · 3.83 KB
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
using System;
using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Moq;
using NUnit.Framework;
using SpotifyAPI.Web.Http;
namespace SpotifyAPI.Web.Tests
{
[TestFixture]
public class APIConnectorTest
{
[Test]
public async Task RetryHandler_IsUsed()
{
var apiResponse = new Mock<IAPIResponse<string>>();
apiResponse.SetupGet(a => a.Body).Returns("Hello World");
var response = new Mock<IResponse>();
response.SetupGet(r => r.ContentType).Returns("application/json");
response.SetupGet(r => r.StatusCode).Returns(HttpStatusCode.OK);
response.SetupGet(r => r.Body).Returns("\"Hello World\"");
var authenticator = new Mock<IAuthenticator>();
var serializer = new Mock<IJSONSerializer>();
serializer.Setup(s => s.DeserializeResponse<string>(It.IsAny<IResponse>())).Returns(apiResponse.Object);
var httpClient = new Mock<IHTTPClient>();
var retryHandler = new Mock<IRetryHandler>();
retryHandler.Setup(r =>
r.HandleRetry(
It.IsAny<IRequest>(),
It.IsAny<IResponse>(),
It.IsAny<IRetryHandler.RetryFunc>(),
It.IsAny<CancellationToken>()
)
).Returns(Task.FromResult(response.Object));
var apiConnector = new APIConnector(
new Uri("https://spotify.com"),
authenticator.Object,
serializer.Object,
httpClient.Object,
retryHandler.Object,
null
);
await apiConnector.SendAPIRequest<string>(new Uri("/me", UriKind.Relative), HttpMethod.Get).ConfigureAwait(false);
authenticator.Verify(a => a.Apply(It.IsAny<IRequest>(), It.IsAny<IAPIConnector>()), Times.Once);
httpClient.Verify(h => h.DoRequest(It.IsAny<IRequest>(), It.IsAny<CancellationToken>()), Times.Once);
serializer.Verify(s => s.DeserializeResponse<string>(response.Object), Times.Once);
}
[Test]
public async Task RetryHandler_CanRetry()
{
var apiResponse = new Mock<IAPIResponse<string>>();
apiResponse.SetupGet(a => a.Body).Returns("Hello World");
var response = new Mock<IResponse>();
response.SetupGet(r => r.ContentType).Returns("application/json");
response.SetupGet(r => r.StatusCode).Returns(HttpStatusCode.OK);
response.SetupGet(r => r.Body).Returns("\"Hello World\"");
var authenticator = new Mock<IAuthenticator>();
var serializer = new Mock<IJSONSerializer>();
serializer.Setup(s => s.DeserializeResponse<string>(It.IsAny<IResponse>())).Returns(apiResponse.Object);
var httpClient = new Mock<IHTTPClient>();
httpClient.Setup(h => h.DoRequest(It.IsAny<IRequest>(), It.IsAny<CancellationToken>())).Returns(Task.FromResult(response.Object));
var retryHandler = new Mock<IRetryHandler>();
retryHandler.Setup(r =>
r.HandleRetry(
It.IsAny<IRequest>(),
It.IsAny<IResponse>(),
It.IsAny<IRetryHandler.RetryFunc>(),
It.IsAny<CancellationToken>()
)
).Returns((IRequest request, IResponse _, IRetryHandler.RetryFunc retry, CancellationToken ct)
=> retry(request, ct));
var apiConnector = new APIConnector(
new Uri("https://spotify.com"),
authenticator.Object,
serializer.Object,
httpClient.Object,
retryHandler.Object,
null
);
await apiConnector.SendAPIRequest<string>(new Uri("/me", UriKind.Relative), HttpMethod.Get).ConfigureAwait(false);
serializer.Verify(s => s.SerializeRequest(It.IsAny<IRequest>()), Times.Once);
authenticator.Verify(a => a.Apply(It.IsAny<IRequest>(), It.IsAny<IAPIConnector>()), Times.Exactly(2));
httpClient.Verify(h => h.DoRequest(It.IsAny<IRequest>(), It.IsAny<CancellationToken>()), Times.Exactly(2));
serializer.Verify(s => s.DeserializeResponse<string>(response.Object), Times.Once);
}
}
}