public async Task SendAsync_WithCookieContainerWithCookieInResponse_CookiesAddedToContainer() { var cassette = new Cassette(); var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Get.Method, new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}")); cassette.Add(record); var cookieContainer = new CookieContainer(); var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette, cookieContainer); var request = new HttpRequestMessage { Method = HttpMethod.Get, Version = new Version(1, 1), RequestUri = new Uri("http://localhost:8080/test"), Content = null, }; await replayingHttpMessageHandler.SendAsync(request, CancellationToken.None); Assert.That(cookieContainer.GetCookies(request.RequestUri)["value"]?.Value, Is.EqualTo("123")); }
public void Save_TwoRecord_Success() { var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Get.Method, new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}")); var yamlCassetteStorage = new YamlCassetteStorage(); var stringWriter = new StringWriter(); yamlCassetteStorage.Save(stringWriter, new[] { record, record }); var yamlStream = new YamlStream(); yamlStream.Load(new StringReader(stringWriter.GetStringBuilder().ToString())); Assert.That(yamlStream.Documents, Has.Count.EqualTo(2)); AssertDocument(yamlStream.Documents[0], record); AssertDocument(yamlStream.Documents[1], record);
public async Task SendAsync_PostRequest_Success(Type cassetteBodyType) { var cassette = new Cassette(); var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Post.Method, new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}")); cassette.Add(record); var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette); var contentFactory = new Dictionary <Type, Func <HttpContent> > { { typeof(StringCassetteBody), () => new StringContent("{}") }, { typeof(BytesCassetteBody), () => new StreamContent(new MemoryStream(Encoding.UTF8.GetBytes("{}"))) }, }; var content = contentFactory[cassetteBodyType](); var request = new HttpRequestMessage { Method = HttpMethod.Post, Headers = { { "Cookie", "value=1" }, }, Version = new Version(1, 1), RequestUri = new Uri("http://localhost:8080/test"), Content = content, }; var response = await replayingHttpMessageHandler.SendAsync(request, CancellationToken.None); Assert.That(response, Is.Not.Null); Assert.That(response.Version, Is.EqualTo(record.Response.Version)); Assert.That(response.StatusCode, Is.EqualTo((HttpStatusCode)record.Response.StatusCode)); Assert.That(response.ReasonPhrase, Is.EqualTo(record.Response.StatusMessage)); Assert.That(response.RequestMessage, Is.Not.Null); Assert.That(response.Headers.GetValues("Server"), Is.EqualTo(new[] { record.Response.Headers["Server"] })); }
public async Task SendAsync_GetRequest_Success() { var cassette = new Cassette(); var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Get.Method, new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}")); cassette.Add(record); var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette); var request = new HttpRequestMessage { Method = HttpMethod.Get, Headers = { { "Cookie", "value=1" }, }, Version = new Version(1, 1), RequestUri = new Uri("http://localhost:8080/test"), Content = null, }; var response = await replayingHttpMessageHandler.SendAsync(request, CancellationToken.None); Assert.That(response, Is.Not.Null); Assert.That(response.Version, Is.EqualTo(record.Response.Version)); Assert.That(response.StatusCode, Is.EqualTo((HttpStatusCode)record.Response.StatusCode)); Assert.That(response.ReasonPhrase, Is.EqualTo(record.Response.StatusMessage)); Assert.That(response.RequestMessage, Is.Not.Null); Assert.That(response.Headers.GetValues("Server"), Is.EqualTo(new[] { record.Response.Headers["Server"] })); }
public void AddAndFind_MethodEqualityComparerWithAddedRecords_NoRecords() { var record0 = new CassetteRecord( new CassetteRecordRequest("GET", new Uri("http://localhost:8080/test"), new NameValueCollection()), new CassetteRecordResponse(new Version(1, 1), 204, "No Content", new NameValueCollection())); var record1 = new CassetteRecord( new CassetteRecordRequest("POST", new Uri("http://localhost:8080/test"), new NameValueCollection()), new CassetteRecordResponse(new Version(1, 1), 204, "No Content", new NameValueCollection())); var cassette = new Cassette(new MethodEqualityComparer()); cassette.Add(record0); cassette.Add(record1); Assert.That(cassette.Records, Has.Count.EqualTo(2)); Assert.That(cassette.Find(new CassetteRecordRequest("GET", new Uri("http://localhost:8080/test123"), new NameValueCollection())), Is.EqualTo(record0)); Assert.That(cassette.Find(new CassetteRecordRequest("POST", new Uri("http://localhost:8080/test123"), new NameValueCollection())), Is.EqualTo(record1)); }
public async Task SendAsync_ExistsInCassette_DoesNotCallInnerHttpHandler() { var cassette = new Cassette(); var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Get.Method, new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}")); cassette.Add(record); var mockHttpHandler = new MockHttpRequestHandler(); var tryReplayMessageHandler = new PublicTryReplayHttpMessageHandler(cassette, mockHttpHandler); var request = new HttpRequestMessage { Method = HttpMethod.Get, RequestUri = new Uri("http://localhost:8080/test"), }; var response = await tryReplayMessageHandler.SendAsync(request); Assert.That(mockHttpHandler.Invoked, Is.False); Assert.That(response.Version, Is.EqualTo(record.Response.Version)); Assert.That(response.StatusCode, Is.EqualTo((HttpStatusCode)record.Response.StatusCode)); Assert.That(response.ReasonPhrase, Is.EqualTo(record.Response.StatusMessage)); Assert.That(response.RequestMessage, Is.Not.Null); Assert.That(response.Headers.GetValues("Server"), Is.EqualTo(new[] { record.Response.Headers["Server"] })); }
public void SendAsync_WrongResponseHeader_ThrowsArgumentException() { var cassette = new Cassette(); var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Get.Method, new Uri("http://*****:*****@"{""a"": 1, ""b"": 2}")); cassette.Add(record); var replayingHttpMessageHandler = new PublicReplayingHttpMessageHandler(cassette); var request = new HttpRequestMessage { Method = HttpMethod.Get, Headers = { { "Cookie", "value=1" }, }, Version = new Version(1, 1), RequestUri = new Uri("http://localhost:8080/test"), Content = null, }; var argumentException = Assert.ThrowsAsync <ArgumentException>(() => replayingHttpMessageHandler.SendAsync(request, CancellationToken.None)); Assert.That(argumentException.ParamName, Is.Null); }
static void AssertDocument(YamlDocument document, CassetteRecord record) { Assert.That(document.RootNode, Is.TypeOf <YamlMappingNode>()); var node = (YamlMappingNode)document.RootNode; Assert.That(node.Children, Has.Count.EqualTo(2)); Assert.That(node.Children[new YamlScalarNode("Request")], Is.TypeOf <YamlMappingNode>()); var requestNode = (YamlMappingNode)node.Children[new YamlScalarNode("Request")]; Assert.That(requestNode.Children[new YamlScalarNode("Method")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Method)); Assert.That(requestNode.Children[new YamlScalarNode("Uri")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Uri.ToString())); Assert.That(requestNode.Children[new YamlScalarNode("Headers")], Is.TypeOf <YamlSequenceNode>()); var requestHeaders = (YamlSequenceNode)requestNode.Children[new YamlScalarNode("Headers")]; Assert.That(requestHeaders.Children, Has.Count.EqualTo(2)); Assert.That(requestHeaders[0], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)requestHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("text")); Assert.That(requestHeaders[1], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")], Is.TypeOf <YamlSequenceNode>()); Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[0], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=1")); Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[1], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=2")); Assert.That(node.Children[new YamlScalarNode("Response")], Is.TypeOf <YamlMappingNode>()); var responseNode = (YamlMappingNode)node.Children[new YamlScalarNode("Response")]; Assert.That(responseNode.Children[new YamlScalarNode("Version")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.Version.ToString())); Assert.That(responseNode.Children[new YamlScalarNode("StatusCode")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusCode.ToString())); Assert.That(responseNode.Children[new YamlScalarNode("StatusMessage")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusMessage)); Assert.That(responseNode.Children[new YamlScalarNode("Body")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(((StringCassetteBody)record.Response.Body).Value)); var responseHeaders = (YamlSequenceNode)responseNode.Children[new YamlScalarNode("Headers")]; Assert.That(responseHeaders.Children, Has.Count.EqualTo(1)); Assert.That(responseHeaders[0], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)responseHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("application/json")); }
protected virtual void FilterCassetteRecord(CassetteRecord record) { }
public void Save_SingleBytesRecord_Success([Values(10, 57 - 1, 57, 57 + 1, 57 * 2 - 1, 57 * 2, 57 * 2 + 1, 200)] int bodyLength) { var responseBody = Enumerable.Range(0, bodyLength).Select(i => (byte)i).ToArray(); var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Get.Method, new Uri("http://localhost:8080/test"), new NameValueCollection { { "Content-Type", "text" }, { "Cookie", "value=1" }, { "Cookie", "value=2" }, }), new CassetteRecordResponse( new Version(1, 1), 200, "OK", new NameValueCollection { { "Content-Type", "octet/stream" } }, responseBody)); var yamlCassetteStorage = new YamlCassetteStorage(); var stringWriter = new StringWriter(); yamlCassetteStorage.Save(stringWriter, new[] { record }); var yamlStream = new YamlStream(); yamlStream.Load(new StringReader(stringWriter.GetStringBuilder().ToString())); Assert.That(yamlStream.Documents, Has.Count.EqualTo(1)); var document = yamlStream.Documents[0]; Assert.That(document.RootNode, Is.TypeOf <YamlMappingNode>()); var node = (YamlMappingNode)document.RootNode; Assert.That(node.Children, Has.Count.EqualTo(2)); Assert.That(node.Children[new YamlScalarNode("Request")], Is.TypeOf <YamlMappingNode>()); var requestNode = (YamlMappingNode)node.Children[new YamlScalarNode("Request")]; Assert.That(requestNode.Children[new YamlScalarNode("Method")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Method)); Assert.That(requestNode.Children[new YamlScalarNode("Uri")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Uri.ToString())); Assert.That(requestNode.Children[new YamlScalarNode("Headers")], Is.TypeOf <YamlSequenceNode>()); var requestHeaders = (YamlSequenceNode)requestNode.Children[new YamlScalarNode("Headers")]; Assert.That(requestHeaders.Children, Has.Count.EqualTo(2)); Assert.That(requestHeaders[0], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)requestHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("text")); Assert.That(requestHeaders[1], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")], Is.TypeOf <YamlSequenceNode>()); Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[0], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=1")); Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[1], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=2")); Assert.That(node.Children[new YamlScalarNode("Response")], Is.TypeOf <YamlMappingNode>()); var responseNode = (YamlMappingNode)node.Children[new YamlScalarNode("Response")]; Assert.That(responseNode.Children[new YamlScalarNode("Version")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.Version.ToString())); Assert.That(responseNode.Children[new YamlScalarNode("StatusCode")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusCode.ToString())); Assert.That(responseNode.Children[new YamlScalarNode("StatusMessage")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusMessage)); Assert.That(responseNode.Children[new YamlScalarNode("Body")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(Convert.ToBase64String(responseBody, Base64FormattingOptions.InsertLineBreaks).Replace("\r\n", "\n"))); var responseHeaders = (YamlSequenceNode)responseNode.Children[new YamlScalarNode("Headers")]; Assert.That(responseHeaders.Children, Has.Count.EqualTo(1)); Assert.That(responseHeaders[0], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)responseHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("octet/stream")); }
public void Save_SingleRecord_Success() { var responseBody = @"{""a"": 1, ""b"": 2}"; var record = new CassetteRecord( new CassetteRecordRequest( HttpMethod.Get.Method, new Uri("http://localhost:8080/test"), new NameValueCollection { { "Content-Type", "text" }, { "Cookie", "value=1" }, { "Cookie", "value=2" }, }), new CassetteRecordResponse( new Version(1, 1), 200, "OK", new NameValueCollection { { "Content-Type", "application/json" } }, responseBody)); var yamlCassetteStorage = new YamlCassetteStorage(); var stringWriter = new StringWriter(); yamlCassetteStorage.Save(stringWriter, new[] { record }); var yamlStream = new YamlStream(); yamlStream.Load(new StringReader(stringWriter.GetStringBuilder().ToString())); Assert.That(yamlStream.Documents, Has.Count.EqualTo(1)); var document = yamlStream.Documents[0]; Assert.That(document.RootNode, Is.TypeOf <YamlMappingNode>()); var node = (YamlMappingNode)document.RootNode; Assert.That(node.Children, Has.Count.EqualTo(2)); Assert.That(node.Children[new YamlScalarNode("Request")], Is.TypeOf <YamlMappingNode>()); var requestNode = (YamlMappingNode)node.Children[new YamlScalarNode("Request")]; Assert.That(requestNode.Children[new YamlScalarNode("Method")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Method)); Assert.That(requestNode.Children[new YamlScalarNode("Uri")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Request.Uri.ToString())); Assert.That(requestNode.Children[new YamlScalarNode("Headers")], Is.TypeOf <YamlSequenceNode>()); var requestHeaders = (YamlSequenceNode)requestNode.Children[new YamlScalarNode("Headers")]; Assert.That(requestHeaders.Children, Has.Count.EqualTo(2)); Assert.That(requestHeaders[0], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)requestHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("text")); Assert.That(requestHeaders[1], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")], Is.TypeOf <YamlSequenceNode>()); Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[0], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=1")); Assert.That(((YamlSequenceNode)((YamlMappingNode)requestHeaders[1]).Children[new YamlScalarNode("Cookie")])[1], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("value=2")); Assert.That(node.Children[new YamlScalarNode("Response")], Is.TypeOf <YamlMappingNode>()); var responseNode = (YamlMappingNode)node.Children[new YamlScalarNode("Response")]; Assert.That(responseNode.Children[new YamlScalarNode("Version")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.Version.ToString())); Assert.That(responseNode.Children[new YamlScalarNode("StatusCode")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusCode.ToString())); Assert.That(responseNode.Children[new YamlScalarNode("StatusMessage")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(record.Response.StatusMessage)); Assert.That(responseNode.Children[new YamlScalarNode("Body")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo(responseBody)); var responseHeaders = (YamlSequenceNode)responseNode.Children[new YamlScalarNode("Headers")]; Assert.That(responseHeaders.Children, Has.Count.EqualTo(1)); Assert.That(responseHeaders[0], Is.TypeOf <YamlMappingNode>()); Assert.That(((YamlMappingNode)responseHeaders[0]).Children[new YamlScalarNode("Content-Type")], Is.TypeOf <YamlScalarNode>().And.Property(nameof(YamlScalarNode.Value)).EqualTo("application/json")); }