예제 #1
0
        public async Task Does_not_rollback_on_message_delivery_error()
        {
            // Arrange
            var messageBroker = _testContext.Factory.Services.GetRequiredService <MessageBroker>();

            messageBroker.SimulateFailure = true;

            DomainUser existingUser = _fakers.DomainUser.Generate();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                await dbContext.ClearTableAsync <DomainUser>();
                dbContext.Users.Add(existingUser);
                await dbContext.SaveChangesAsync();
            });

            string route = "/domainUsers/" + existingUser.StringId;

            // Act
            (HttpResponseMessage httpResponse, ErrorDocument responseDocument) = await _testContext.ExecuteDeleteAsync <ErrorDocument>(route);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.ServiceUnavailable);

            responseDocument.Errors.Should().HaveCount(1);

            Error error = responseDocument.Errors[0];

            error.StatusCode.Should().Be(HttpStatusCode.ServiceUnavailable);
            error.Title.Should().Be("Message delivery failed.");
            error.Detail.Should().BeNull();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                DomainUser user = await dbContext.Users.FirstWithIdOrDefaultAsync(existingUser.Id);
                user.Should().BeNull();
            });
        }