1+ using System ;
2+ using System . Net ;
3+ using System . Threading . Tasks ;
4+ using Shouldly ;
5+ using WorldDomination . Net . Http ;
6+ using Xunit ;
7+
8+ namespace WorldDomination . HttpClient . Helpers . Tests . Wiki_Examples
9+ {
10+ public class SingleEndpointTests
11+ {
12+ [ Theory ]
13+ [ InlineData ( MyService . GetFooEndPoint ) ] // Specific url they are hitting.
14+ [ InlineData ( "*" ) ] // Don't care what url they are hitting.
15+ public async Task GivenSomeValidHttpRequest_GetSomeFooDataAsync_ReturnsAFoo ( string endPoint )
16+ {
17+ // Arrange.
18+ const string responseData = "{ \" Id\" :69, \" Name\" :\" Jane\" }" ;
19+ var messageResponse = FakeHttpMessageHandler . GetStringHttpResponseMessage ( responseData ) ;
20+
21+ var options = new HttpMessageOptions
22+ {
23+ RequestUri = endPoint ,
24+ HttpResponseMessage = messageResponse
25+ } ;
26+
27+ var messageHandler = new FakeHttpMessageHandler ( options ) ;
28+
29+ var myService = new MyService ( messageHandler ) ;
30+
31+ // Act.
32+ // NOTE: network traffic will not leave your computer because you've faked the response, above.
33+ var result = await myService . GetSomeFooDataAsync ( ) ;
34+
35+ // Assert.
36+ result . Id . ShouldBe ( 69 ) ; // Returned from GetSomeFooDataAsync.
37+ result . Baa . ShouldBeNull ( ) ;
38+ options . NumberOfTimesCalled . ShouldBe ( 1 ) ;
39+ }
40+
41+ [ Fact ]
42+ public async Task GivenADifferentFakeUrlEndpoint_GetSomeFooDataAsync_ThrowsAnException ( )
43+ {
44+ // Arrange.
45+ const string responseData = "{ \" Id\" :69, \" Name\" :\" Jane\" }" ;
46+ var messageResponse = FakeHttpMessageHandler . GetStringHttpResponseMessage ( responseData ) ;
47+
48+ var options = new HttpMessageOptions
49+ {
50+ RequestUri = "http://this.is.not.the.correct.endpoint" ,
51+ HttpResponseMessage = messageResponse
52+ } ;
53+
54+ var messageHandler = new FakeHttpMessageHandler ( options ) ;
55+
56+ var myService = new MyService ( messageHandler ) ;
57+
58+ // Act.
59+ // NOTE: network traffic will not leave your computer because you've faked the response, above.
60+ var result = await Should . ThrowAsync < InvalidOperationException > ( myService . GetSomeFooDataAsync ( ) ) ;
61+
62+ // Assert.
63+ result . Message . ShouldStartWith ( "No HttpResponseMessage found" ) ;
64+ }
65+
66+ [ Fact ]
67+ public async Task GivenAServerError_GetSomeFooDataAsync_ThrowsAnException ( )
68+ {
69+ // Arrange.
70+ const string responseData = "Something Blew Up" ;
71+ var messageResponse = FakeHttpMessageHandler . GetStringHttpResponseMessage ( responseData ,
72+ HttpStatusCode . InternalServerError ) ;
73+
74+ var options = new HttpMessageOptions
75+ {
76+ HttpResponseMessage = messageResponse
77+ } ;
78+ var messageHandler = new FakeHttpMessageHandler ( options ) ;
79+
80+ var myService = new MyService ( messageHandler ) ;
81+
82+ // Act.
83+ // NOTE: network traffic will not leave your computer because you've faked the response, above.
84+ var result = await Should . ThrowAsync < InvalidOperationException > ( myService . GetSomeFooDataAsync ( ) ) ;
85+
86+ // Assert.
87+ result . Message . ShouldStartWith ( responseData ) ;
88+ }
89+ }
90+ }
0 commit comments