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

Commit 5845b0e

Browse files
Allow inspection of request body when mocking HTTP requests
1 parent 1309ec5 commit 5845b0e

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
@@ -431,7 +431,7 @@ public static string SendStringToUrl(this string url, string method = null,
431431

432432
if (ResultsFilter != null)
433433
{
434-
return ResultsFilter.GetString(webReq);
434+
return ResultsFilter.GetString(webReq, requestBody);
435435
}
436436

437437
if (requestBody != null)
@@ -498,7 +498,7 @@ public static byte[] SendBytesToUrl(this string url, string method = null,
498498

499499
if (ResultsFilter != null)
500500
{
501-
return ResultsFilter.GetBytes(webReq);
501+
return ResultsFilter.GetBytes(webReq, requestBody);
502502
}
503503

504504
if (requestBody != null)
@@ -803,8 +803,8 @@ public static string PutXmlToUrl(this string url, object data,
803803

804804
public interface IHttpResultsFilter : IDisposable
805805
{
806-
string GetString(HttpWebRequest webReq);
807-
byte[] GetBytes(HttpWebRequest webReq);
806+
string GetString(HttpWebRequest webReq, string reqBody);
807+
byte[] GetBytes(HttpWebRequest webReq, byte[] reqBody);
808808
void UploadStream(HttpWebRequest webRequest, Stream fileStream, string fileName);
809809
}
810810

@@ -815,8 +815,8 @@ public class HttpResultsFilter : IHttpResultsFilter
815815
public string StringResult { get; set; }
816816
public byte[] BytesResult { get; set; }
817817

818-
public Func<HttpWebRequest, string> StringResultFn { get; set; }
819-
public Func<HttpWebRequest, byte[]> BytesResultFn { get; set; }
818+
public Func<HttpWebRequest, string, string> StringResultFn { get; set; }
819+
public Func<HttpWebRequest, byte[], byte[]> BytesResultFn { get; set; }
820820
public Action<HttpWebRequest, Stream, string> UploadFileFn { get; set; }
821821

822822
public HttpResultsFilter(string stringResult=null, byte[] bytesResult=null)
@@ -833,17 +833,17 @@ public void Dispose()
833833
HttpUtils.ResultsFilter = previousFilter;
834834
}
835835

836-
public string GetString(HttpWebRequest webReq)
836+
public string GetString(HttpWebRequest webReq, string reqBody)
837837
{
838838
return StringResultFn != null
839-
? StringResultFn(webReq)
839+
? StringResultFn(webReq, reqBody)
840840
: StringResult;
841841
}
842842

843-
public byte[] GetBytes(HttpWebRequest webReq)
843+
public byte[] GetBytes(HttpWebRequest webReq, byte[] reqBody)
844844
{
845845
return BytesResultFn != null
846-
? BytesResultFn(webReq)
846+
? BytesResultFn(webReq, reqBody)
847847
: BytesResult;
848848
}
849849

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)