public void CanPlaybackRecordingSessionFromRecorder() { // ARRANGE var requestUrl = new Uri("http://www.github.com"); var recordingSession = new RecordingSession(); var liveRequest = new HttpWebRequestWrapperRecorder(recordingSession, requestUrl); var liveResponse = (HttpWebResponse)liveRequest.GetResponse(); var playbackRequestCreator = new HttpWebRequestWrapperInterceptorCreator( new RecordingSessionInterceptorRequestBuilder(recordingSession)); var playbackRequest = playbackRequestCreator.Create(requestUrl); // ACT var playbackResponse = (HttpWebResponse)playbackRequest.GetResponse(); string liveResponseBody; using (var sr = new StreamReader(liveResponse.GetResponseStream())) liveResponseBody = sr.ReadToEnd(); string playbackResponseBody; using (var sr = new StreamReader(playbackResponse.GetResponseStream())) playbackResponseBody = sr.ReadToEnd(); // ASSERT playbackResponse.StatusCode.ShouldEqual(liveResponse.StatusCode); playbackResponseBody.ShouldEqual(liveResponseBody); playbackResponse.Headers.ShouldEqual(liveResponse.Headers); }
public void CanCustomizeResponseBuilder() { // ARRANGE var customResponseBody = "Custom Response"; var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET" }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession) { RecordedResultResponseBuilder = (recordedReq, interceptedReq) => interceptedReq.HttpWebResponseCreator.Create(customResponseBody) }; IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(customResponseBody); }
public void CanCustomizeNotFoundBehavior() { // ARRANGE var customNotFoundResponseBody = "Not Found"; var recordingSession = new RecordingSession[0]; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession) { RequestNotFoundResponseBuilder = req => req.HttpWebResponseCreator.Create(customNotFoundResponseBody) }; IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(customNotFoundResponseBody); }
public void CanGetFunky() { // ARRANGE var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => HttpWebResponseCreator.Create( new Uri("https://unreleatedFake.site"), "HEAD", HttpStatusCode.Ambiguous, new MemoryStream(Encoding.UTF8.GetBytes("Funky Response")), new WebHeaderCollection { { HttpResponseHeader.Date, DateTime.Now.ToShortDateString() } }, DecompressionMethods.None, mediaType: "application/sql", contentLength: 128, statusDescription: "status", isVersionHttp11: false, usesProxySemantics: true, isWebSocket: true, connectionGroupName: "Testing Group")); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT var response = (HttpWebResponse)request.GetResponse(); // ASSERT response.ShouldNotBeNull(); response.Method.ToUpper().ShouldNotEqual("GET"); response.StatusCode.ShouldNotEqual(HttpStatusCode.Accepted); response.Headers.AllKeys.ShouldNotBeEmpty(); response.ProtocolVersion.Minor.ShouldEqual(0); }
public void CanPlaybackFromSerializedRecordingSession() { // ARRANGE // recording session is for github.com var requestUrl = new Uri("http://www.github.com"); string json; using (var resource = GetType().Assembly.GetManifestResourceStream("HttpWebRequestWrapper.Tests.RecordingSession.json")) using (var sr = new StreamReader(resource)) json = sr.ReadToEnd(); var recordingSession = JsonConvert.DeserializeObject <RecordingSession>(json); var creator = new HttpWebRequestWrapperInterceptorCreator( new RecordingSessionInterceptorRequestBuilder(recordingSession)); var playbackRequest = (HttpWebRequest)creator.Create(requestUrl); playbackRequest.CookieContainer = new CookieContainer(); // ACT var playbackResponse = (HttpWebResponse)playbackRequest.GetResponse(); // ASSERT playbackResponse.StatusCode.ShouldEqual(HttpStatusCode.OK); playbackResponse.Headers.Count.ShouldEqual(19); playbackResponse.Cookies.Count.ShouldEqual(2); playbackResponse.Cookies.ToList().First().Name.ShouldEqual("logged_in"); using (var sr = new StreamReader(playbackResponse.GetResponseStream())) sr.ReadToEnd().ShouldContain("<html"); }
public void CanSpoofAsyncResponse() { var responseBody = "Test Payload"; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => req.HttpWebResponseCreator.Create(responseBody)); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT HttpWebResponse response = null; var asyncResult = request.BeginGetResponse(result => { response = (HttpWebResponse)(result.AsyncState as HttpWebRequest).EndGetResponse(result); }, request); if (!asyncResult.IsCompleted) { Thread.Sleep(TimeSpan.FromMilliseconds(250)); } if (!asyncResult.IsCompleted) { throw new Exception("Web Response didn't come back in reasonable time frame"); } // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(responseBody); }
public void CanSpoofWebRequestException() { // ARRANGE var fakeUrl = new Uri("http://fakeSite.fake"); var fakeResponse = HttpWebResponseCreator.Create( fakeUrl, "GET", HttpStatusCode.BadRequest, "Test Response Body", new WebHeaderCollection { { HttpResponseHeader.ETag, "testHeaders" } }); var fakeException = new WebException( "Bad Request", innerException: null, status: WebExceptionStatus.SendFailure, response: fakeResponse); var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => throw fakeException); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = creator.Create(fakeUrl); // ACT var exception = Record.Exception(() => request.GetResponse()); var webException = exception as WebException; // ASSERT webException.ShouldNotBeNull(); webException.ShouldEqual(fakeException); }
public void CanSetRequestPayloadAndReceiveItBackInInterceptedRequest() { // ARRANGE var requestPayload = "Test Payload"; InterceptedRequest interceptedRequest = null; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => { interceptedRequest = req; return(null); }); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = creator.Create(new Uri("http://fakeSite.fake")); request.Method = "POST"; using (var sw = new StreamWriter(request.GetRequestStream())) sw.Write(requestPayload); // ACT request.GetResponse(); // ASSERT interceptedRequest.ShouldNotBeNull(); interceptedRequest.RequestPayload.ShouldEqual(requestPayload); }
public void BuilderSetsInvalidOperationException() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET", ResponseException = new RecordedResponseException { Message = "Test Exception Message", Type = typeof(InvalidOperationException) } }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); // ACT var exception = Record.Exception(() => request.GetResponse()); // ASSERT exception.ShouldNotBeNull(); exception.ShouldBeType <InvalidOperationException>(); exception.Message.ShouldEqual(recordedRequest.ResponseException.Message); }
public void CanSpoofGetRequest() { // ARRANGE var responseBody = "Test Response"; var method = "GET"; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => req.HttpWebResponseCreator.Create(responseBody)); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = creator.Create(new Uri("http://fakeSite.fake")); request.Method = method; // ACT var response = (HttpWebResponse)request.GetResponse(); // ASSERT response.Method.ShouldEqual(method); response.StatusCode.ShouldEqual(HttpStatusCode.OK); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(responseBody); }
public void BuilderSetsResponseStatusCode() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET", ResponseStatusCode = HttpStatusCode.Forbidden }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); // ACT var response = (HttpWebResponse)request.GetResponse(); // ASSERT response.ShouldNotBeNull(); response.StatusCode.ShouldEqual(recordedRequest.ResponseStatusCode); }
public void BuilderSetsResponseHeaders() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET", ResponseHeaders = new RecordedHeaders { { "Header1", new [] { "Header1Value" } } } }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); // ACT var response = (HttpWebResponse)request.GetResponse(); // ASSERT response.ShouldNotBeNull(); recordedRequest.ResponseHeaders.ShouldEqual((RecordedHeaders)response.Headers); }
public void BuilderSetsResponseBody() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET", ResponseBody = "Response Body" }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest.ResponseBody.SerializedStream); }
public async Task CanSpoofAsyncRequest() { var requestPayload = "Test Request"; var responseBody = "Test Response"; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => { if (req.RequestPayload.SerializedStream != requestPayload) { throw new Exception($"{nameof(requestPayload)} was not parsed correctly."); } return(req.HttpWebResponseCreator.Create(responseBody)); }); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = (HttpWebRequest)creator.Create(new Uri("http://fakeSite.fake")); request.Method = "POST"; // ACT using (var sw = new StreamWriter(await request.GetRequestStreamAsync())) await sw.WriteAsync(requestPayload); var response = await request.GetResponseAsync(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(responseBody); }
public void CanSpoofResponseWithCookies() { // ARRANGE var cookieContainer = new CookieContainer(); var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => req.HttpWebResponseCreator.Create( "Test Response Body", responseHeaders: new WebHeaderCollection { { HttpResponseHeader.SetCookie, "cookie=true" } })); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = (HttpWebRequest)creator.Create(new Uri("http://fakeSite.fake")); request.CookieContainer = cookieContainer; // ACT var response = (HttpWebResponse)request.GetResponse(); // ASSERT response.Cookies.Count.ShouldEqual(1); response.Cookies.ToList().First().Name.ShouldEqual("cookie"); response.Cookies.ToList().First().Value.ShouldEqual("true"); }
public void MatchesOnZippedPayload() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "POST", RequestPayload = new RecordedStream { SerializedStream = "Request 1", IsGzippedCompressed = true }, RequestHeaders = new RecordedHeaders { { "Content-Type", new [] { "text/plain" } } }, ResponseBody = "Response 1" }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); request.Method = "POST"; request.ContentType = "text/plain"; using (var input = new MemoryStream(Encoding.UTF8.GetBytes(recordedRequest.RequestPayload.SerializedStream))) using (var compressed = new MemoryStream()) using (var zip = new GZipStream(compressed, CompressionMode.Compress, leaveOpen: true)) { input.CopyTo(zip); zip.Close(); compressed.Seek(0, SeekOrigin.Begin); compressed.CopyTo(request.GetRequestStream()); } // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest.ResponseBody.SerializedStream); }
public void GetResponseReturnsARealHttpWebResponse() { // ARRANGE IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(req => req.HttpWebResponseCreator.Create("Test")); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT var response = request.GetResponse(); // ASSERT response.ShouldBeType <HttpWebResponse>(); }
public void CanSetRecordedRequestsToOnlyMatchOnce() { // ARRANGE var recordedRequest1 = new RecordedRequest { Url = "http://fakeSite.fake/1", Method = "GET", ResponseBody = "Response 1" }; var recordedRequest2 = new RecordedRequest { Url = "http://fakeSite.fake/2", Method = recordedRequest1.Method, ResponseBody = "Response 2" }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder( new RecordingSession { RecordedRequests = { recordedRequest1, recordedRequest1, recordedRequest2 } }) { AllowReplayingRecordedRequestsMultipleTimes = false }; var creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); // ACT var response1a = (HttpWebResponse)creator.Create(new Uri(recordedRequest1.Url)).GetResponse(); var response1b = (HttpWebResponse)creator.Create(new Uri(recordedRequest1.Url)).GetResponse(); var response1c = (HttpWebResponse)creator.Create(new Uri(recordedRequest1.Url)).GetResponse(); var response2a = (HttpWebResponse)creator.Create(new Uri(recordedRequest2.Url)).GetResponse(); var response2b = (HttpWebResponse)creator.Create(new Uri(recordedRequest2.Url)).GetResponse(); // ASSERT response1a.ShouldNotBeNull(); response1b.ShouldNotBeNull(); response1c.ShouldNotBeNull(); response2a.ShouldNotBeNull(); response2b.ShouldNotBeNull(); using (var sr = new StreamReader(response1a.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest1.ResponseBody.SerializedStream); using (var sr = new StreamReader(response1b.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest1.ResponseBody.SerializedStream); using (var sr = new StreamReader(response2a.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest2.ResponseBody.SerializedStream); response1c.StatusCode.ShouldEqual(HttpStatusCode.NotFound); response2b.StatusCode.ShouldEqual(HttpStatusCode.NotFound); }
public void CanPlaybackFromMultipleRecordingSessions() { // ARRANGE var recordedRequest1 = new RecordedRequest { Url = "http://fakeSite.fake/1", Method = "GET", ResponseBody = "Response 1" }; var recordedRequest2 = new RecordedRequest { Url = "http://fakeSite.fake/2", Method = recordedRequest1.Method, ResponseBody = "Response 2" }; var recordingSession1 = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest1 } }; var recordingSession2 = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest2 } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession1, recordingSession2); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request1 = creator.Create(new Uri(recordedRequest1.Url)); var request2 = creator.Create(new Uri(recordedRequest2.Url)); // ACT var response1 = request1.GetResponse(); var response2 = request2.GetResponse(); // ASSERT response1.ShouldNotBeNull(); response2.ShouldNotBeNull(); using (var sr = new StreamReader(response1.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest1.ResponseBody.SerializedStream); using (var sr = new StreamReader(response2.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest2.ResponseBody.SerializedStream); }
public void BuilderSetsWebExceptionWithResponse() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET", ResponseException = new RecordedResponseException { Message = "Test Exception Message", Type = typeof(WebException), WebExceptionStatus = WebExceptionStatus.ConnectionClosed }, ResponseBody = "Fake Error Response", ResponseHeaders = new RecordedHeaders { { "header1", new [] { "value1" } } }, ResponseStatusCode = HttpStatusCode.InternalServerError }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); // ACT var exception = Record.Exception(() => request.GetResponse()); var webException = exception as WebException; var webExceptionResponse = webException.Response as HttpWebResponse; // ASSERT webException.ShouldNotBeNull(); webException.Message.ShouldEqual(recordedRequest.ResponseException.Message); webException.Status.ShouldEqual(recordedRequest.ResponseException.WebExceptionStatus.Value); webExceptionResponse.ShouldNotBeNull(); Assert.Equal(recordedRequest.ResponseHeaders, (RecordedHeaders)webExceptionResponse.Headers); webExceptionResponse.StatusCode.ShouldEqual(recordedRequest.ResponseStatusCode); webExceptionResponse.ContentLength.ShouldBeGreaterThan(0); using (var sr = new StreamReader(webExceptionResponse.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest.ResponseBody.SerializedStream); }
public void CanCreateResponseSpecificToRequestPayload() { // ARRANGE var fakeUrl = new Uri("http://fakeSite.fake"); var fakePayload1 = "payload1"; var fakePayload1Response = "fakeResponse1"; var fakePayload2 = "payload2"; var fakePayload2Response = "fakeResponse2"; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => { if (req.RequestPayload.SerializedStream == fakePayload1) { return(req.HttpWebResponseCreator.Create(fakePayload1Response)); } if (req.RequestPayload.SerializedStream == fakePayload2) { return(req.HttpWebResponseCreator.Create(fakePayload2Response)); } throw new Exception("Couldn't match request to response"); }); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request1 = creator.Create(fakeUrl); request1.Method = "POST"; using (var sw = new StreamWriter(request1.GetRequestStream())) sw.Write(fakePayload1); var request2 = creator.Create(fakeUrl); request2.Method = "POST"; using (var sw = new StreamWriter(request2.GetRequestStream())) sw.Write(fakePayload2); // ACT var response1 = request1.GetResponse(); var response2 = request2.GetResponse(); // ASSERT using (var sr = new StreamReader(response1.GetResponseStream())) sr.ReadToEnd().ShouldEqual(fakePayload1Response); using (var sr = new StreamReader(response2.GetResponseStream())) sr.ReadToEnd().ShouldEqual(fakePayload2Response); }
public void BuilderAlwaysSetsWebExceptionResponseWhenStatusIsProtocolError() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET", ResponseException = new RecordedResponseException { Message = "Test Exception Message", Type = typeof(WebException), WebExceptionStatus = WebExceptionStatus.ProtocolError }, ResponseHeaders = new RecordedHeaders { { "header1", new[] { "value1" } } }, ResponseStatusCode = HttpStatusCode.Unauthorized //intentionally leave ResponseBody null }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri(recordedRequest.Url)); // ACT var exception = Record.Exception(() => request.GetResponse()); var webException = exception as WebException; var webExceptionResponse = webException.Response as HttpWebResponse; // ASSERT webException.ShouldNotBeNull(); webException.Message.ShouldEqual(recordedRequest.ResponseException.Message); webException.Status.ShouldEqual(recordedRequest.ResponseException.WebExceptionStatus.Value); webExceptionResponse.ShouldNotBeNull(); Assert.Equal(recordedRequest.ResponseHeaders, (RecordedHeaders)webExceptionResponse.Headers); webExceptionResponse.StatusCode.ShouldEqual(recordedRequest.ResponseStatusCode); // no response content in recordedResponse, so content length should be 0 webExceptionResponse.ContentLength.ShouldEqual(0); }
public void CanSpoofResponseWithText() { // ARRANGE var fakeResponseBody = "Test"; IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(req => req.HttpWebResponseCreator.Create(fakeResponseBody)); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT var response = request.GetResponse(); // ASSERT using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(fakeResponseBody); }
public void CanCreateResponseSpecificToRequestHeaders() { // ARRANGE var fakeUrl = new Uri("http://fakeSite.fake"); var fakeJsonContentType = "application/json"; var fakeJsonResponse = "fakeJsonResponse"; var fakeXmlContentType = "application/xml"; var fakeXmlResponse = "fakeXmlResponse"; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => { if (req.HttpWebRequest.Headers[HttpRequestHeader.ContentType] == fakeJsonContentType) { return(req.HttpWebResponseCreator.Create(fakeJsonResponse)); } if (req.HttpWebRequest.Headers[HttpRequestHeader.ContentType] == fakeXmlContentType) { return(req.HttpWebResponseCreator.Create(fakeXmlResponse)); } throw new Exception("Couldn't match request to response"); }); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var jsonRequest = creator.Create(fakeUrl); jsonRequest.ContentType = fakeJsonContentType; var xmlRequest = creator.Create(fakeUrl); xmlRequest.ContentType = fakeXmlContentType; // ACT var jsonResponse = jsonRequest.GetResponse(); var xmlResponse = xmlRequest.GetResponse(); // ASSERT using (var sr = new StreamReader(jsonResponse.GetResponseStream())) sr.ReadToEnd().ShouldEqual(fakeJsonResponse); using (var sr = new StreamReader(xmlResponse.GetResponseStream())) sr.ReadToEnd().ShouldEqual(fakeXmlResponse); }
public void CanSpoofResponseWithNullText() { // ARRANGE // just make sure this doesn't throw an exception string fakeResponseBody = null; var creator = new HttpWebRequestWrapperInterceptorCreator(req => req.HttpWebResponseCreator.Create(fakeResponseBody)); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT var response = request.GetResponse(); // ASSERT using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(string.Empty); }
public void DefaultNotFoundBehaviorReturns404() { // ARRANGE var recordingSession = new RecordingSession[0]; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT var response = (HttpWebResponse)request.GetResponse(); // ASSERT response.ShouldNotBeNull(); response.StatusCode.ShouldEqual(HttpStatusCode.NotFound); }
public void CanCreateResponseSpecificToRequestMethod() { // ARRANGE var fakeUrl = new Uri("http://fakeSite.fake"); var fakeGetResponse = "fakeResponse1"; var fakePostResponse = "fakeResponse1"; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => { if (req.HttpWebRequest.Method.ToLower() == "get") { return(req.HttpWebResponseCreator.Create(fakeGetResponse)); } if (req.HttpWebRequest.Method.ToLower() == "post") { return(req.HttpWebResponseCreator.Create(fakePostResponse)); } throw new Exception("Couldn't match request to response"); }); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var getRequest = creator.Create(fakeUrl); getRequest.Method = "GET"; var postRequest = creator.Create(fakeUrl); postRequest.Method = "POST"; // ACT var getResponse = getRequest.GetResponse(); var postResponse = postRequest.GetResponse(); // ASSERT using (var sr = new StreamReader(getResponse.GetResponseStream())) sr.ReadToEnd().ShouldEqual(fakeGetResponse); using (var sr = new StreamReader(postResponse.GetResponseStream())) sr.ReadToEnd().ShouldEqual(fakePostResponse); }
public void CanSpoofResponseHttpStatusCode() { // ARRANGE var fakeStatusCode = HttpStatusCode.NotFound; var responseCreator = new Func <InterceptedRequest, HttpWebResponse>(req => req.HttpWebResponseCreator.Create( "Test Response Body", fakeStatusCode)); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(responseCreator); var request = creator.Create(new Uri("http://fakeSite.fake")); // ACT var response = (HttpWebResponse)request.GetResponse(); // ASSERT response.StatusCode.ShouldEqual(fakeStatusCode); }
public void CanSetOnMatchEventHandler() { var matchCallCount = 0; var requestUrl = new Uri("http://fakeSite.fake/"); var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake/", Method = "GET", ResponseStatusCode = HttpStatusCode.Found }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession) { OnMatch = (recordedReq, interceptedReq, httpWebResponse, exception) => { recordedReq.ShouldEqual(recordedRequest); interceptedReq.HttpWebRequest.RequestUri.ShouldEqual(new Uri(recordedRequest.Url)); httpWebResponse.StatusCode.ShouldEqual(recordedRequest.ResponseStatusCode); matchCallCount++; } }; IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = creator.Create(requestUrl); // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); matchCallCount.ShouldEqual(1); }
public void CanPlaybackDeflatedResponse() { // ARRANGE var recordedRequest = new RecordedRequest { Url = "http://fakeSite.fake", Method = "GET", ResponseBody = new RecordedStream { SerializedStream = "Response 1", IsDeflateCompressed = true }, ResponseHeaders = new RecordedHeaders { { "Content-Encoding", new [] { "deflate" } } } }; var recordingSession = new RecordingSession { RecordedRequests = new List <RecordedRequest> { recordedRequest } }; var requestBuilder = new RecordingSessionInterceptorRequestBuilder(recordingSession); IWebRequestCreate creator = new HttpWebRequestWrapperInterceptorCreator(requestBuilder); var request = (HttpWebRequest)creator.Create(new Uri(recordedRequest.Url)); request.AutomaticDecompression = DecompressionMethods.Deflate; // ACT var response = request.GetResponse(); // ASSERT response.ShouldNotBeNull(); using (var sr = new StreamReader(response.GetResponseStream())) sr.ReadToEnd().ShouldEqual(recordedRequest.ResponseBody.SerializedStream); }