Skip to content

Commit 2539a14

Browse files
authored
Merge pull request #54 from geeklearningio/release/1.4.0
Release/1.4.0
2 parents f83db84 + f37d903 commit 2539a14

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

src/GeekLearning.Testavior/Environment/ITestEnvironment.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public interface ITestEnvironment
1010

1111
HttpClient Client { get; }
1212

13+
HttpClient CreateClient(bool supportCookies = true);
14+
1315
IServiceProvider ServiceProvider { get; }
1416
}
1517
}

src/GeekLearning.Testavior/Environment/TestEnvironment.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,21 @@ public TestEnvironment(string targetProjectRelativePath = null)
4040
}
4141

4242
this.Server = this.CreateTestServer();
43-
this.Client = Server.CreateClient();
43+
this.Client = this.CreateClient(false);
44+
}
45+
46+
public HttpClient CreateClient(bool supportCookies = true)
47+
{
48+
if (supportCookies)
49+
{
50+
var client = new HttpClient(new TestMessageHandler(this.Server.CreateHandler()));
51+
client.BaseAddress = this.Server.BaseAddress;
52+
return client;
53+
}
54+
else
55+
{
56+
return this.Server.CreateClient();
57+
}
4458
}
4559

4660
protected virtual TestServer CreateTestServer()
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using Microsoft.Net.Http.Headers;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Net;
6+
using System.Net.Http;
7+
using System.Text;
8+
using System.Threading;
9+
using System.Threading.Tasks;
10+
11+
namespace GeekLearning.Testavior
12+
{
13+
public class TestMessageHandler : DelegatingHandler
14+
{
15+
private readonly CookieContainer cookies = new System.Net.CookieContainer();
16+
17+
public TestMessageHandler(HttpMessageHandler innerHandler) : base(innerHandler)
18+
{
19+
}
20+
21+
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
22+
{
23+
request.Headers.Add("Cookie", this.cookies.GetCookieHeader(request.RequestUri));
24+
25+
var resp = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
26+
27+
if (resp.Headers.TryGetValues("Set-Cookie", out var newCookies))
28+
{
29+
foreach (var item in SetCookieHeaderValue.ParseList(newCookies.ToList()))
30+
{
31+
if (item.Domain.HasValue)
32+
{
33+
this.cookies.Add(request.RequestUri, new Cookie(item.Name.Value, item.Value.Value, item.Path.Value, item.Domain.Value));
34+
}
35+
else
36+
{
37+
this.cookies.Add(request.RequestUri, new Cookie(item.Name.Value, item.Value.Value, item.Path.Value));
38+
}
39+
}
40+
}
41+
42+
return resp;
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)