@@ -13,176 +13,191 @@ module TestBodyParam =
1313
1414 [<Test>]
1515 let ``Body param of string`` () =
16- let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
17- async {
18- message.Method |> shouldEqual HttpMethod.Post
19- let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
20- let content = new StringContent ( content)
21- let resp = new HttpResponseMessage ( HttpStatusCode.OK)
22- resp.Content <- content
23- return resp
24- }
25-
26- use client = HttpClientMock.make ( Uri " https://example.com" ) proc
27- let api = PureGymApi.make client
28-
29- let observedUri = api.CreateUserString( " username?not!url%e ncoded" ) .Result
30- observedUri |> shouldEqual " username?not!url%e ncoded"
16+ task {
17+ let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
18+ async {
19+ message.Method |> shouldEqual HttpMethod.Post
20+ let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
21+ let content = new StringContent ( content)
22+ let resp = new HttpResponseMessage ( HttpStatusCode.OK)
23+ resp.Content <- content
24+ return resp
25+ }
26+
27+ use client = HttpClientMock.make ( Uri " https://example.com" ) proc
28+ let api = PureGymApi.make client
29+
30+ let! observedUri = api.CreateUserString ( " username?not!url%e ncoded" )
31+ observedUri |> shouldEqual " username?not!url%e ncoded"
32+ }
3133
3234 [<Test>]
3335 let ``Body param of stream`` () =
34- let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
35- async {
36- message.Method |> shouldEqual HttpMethod.Post
37- let! content = message.Content.ReadAsStreamAsync () |> Async.AwaitTask
38- let content = new StreamContent ( content)
39- let resp = new HttpResponseMessage ( HttpStatusCode.OK)
40- resp.Content <- content
41- return resp
42- }
43-
44- let contents = [| 1 uy ; 2 uy ; 3 uy ; 4 uy |]
45-
46- use client = HttpClientMock.make ( Uri " https://example.com" ) proc
47- let api = PureGymApi.make client
48-
49- use stream = new MemoryStream ( contents)
50- let observedContent = api.CreateUserStream( stream) .Result
51- let buf = Array.zeroCreate 10
52- let written = observedContent.ReadAtLeast ( buf.AsSpan (), 5 , false )
53- buf |> Array.take written |> shouldEqual contents
36+ task {
37+ let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
38+ async {
39+ message.Method |> shouldEqual HttpMethod.Post
40+ let! content = message.Content.ReadAsStreamAsync () |> Async.AwaitTask
41+ let content = new StreamContent ( content)
42+ let resp = new HttpResponseMessage ( HttpStatusCode.OK)
43+ resp.Content <- content
44+ return resp
45+ }
46+
47+ let contents = [| 1 uy ; 2 uy ; 3 uy ; 4 uy |]
48+
49+ use client = HttpClientMock.make ( Uri " https://example.com" ) proc
50+ let api = PureGymApi.make client
51+
52+ use stream = new MemoryStream ( contents)
53+ let! observedContent = api.CreateUserStream ( stream)
54+ let buf = Array.zeroCreate 10
55+ let written = observedContent.ReadAtLeast ( buf.AsSpan (), 5 , false )
56+ buf |> Array.take written |> shouldEqual contents
57+ }
5458
5559 [<Test>]
5660 let ``Body param of HttpContent`` () =
57- let mutable observedContent = None
61+ task {
62+ let mutable observedContent = None
5863
59- let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
60- async {
61- message.Method |> shouldEqual HttpMethod.Post
62- let resp = new HttpResponseMessage ( HttpStatusCode.OK)
63- observedContent <- Some message.Content
64- resp.Content <- new StringContent ( " oh hi" )
65- return resp
66- }
64+ let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
65+ async {
66+ message.Method |> shouldEqual HttpMethod.Post
67+ let resp = new HttpResponseMessage ( HttpStatusCode.OK)
68+ observedContent <- Some message.Content
69+ resp.Content <- new StringContent ( " oh hi" )
70+ return resp
71+ }
6772
68- use client = HttpClientMock.make ( Uri " https://example.com" ) proc
69- let api = PureGymApi.make client
73+ use client = HttpClientMock.make ( Uri " https://example.com" ) proc
74+ let api = PureGymApi.make client
7075
71- use content = new StringContent ( " hello!" )
76+ use content = new StringContent ( " hello!" )
7277
73- api.CreateUserHttpContent( content) .Result |> shouldEqual " oh hi"
74- Object.ReferenceEquals ( Option.get observedContent, content) |> shouldEqual true
78+ let! response = api.CreateUserHttpContent ( content)
79+ response |> shouldEqual " oh hi"
80+ Object.ReferenceEquals ( Option.get observedContent, content) |> shouldEqual true
81+ }
7582
7683 [<TestCase " ByteArr" >]
7784 [<TestCase " ByteArr'" >]
7885 [<TestCase " ByteArr''" >]
7986 let ``Body param of byte arr`` ( case : string ) =
80- let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
81- async {
82- message.Method |> shouldEqual HttpMethod.Post
83- let! content = message.Content.ReadAsStreamAsync () |> Async.AwaitTask
84- let content = new StreamContent ( content)
85- let resp = new HttpResponseMessage ( HttpStatusCode.OK)
86- resp.Content <- content
87- return resp
88- }
89-
90- use client = HttpClientMock.make ( Uri " https://example.com" ) proc
91- let api = PureGymApi.make client
92-
93- let contents = [| 1 uy ; 2 uy ; 3 uy ; 4 uy |]
94-
95- let observedContent =
96- match case with
97- | " ByteArr" -> api.CreateUserByteArr( contents) .Result
98- | " ByteArr'" -> api.CreateUserByteArr'( contents) .Result
99- | " ByteArr''" -> api.CreateUserByteArr''( contents) .Result
100- | _ -> failwith $" Unrecognised case: %s {case}"
101-
102- let buf = Array.zeroCreate 10
103- let written = observedContent.ReadAtLeast ( buf.AsSpan (), 5 , false )
104- buf |> Array.take written |> shouldEqual contents
87+ task {
88+ let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
89+ async {
90+ message.Method |> shouldEqual HttpMethod.Post
91+ let! content = message.Content.ReadAsStreamAsync () |> Async.AwaitTask
92+ let content = new StreamContent ( content)
93+ let resp = new HttpResponseMessage ( HttpStatusCode.OK)
94+ resp.Content <- content
95+ return resp
96+ }
97+
98+ use client = HttpClientMock.make ( Uri " https://example.com" ) proc
99+ let api = PureGymApi.make client
100+
101+ let contents = [| 1 uy ; 2 uy ; 3 uy ; 4 uy |]
102+
103+ let! observedContent =
104+ match case with
105+ | " ByteArr" -> api.CreateUserByteArr ( contents)
106+ | " ByteArr'" -> api.CreateUserByteArr' ( contents)
107+ | " ByteArr''" -> api.CreateUserByteArr'' ( contents)
108+ | _ -> failwith $" Unrecognised case: %s {case}"
109+
110+ let buf = Array.zeroCreate 10
111+ let written = observedContent.ReadAtLeast ( buf.AsSpan (), 5 , false )
112+ buf |> Array.take written |> shouldEqual contents
113+ }
105114
106115 [<Test>]
107116 let ``Body param of serialised thing`` () =
108- let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
109- async {
110- message.Method |> shouldEqual HttpMethod.Post
111- let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
112- let content = new StringContent ( " Done! " + content)
113- let resp = new HttpResponseMessage ( HttpStatusCode.OK)
114- resp.Content <- content
115- return resp
116- }
117-
118- use client = HttpClientMock.make ( Uri " https://example.com" ) proc
119- let api = PureGymApi.make client
120-
121- let expected =
122- {
123- Id = 3
124- CompoundMemberId = " compound!"
125- FirstName = " Patrick"
126- LastName = " Stevens"
127- HomeGymId = 100
128- HomeGymName = " Big Boy Gym"
129- EmailAddress = " woof@ware"
130- GymAccessPin = " l3tm31n"
131- // To the reader: what's the significance of this date?
132- // answer rot13: ghevatpbzchgnovyvglragfpurvqhatfceboyrzcncre
133- DateOfBirth = DateOnly ( 1936 , 05 , 28 )
134- MobileNumber = " +44-GHOST-BUSTERS"
135- Postcode = " W1A 111"
136- MembershipName = " mario"
137- MembershipLevel = 4
138- SuspendedReason = 1090
139- MemberStatus = - 3
140- }
141-
142- let result = api.CreateUserSerialisedBody( expected) .Result
143-
144- result.StartsWith ( " Done! " , StringComparison.Ordinal) |> shouldEqual true
145- let result = result.[ 6 ..]
146-
147- result
148- |> System.Text.Json.Nodes.JsonNode.Parse
149- |> PureGym.Member.jsonParse
150- |> shouldEqual expected
117+ task {
118+ let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
119+ async {
120+ message.Method |> shouldEqual HttpMethod.Post
121+ let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
122+ let content = new StringContent ( " Done! " + content)
123+ let resp = new HttpResponseMessage ( HttpStatusCode.OK)
124+ resp.Content <- content
125+ return resp
126+ }
127+
128+ use client = HttpClientMock.make ( Uri " https://example.com" ) proc
129+ let api = PureGymApi.make client
130+
131+ let expected =
132+ {
133+ Id = 3
134+ CompoundMemberId = " compound!"
135+ FirstName = " Patrick"
136+ LastName = " Stevens"
137+ HomeGymId = 100
138+ HomeGymName = " Big Boy Gym"
139+ EmailAddress = " woof@ware"
140+ GymAccessPin = " l3tm31n"
141+ // To the reader: what's the significance of this date?
142+ // answer rot13: ghevatpbzchgnovyvglragfpurvqhatfceboyrzcncre
143+ DateOfBirth = DateOnly ( 1936 , 05 , 28 )
144+ MobileNumber = " +44-GHOST-BUSTERS"
145+ Postcode = " W1A 111"
146+ MembershipName = " mario"
147+ MembershipLevel = 4
148+ SuspendedReason = 1090
149+ MemberStatus = - 3
150+ }
151+
152+ let! result = api.CreateUserSerialisedBody ( expected)
153+
154+ result.StartsWith ( " Done! " , StringComparison.Ordinal) |> shouldEqual true
155+ let result = result.[ 6 ..]
156+
157+ result
158+ |> System.Text.Json.Nodes.JsonNode.Parse
159+ |> PureGym.Member.jsonParse
160+ |> shouldEqual expected
161+ }
151162
152163 [<Test>]
153164 let ``Body param of primitive : int`` () =
154- let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
155- async {
156- message.Method |> shouldEqual HttpMethod.Post
157- let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
158- let content = new StringContent ( " Done! " + content)
159- let resp = new HttpResponseMessage ( HttpStatusCode.OK)
160- resp.Content <- content
161- return resp
162- }
165+ task {
166+ let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
167+ async {
168+ message.Method |> shouldEqual HttpMethod.Post
169+ let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
170+ let content = new StringContent ( " Done! " + content)
171+ let resp = new HttpResponseMessage ( HttpStatusCode.OK)
172+ resp.Content <- content
173+ return resp
174+ }
163175
164- use client = HttpClientMock.make ( Uri " https://example.com" ) proc
165- let api = PureGymApi.make client
176+ use client = HttpClientMock.make ( Uri " https://example.com" ) proc
177+ let api = PureGymApi.make client
166178
167- let result = api.CreateUserSerialisedIntBody( 3 ) .Result
179+ let! result = api.CreateUserSerialisedIntBody ( 3 )
168180
169- result |> shouldEqual " Done! 3"
181+ result |> shouldEqual " Done! 3"
182+ }
170183
171184 [<Test>]
172185 let ``Body param of primitive : Uri`` () =
173- let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
174- async {
175- message.Method |> shouldEqual HttpMethod.Post
176- let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
177- let content = new StringContent ( " Done! " + content)
178- let resp = new HttpResponseMessage ( HttpStatusCode.OK)
179- resp.Content <- content
180- return resp
181- }
182-
183- use client = HttpClientMock.make ( Uri " https://example.com" ) proc
184- let api = PureGymApi.make client
185-
186- let result = api.CreateUserSerialisedUrlBody( Uri " https://mything.com/blah" ) .Result
187-
188- result |> shouldEqual " Done! \" https://mything.com/blah\" "
186+ task {
187+ let proc ( message : HttpRequestMessage ) : HttpResponseMessage Async =
188+ async {
189+ message.Method |> shouldEqual HttpMethod.Post
190+ let! content = message.Content.ReadAsStringAsync () |> Async.AwaitTask
191+ let content = new StringContent ( " Done! " + content)
192+ let resp = new HttpResponseMessage ( HttpStatusCode.OK)
193+ resp.Content <- content
194+ return resp
195+ }
196+
197+ use client = HttpClientMock.make ( Uri " https://example.com" ) proc
198+ let api = PureGymApi.make client
199+
200+ let! result = api.CreateUserSerialisedUrlBody ( Uri " https://mything.com/blah" )
201+
202+ result |> shouldEqual " Done! \" https://mything.com/blah\" "
203+ }
0 commit comments