Skip to content

Commit 9456f0c

Browse files
committed
Taskify
1 parent 2feabc5 commit 9456f0c

1 file changed

Lines changed: 161 additions & 146 deletions

File tree

WoofWare.Myriad.Plugins.Test/TestHttpClient/TestBodyParam.fs

Lines changed: 161 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -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%encoded").Result
30-
observedUri |> shouldEqual "username?not!url%encoded"
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%encoded")
31+
observedUri |> shouldEqual "username?not!url%encoded"
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 = [| 1uy ; 2uy ; 3uy ; 4uy |]
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 = [| 1uy ; 2uy ; 3uy ; 4uy |]
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 = [| 1uy ; 2uy ; 3uy ; 4uy |]
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 = [| 1uy ; 2uy ; 3uy ; 4uy |]
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

Comments
 (0)