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);

введите сюда описание изображения

Помогите пожалуйста разобраться в чём проблема, большое спасибо!


Ответы (0 шт):