Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 1ec026c

Browse files
committed
Merge pull request #462 from georgehemmings/master
Allow inspection of request body when mocking HTTP requests
2 parents 7984fca + 5845b0e commit 1ec026c

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

src/ServiceStack.Text/HttpUtils.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ public static string SendStringToUrl(this string url, string method = null,
430430

431431
if (ResultsFilter != null)
432432
{
433-
return ResultsFilter.GetString(webReq);
433+
return ResultsFilter.GetString(webReq, requestBody);
434434
}
435435

436436
if (requestBody != null)
@@ -497,7 +497,7 @@ public static byte[] SendBytesToUrl(this string url, string method = null,
497497

498498
if (ResultsFilter != null)
499499
{
500-
return ResultsFilter.GetBytes(webReq);
500+
return ResultsFilter.GetBytes(webReq, requestBody);
501501
}
502502

503503
if (requestBody != null)
@@ -800,8 +800,8 @@ public static string PutXmlToUrl(this string url, object data,
800800

801801
public interface IHttpResultsFilter : IDisposable
802802
{
803-
string GetString(HttpWebRequest webReq);
804-
byte[] GetBytes(HttpWebRequest webReq);
803+
string GetString(HttpWebRequest webReq, string reqBody);
804+
byte[] GetBytes(HttpWebRequest webReq, byte[] reqBody);
805805
void UploadStream(HttpWebRequest webRequest, Stream fileStream, string fileName);
806806
}
807807

@@ -812,8 +812,8 @@ public class HttpResultsFilter : IHttpResultsFilter
812812
public string StringResult { get; set; }
813813
public byte[] BytesResult { get; set; }
814814

815-
public Func<HttpWebRequest, string> StringResultFn { get; set; }
816-
public Func<HttpWebRequest, byte[]> BytesResultFn { get; set; }
815+
public Func<HttpWebRequest, string, string> StringResultFn { get; set; }
816+
public Func<HttpWebRequest, byte[], byte[]> BytesResultFn { get; set; }
817817
public Action<HttpWebRequest, Stream, string> UploadFileFn { get; set; }
818818

819819
public HttpResultsFilter(string stringResult=null, byte[] bytesResult=null)
@@ -830,17 +830,17 @@ public void Dispose()
830830
HttpUtils.ResultsFilter = previousFilter;
831831
}
832832

833-
public string GetString(HttpWebRequest webReq)
833+
public string GetString(HttpWebRequest webReq, string reqBody)
834834
{
835835
return StringResultFn != null
836-
? StringResultFn(webReq)
836+
? StringResultFn(webReq, reqBody)
837837
: StringResult;
838838
}
839839

840-
public byte[] GetBytes(HttpWebRequest webReq)
840+
public byte[] GetBytes(HttpWebRequest webReq, byte[] reqBody)
841841
{
842842
return BytesResultFn != null
843-
? BytesResultFn(webReq)
843+
? BytesResultFn(webReq, reqBody)
844844
: BytesResult;
845845
}
846846

tests/ServiceStack.Text.Tests/HttpUtilsMockTests.cs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,16 +82,23 @@ public void Can_Mock_StringFn_Api_responses()
8282
{
8383
using (new HttpResultsFilter
8484
{
85-
StringResultFn = webReq => webReq.RequestUri.ToString().Contains("google")
86-
? "mocked-google"
87-
: "mocked-yahoo"
85+
StringResultFn = (webReq, reqBody) =>
86+
{
87+
if (reqBody != null && reqBody.Contains("{\"a\":1}")) return "mocked-by-body";
88+
89+
return webReq.RequestUri.ToString().Contains("google")
90+
? "mocked-google"
91+
: "mocked-yahoo";
92+
}
8893
})
8994
{
9095
Assert.That(ExampleGoogleUrl.GetJsonFromUrl(), Is.EqualTo("mocked-google"));
9196
Assert.That(ExampleYahooUrl.GetJsonFromUrl(), Is.EqualTo("mocked-yahoo"));
9297

9398
Assert.That(ExampleGoogleUrl.PostJsonToUrl(json: "{\"postdata\":1}"), Is.EqualTo("mocked-google"));
9499
Assert.That(ExampleYahooUrl.PostJsonToUrl(json: "{\"postdata\":1}"), Is.EqualTo("mocked-yahoo"));
100+
101+
Assert.That(ExampleYahooUrl.PostJsonToUrl(json: "{\"a\":1}"), Is.EqualTo("mocked-by-body"));
95102
}
96103
}
97104

@@ -100,16 +107,23 @@ public void Can_Mock_BytesFn_Api_responses()
100107
{
101108
using (new HttpResultsFilter
102109
{
103-
BytesResultFn = webReq => webReq.RequestUri.ToString().Contains("google")
104-
? "mocked-google".ToUtf8Bytes()
105-
: "mocked-yahoo".ToUtf8Bytes()
110+
BytesResultFn = (webReq, reqBody) =>
111+
{
112+
if (reqBody != null && reqBody.FromUtf8Bytes().Contains("{\"a\":1}")) return "mocked-by-body".ToUtf8Bytes();
113+
114+
return webReq.RequestUri.ToString().Contains("google")
115+
? "mocked-google".ToUtf8Bytes()
116+
: "mocked-yahoo".ToUtf8Bytes();
117+
}
106118
})
107119
{
108120
Assert.That(ExampleGoogleUrl.GetBytesFromUrl(), Is.EqualTo("mocked-google".ToUtf8Bytes()));
109121
Assert.That(ExampleYahooUrl.GetBytesFromUrl(), Is.EqualTo("mocked-yahoo".ToUtf8Bytes()));
110122

111123
Assert.That(ExampleGoogleUrl.PostBytesToUrl(requestBody: "postdata=1".ToUtf8Bytes()), Is.EqualTo("mocked-google".ToUtf8Bytes()));
112124
Assert.That(ExampleYahooUrl.PostBytesToUrl(requestBody: "postdata=1".ToUtf8Bytes()), Is.EqualTo("mocked-yahoo".ToUtf8Bytes()));
125+
126+
Assert.That(ExampleYahooUrl.PostBytesToUrl(requestBody: "{\"a\":1}".ToUtf8Bytes()), Is.EqualTo("mocked-by-body".ToUtf8Bytes()));
113127
}
114128
}
115129

0 commit comments

Comments
 (0)