mirror of
https://github.com/nsnail/Ocelot.git
synced 2025-06-19 07:48:16 +08:00
brought in flurl and stated adding tests for the requester
This commit is contained in:
119
test/Ocelot.UnitTests/Requester/RequesterTests.cs
Normal file
119
test/Ocelot.UnitTests/Requester/RequesterTests.cs
Normal file
@ -0,0 +1,119 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Flurl.Http.Testing;
|
||||
using Ocelot.Library.Infrastructure.Requester;
|
||||
using Shouldly;
|
||||
using TestStack.BDDfy;
|
||||
using Xunit;
|
||||
|
||||
namespace Ocelot.UnitTests.Requester
|
||||
{
|
||||
public class RequesterTests : IDisposable
|
||||
{
|
||||
private readonly IHttpRequester _httpRequester;
|
||||
private readonly HttpTest _httpTest;
|
||||
private string _httpMethod;
|
||||
private string _downstreamUrl;
|
||||
private HttpResponseMessage _result;
|
||||
private HttpContent _content;
|
||||
|
||||
public RequesterTests()
|
||||
{
|
||||
_httpTest = new HttpTest();
|
||||
_httpRequester = new HttpClientHttpRequester();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void should_call_downstream_url_correctly()
|
||||
{
|
||||
this.Given(x => x.GivenIHaveHttpMethod("GET"))
|
||||
.And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk"))
|
||||
.And(x => x.GivenTheDownstreamServerReturns(HttpStatusCode.OK))
|
||||
.When(x => x.WhenIMakeARequest())
|
||||
.Then(x => x.ThenTheFollowingIsReturned(HttpStatusCode.OK))
|
||||
.And(x => x.ThenTheDownstreamServerIsCalledCorrectly())
|
||||
.BDDfy();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void should_obey_http_method()
|
||||
{
|
||||
this.Given(x => x.GivenIHaveHttpMethod("POST"))
|
||||
.And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk"))
|
||||
.And(x => x.GivenTheDownstreamServerReturns(HttpStatusCode.Created))
|
||||
.When(x => x.WhenIMakeARequest())
|
||||
.Then(x => x.ThenTheFollowingIsReturned(HttpStatusCode.Created))
|
||||
.And(x => x.ThenTheDownstreamServerIsCalledCorrectly())
|
||||
.And(x => x.ThenTheCorrectHttpMethodIsUsed(HttpMethod.Post))
|
||||
.BDDfy();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void should_forward_http_content()
|
||||
{
|
||||
this.Given(x => x.GivenIHaveHttpMethod("POST"))
|
||||
.And(x => x.GivenIHaveDownstreamUrl("http://www.bbc.co.uk"))
|
||||
.And(x => x.GivenIHaveTheHttpContent(new StringContent("Hi from Tom")))
|
||||
.And(x => x.GivenTheDownstreamServerReturns(HttpStatusCode.Created))
|
||||
.When(x => x.WhenIMakeARequest())
|
||||
.Then(x => x.ThenTheFollowingIsReturned(HttpStatusCode.Created))
|
||||
.And(x => x.ThenTheDownstreamServerIsCalledCorrectly())
|
||||
.And(x => x.ThenTheCorrectHttpMethodIsUsed(HttpMethod.Post))
|
||||
.And(x => x.ThenTheCorrectContentIsUsed(new StringContent("Hi from Tom")))
|
||||
.BDDfy();
|
||||
}
|
||||
|
||||
private void GivenIHaveTheHttpContent(HttpContent content)
|
||||
{
|
||||
_content = content;
|
||||
}
|
||||
|
||||
private void GivenIHaveHttpMethod(string httpMethod)
|
||||
{
|
||||
_httpMethod = httpMethod;
|
||||
}
|
||||
|
||||
private void GivenIHaveDownstreamUrl(string downstreamUrl)
|
||||
{
|
||||
_downstreamUrl = downstreamUrl;
|
||||
}
|
||||
|
||||
private void GivenTheDownstreamServerReturns(HttpStatusCode statusCode)
|
||||
{
|
||||
_httpTest.RespondWith(_content != null ? _content.ReadAsStringAsync().Result : string.Empty, (int)statusCode);
|
||||
}
|
||||
|
||||
private void WhenIMakeARequest()
|
||||
{
|
||||
_result = _httpRequester.GetResponse(_httpMethod, _downstreamUrl, _content != null ? _content.ReadAsStreamAsync().Result : Stream.Null).Result;
|
||||
}
|
||||
|
||||
private void ThenTheFollowingIsReturned(HttpStatusCode expected)
|
||||
{
|
||||
_result.StatusCode.ShouldBe(expected);
|
||||
}
|
||||
|
||||
private void ThenTheDownstreamServerIsCalledCorrectly()
|
||||
{
|
||||
_httpTest.ShouldHaveCalled(_downstreamUrl);
|
||||
}
|
||||
|
||||
private void ThenTheCorrectHttpMethodIsUsed(HttpMethod expected)
|
||||
{
|
||||
_httpTest.CallLog[0].Request.Method.ShouldBe(expected);
|
||||
}
|
||||
|
||||
private void ThenTheCorrectContentIsUsed(HttpContent content)
|
||||
{
|
||||
_httpTest.CallLog[0].Response.Content.ReadAsStringAsync().Result.ShouldBe(content.ReadAsStringAsync().Result);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_httpTest.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user