forked from ServiceStack/ServiceStack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCustomHttpMethodTests.cs
More file actions
99 lines (84 loc) · 3.3 KB
/
Copy pathCustomHttpMethodTests.cs
File metadata and controls
99 lines (84 loc) · 3.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System.Reflection;
using Funq;
using NUnit.Framework;
namespace ServiceStack.WebHost.Endpoints.Tests
{
[Route("/custom-method/result")]
public class CustomMethodResult : IReturn<CustomMethodResult>
{
public int Id { get; set; }
}
[Route("/custom-method/headers")]
public class CustomMethodHeaders : IReturn<CustomMethodHeaders>
{
public int Id { get; set; }
}
public class CustomMethodService : Service
{
public object Head(CustomMethodResult request)
{
return new HttpResult {
Headers = {
{"X-Method", "HEAD"},
{"X-Id", request.Id.ToString()},
{"Content-Length", "100"},
{"Content-Type", "video/mp4"},
}
};
}
public object Any(CustomMethodResult request) => request;
public void Head(CustomMethodHeaders request)
{
Response.AddHeader("X-Method", "HEAD");
Response.AddHeader("X-Id", request.Id.ToString());
Response.AddHeader("Content-Type", "video/mp4");
Response.SetContentLength(100);
}
public object Any(CustomMethodHeaders request) => request;
}
public class CustomHttpMethodTests
{
class AppHost : AppSelfHostBase
{
public AppHost() : base(nameof(CustomHttpMethodTests), typeof(CustomMethodService).Assembly) { }
public override void Configure(Container container) { }
}
private ServiceStackHost appHost;
public CustomHttpMethodTests()
{
appHost = new AppHost()
.Init()
.Start(Config.ListeningOn);
}
[OneTimeTearDown]
public void OneTimeTearDown() => appHost.Dispose();
[Test]
public void Does_execute_HEAD_Request_returning_custom_HttpResult()
{
var response = Config.ListeningOn.AppendPath("custom-method","result").AddQueryParam("id", 1)
.SendStringToUrl(method: "HEAD",
requestFilter: req => { req.Method = "HEAD"; },
responseFilter: res => {
Assert.That(res.Headers["X-Method"], Is.EqualTo("HEAD"));
Assert.That(res.Headers["X-Id"], Is.EqualTo("1"));
Assert.That(res.ContentType, Is.EqualTo("video/mp4"));
Assert.That(res.ContentLength, Is.EqualTo(100));
});
Assert.That(response, Is.Empty);
}
[Test]
public void Does_execute_HEAD_Request_writing_custom_headers()
{
var response = Config.ListeningOn.AppendPath("custom-method","headers").AddQueryParam("id", 1)
.SendStringToUrl(method: "HEAD",
requestFilter: req => { req.Method = "HEAD"; },
responseFilter: res => {
Assert.That(res.Headers["X-Method"], Is.EqualTo("HEAD"));
Assert.That(res.Headers["X-Id"], Is.EqualTo("1"));
Assert.That(res.ContentType, Is.EqualTo("video/mp4"));
Assert.That(res.ContentLength, Is.EqualTo(100));
});
Assert.That(response, Is.Empty);
}
}
}