1+ using System ;
2+ using System . Net ;
3+ using System . Net . Http ;
4+ using System . Text ;
5+ using System . Threading ;
6+ using System . Threading . Tasks ;
7+ using Moq ;
8+ using Moq . Protected ;
9+ using Xunit ;
10+
11+ namespace Checkout
12+ {
13+ public class ApiClientTests : UnitTestFixture , IDisposable
14+ {
15+ private readonly ApiClient _apiClient ;
16+ private readonly Mock < HttpMessageHandler > _httpMessageHandlerMock ;
17+ private readonly HttpClient _httpClient ;
18+
19+ public ApiClientTests ( )
20+ {
21+ _httpMessageHandlerMock = new Mock < HttpMessageHandler > ( ) ;
22+ _httpClient = new HttpClient ( _httpMessageHandlerMock . Object ) ;
23+
24+ var httpClientFactoryMock = new Mock < IHttpClientFactory > ( ) ;
25+ httpClientFactoryMock
26+ . Setup ( factory => factory . CreateClient ( ) )
27+ . Returns ( _httpClient ) ;
28+
29+ _apiClient = new ApiClient ( httpClientFactoryMock . Object , new Uri ( "https://api.example.com" ) , false ) ;
30+ }
31+
32+ [ Fact ]
33+ public async Task ShouldGetReturnDeserializedObject ( )
34+ {
35+ // Arrange
36+ var jsonResponse = "{\" message\" :\" success\" }" ;
37+ var httpResponse = new HttpResponseMessage ( HttpStatusCode . OK )
38+ {
39+ Content = new StringContent ( jsonResponse , Encoding . UTF8 , "application/json" )
40+ } ;
41+
42+ _httpMessageHandlerMock
43+ . Protected ( )
44+ . Setup < Task < HttpResponseMessage > > ( "SendAsync" , ItExpr . IsAny < HttpRequestMessage > ( ) ,
45+ ItExpr . IsAny < CancellationToken > ( ) )
46+ . ReturnsAsync ( httpResponse ) ;
47+
48+ var authorization = new SdkAuthorization ( PlatformType . Default , ValidDefaultSk ) ;
49+
50+ // Act
51+ var result = await _apiClient . Get < FakeResponse > ( "/test" , authorization ) ;
52+
53+ // Assert
54+ Assert . NotNull ( result ) ;
55+ Assert . IsType < FakeResponse > ( result ) ;
56+ Assert . Equal ( "success" , result . Message ) ;
57+ }
58+
59+ [ Fact ]
60+ public async Task ShouldPostReturnDeserializedObject ( )
61+ {
62+ // Arrange
63+ var jsonResponse = "{\" message\" :\" created\" }" ;
64+ var httpResponse = new HttpResponseMessage ( HttpStatusCode . Created )
65+ {
66+ Content = new StringContent ( jsonResponse , Encoding . UTF8 , "application/json" )
67+ } ;
68+
69+ _httpMessageHandlerMock
70+ . Protected ( )
71+ . Setup < Task < HttpResponseMessage > > ( "SendAsync" , ItExpr . IsAny < HttpRequestMessage > ( ) ,
72+ ItExpr . IsAny < CancellationToken > ( ) )
73+ . ReturnsAsync ( httpResponse ) ;
74+
75+ var authorization = new SdkAuthorization ( PlatformType . Default , ValidDefaultSk ) ;
76+ var requestData = new { name = "new item" } ;
77+
78+ // Act
79+ var result = await _apiClient . Post < FakeResponse > ( "/test" , authorization , requestData ) ;
80+
81+ // Assert
82+ Assert . NotNull ( result ) ;
83+ Assert . IsType < FakeResponse > ( result ) ;
84+ Assert . Equal ( "created" , result . Message ) ;
85+ }
86+
87+ [ Fact ]
88+ public async Task ShouldDeleteReturnDeserializedObject ( )
89+ {
90+ // Arrange
91+ var jsonResponse = "{\" message\" :\" deleted\" }" ;
92+ var httpResponse = new HttpResponseMessage ( HttpStatusCode . OK )
93+ {
94+ Content = new StringContent ( jsonResponse , Encoding . UTF8 , "application/json" )
95+ } ;
96+
97+ _httpMessageHandlerMock
98+ . Protected ( )
99+ . Setup < Task < HttpResponseMessage > > ( "SendAsync" , ItExpr . IsAny < HttpRequestMessage > ( ) ,
100+ ItExpr . IsAny < CancellationToken > ( ) )
101+ . ReturnsAsync ( httpResponse ) ;
102+
103+ var authorization = new SdkAuthorization ( PlatformType . Default , ValidDefaultSk ) ;
104+
105+ // Act
106+ var result = await _apiClient . Delete < FakeResponse > ( "/test" , authorization ) ;
107+
108+ // Assert
109+ Assert . NotNull ( result ) ;
110+ Assert . IsType < FakeResponse > ( result ) ;
111+ Assert . Equal ( "deleted" , result . Message ) ;
112+ }
113+
114+ [ Fact ]
115+ public async Task ShouldGetHandleNoContentResponse ( )
116+ {
117+ // Arrange
118+ var httpResponse = new HttpResponseMessage ( HttpStatusCode . NoContent ) { Content = null } ;
119+
120+ _httpMessageHandlerMock
121+ . Protected ( )
122+ . Setup < Task < HttpResponseMessage > > ( "SendAsync" , ItExpr . IsAny < HttpRequestMessage > ( ) ,
123+ ItExpr . IsAny < CancellationToken > ( ) )
124+ . ReturnsAsync ( httpResponse ) ;
125+
126+ var authorization = new SdkAuthorization ( PlatformType . Default , ValidDefaultSk ) ;
127+
128+ // Act
129+ var result = await _apiClient . Get < FakeResponse > ( "/test" , authorization ) ;
130+
131+ // Assert
132+ Assert . NotNull ( result ) ;
133+ Assert . IsType < FakeResponse > ( result ) ;
134+ }
135+
136+ public void Dispose ( )
137+ {
138+ _httpClient . Dispose ( ) ;
139+ }
140+ }
141+
142+ public class FakeResponse : HttpMetadata
143+ {
144+ public string Message { get ; set ; }
145+ }
146+ }
0 commit comments