PostAsJsonAsync возвращает Bad Request с кодом 400
Я начал изучать интеграционное тестирование и столкнулся со следующей проблемой.В тестируемом проекте я проверяю контроллер, в котором предусмотрена авторизация, я использую JWT.
Проект: https://github.com/MaxMartST/Tweetbook.git
Тест на контроллер по получению постов должен возвращать ответ с кодом 200, даже если нет ни одного поста:
public class PostsControllerTests : IntegrationTest
{
[Fact]
public async Task GetAll_WithoutAnyPost_ReturnsEmptyResponse()
{
// Arrange
await AuthenticateAsync();
// Act
var response = await TestClient.GetAsync(ApiRoutes.Posts.GetAll);
// Assert
response.StatusCode.Should().Be(HttpStatusCode.OK);
(await response.Content.ReadAsAsync<List<Post>>()).Should().BeEmpty();
}
}
Я создал отдельный класс IntegrationTest, в котором настроил фабрику и создал HttpClient:
protected IntegrationTest()
{
var appFactory = new WebApplicationFactory<Startup>()
.WithWebHostBuilder(builder =>
{
builder.ConfigureServices(services =>
{
services.RemoveAll(typeof(DataContext));
services.AddDbContext<DataContext>(options => { options.UseInMemoryDatabase("TestDb"); });
});
});
TestClient = appFactory.CreateClient();
}
Затем идёт метод AuthenticateAsync, где происходит авторизация через токен:
protected async Task AuthenticateAsync()
{
TestClient.DefaultRequestHeaders.Clear();
TestClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
TestClient.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");
TestClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", await GetJwtAsync());
}
Метод GetJwtAsync возращает строку токена:
private async Task<string> GetJwtAsync()
{
var url = ApiRoutes.Identity.Register;
var user = new UserRegistrationRequest
{
Email = "[email protected]",
Password = "SomePass1234!"
};
var response = await TestClient.PostAsJsonAsync(url, user);
var registrationResponse = await response.Content.ReadAsAsync<AuthSuccessResponse>();
return registrationResponse.Token;
}
Проблема заключается в строке:
var response = await TestClient.PostAsJsonAsync(url, user);
Помогите пожалуйста разобраться в чём проблема, большое спасибо!
