Вот так выглядит мой контроллер:
[Authorize(AuthenticationSchemes = "Bearer")]
[ApiController]
[Produces("application/json")]
[Route("/api/account/{accountId}/service")]
public class MyServiceController : ControllerBase
{
private readonly IMyService _service;
public MyServiceController(IMyService service)
{
this._service = service;
}
[HttpGet]
[ProducesResponseType(typeof(IEnumerable<SomeDto>), StatusCodes.Status200OK)]
public async Task<IEnumerable<SomeDto>> GetAllServicesAsync([FromRoute] string accountId, CancellationToken cancellationToken)
{
return await this._application.GetServicesAsync(accountId, cancellationToken);
}
и тест, который выглядит следующим образом:
[Fact]
public async Task GetAllAsyncTest()
{
var expected = new SomeDto { AccountId = "123" };
this._mockApplication.Setup(service => service.GetSomesAsync(expected.AccountId, It.IsAny<CancellationToken>()))
.ReturnsAsync(new List<SomeDto> { expected });
var client = this._factory.MockService(this._mockApplication).CreateClient();
var httpResponse = await client.GetAsync($"/api/account/{expected.AccountId}/account");
httpResponse.EnsureSuccessStatusCode();
var actual = await JsonSerializer.DeserializeAsync<IEnumerable<SomeDto>>(await httpResponse.Content.ReadAsStreamAsync());
actual.Should().HaveCount(1).And.ContainEquivalentOf(expected);
}
Я только что добавил [Authorize(AuthenticationSchemes = "Bearer")]
, и он прекрасно работает, когда я запускаю мой сервер. Проблема в том, что мой тест не проходит с этим:
System.Net.Http.HttpRequestException : Response status code does not indicate success: 401 (Unauthorized).
at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
Если я удаляю обратно [Authorize(AuthenticationSchemes = "Bearer")]
, мои тестовые проходы на моих конечных точках не аутентифицируются.
Как я могу сделать этот тестовый проход ? Я пытался:
Все попытки не увенчались успехом. Либо тест пройден, либо проверка подлинности работает. Никогда оба. Как я могу пройти этот тест, сохраняя аутентификацию? Спасибо