У меня есть OAuthServerProvider, выдающий токены после аутентификации имени пользователя и паролей. Когда имя пользователя или пароль недействительны, я отклоняю контекст owin, который по умолчанию возвращает 400 Bad Request
в качестве кода состояния.NUnit Тесты, пропускающие промежуточное ПО owin
Но я хочу, чтобы ответить 401 Unauthorized
Для достижения этой цели я написал промежуточное программное обеспечение, которое будет проверять заголовок и посмотреть, если пользовательский заголовок присутствует, и если так будет заменить код состояния с 401.
if (context.Response.StatusCode == 400 && context.Response.Headers.ContainsKey(Constants.OwinChallengeFlag))
{
var headerValues = context.Response.Headers.GetValues(Constants.OwinChallengeFlag);
context.Response.StatusCode = Convert.ToInt16(headerValues.FirstOrDefault());
context.Response.Headers.Remove(Constants.OwinChallengeFlag);
}
Это работает отлично, когда я ударил его скрипачом, но единичный тест, который я написал ниже, всегда получает 400. Как-то, когда я делаю запрос с моим модульным тестом, промежуточное программное обеспечение пропускается.
[TestFixture]
public class UnitTest1
{
private TestServer _server;
[SetUp]
public void SetUp()
{
_server = TestServer.Create<Startup>();
}
[Test]
public void ShouldReturnUnauthorizedResponse()
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "/token");
//wrong password
var requestContent = "grant_type=password&UserName=foo&Password=bar";
request.Content = new StringContent(requestContent, Encoding.UTF8, "application/x-www-form-urlencoded");
var response = _server.HttpClient.SendAsync(request).Result;
//This assert fails, but shouldn't
Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Unauthorized));
}
}
Необходимо знать, что я делаю неправильно здесь.
1) Это интеграционный тест, а не единичный тест. 2) Покажите конфигурацию запуска и полное промежуточное ПО. 3) Буферизуете ли вы ответ, чтобы иметь доступ к нему в потоке? – Nkosi