mirror of
https://github.com/alex289/CleanArchitecture.git
synced 2025-06-29 18:21:08 +00:00
67 lines
2.3 KiB
C#
67 lines
2.3 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using CleanArchitecture.Infrastructure.Database;
|
|
using CleanArchitecture.Infrastructure.Tests.Fixtures;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Logging;
|
|
using NSubstitute;
|
|
using Shouldly;
|
|
using Xunit;
|
|
|
|
namespace CleanArchitecture.Infrastructure.Tests;
|
|
|
|
public sealed class UnitOfWorkTests
|
|
{
|
|
[Fact]
|
|
public async Task Should_Commit_Async_Returns_True()
|
|
{
|
|
var options = new DbContextOptionsBuilder<ApplicationDbContext>();
|
|
var dbContextMock = Substitute.For<ApplicationDbContext>(options.Options);
|
|
var loggerMock = Substitute.For<ILogger<UnitOfWork<ApplicationDbContext>>>();
|
|
|
|
dbContextMock.SaveChangesAsync(CancellationToken.None).Returns(Task.FromResult(1));
|
|
|
|
var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock, loggerMock);
|
|
|
|
var result = await unitOfWork.CommitAsync();
|
|
|
|
result.ShouldBeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Should_Commit_Async_Returns_False()
|
|
{
|
|
var options = new DbContextOptionsBuilder<ApplicationDbContext>();
|
|
var dbContextMock = Substitute.For<ApplicationDbContext>(options.Options);
|
|
var loggerMock = Substitute.For<ILogger<UnitOfWork<ApplicationDbContext>>>();
|
|
|
|
dbContextMock
|
|
.When(x => x.SaveChangesAsync(CancellationToken.None))
|
|
.Do(_ => throw new DbUpdateException("Boom", new Exception("it broke")));
|
|
|
|
var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock, loggerMock);
|
|
|
|
var result = await unitOfWork.CommitAsync();
|
|
|
|
result.ShouldBeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Should_Throw_Exception_When_Commiting_With_DbUpdateException()
|
|
{
|
|
var options = new DbContextOptionsBuilder<ApplicationDbContext>();
|
|
var dbContextMock = Substitute.For<ApplicationDbContext>(options.Options);
|
|
var loggerMock = Substitute.For<ILogger<UnitOfWork<ApplicationDbContext>>>();
|
|
|
|
dbContextMock
|
|
.When(x => x.SaveChangesAsync(CancellationToken.None))
|
|
.Do(_ => throw new Exception("Boom"));
|
|
|
|
var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock, loggerMock);
|
|
|
|
Func<Task> throwsAction = async () => await unitOfWork.CommitAsync();
|
|
|
|
await throwsAction.ShouldThrowAsync<Exception>();
|
|
}
|
|
} |