mirror of https://github.com/abpframework/abp.git
31 changed files with 145 additions and 343 deletions
@ -1,96 +0,0 @@ |
|||||
using System; |
|
||||
using System.Threading.Tasks; |
|
||||
using Microsoft.Extensions.DependencyInjection; |
|
||||
using Shouldly; |
|
||||
using Volo.Abp.Domain.Repositories; |
|
||||
using Volo.Abp.TestApp.Domain; |
|
||||
using Volo.Abp.TestApp.Testing; |
|
||||
using Volo.Abp.Uow; |
|
||||
using Xunit; |
|
||||
|
|
||||
namespace Volo.Abp.MongoDB.Transactions |
|
||||
{ |
|
||||
[Collection(MongoTestCollection.Name)] |
|
||||
public class Transaction_Tests : TestAppTestBase<AbpMongoDbTestModule> |
|
||||
{ |
|
||||
|
|
||||
private readonly IBasicRepository<Person, Guid> _personRepository; |
|
||||
private readonly IBasicRepository<City, Guid> _cityRepository; |
|
||||
private readonly IUnitOfWorkManager _unitOfWorkManager; |
|
||||
|
|
||||
public Transaction_Tests() |
|
||||
{ |
|
||||
_personRepository = ServiceProvider.GetRequiredService<IBasicRepository<Person, Guid>>(); |
|
||||
_cityRepository = ServiceProvider.GetRequiredService<IBasicRepository<City, Guid>>(); |
|
||||
_unitOfWorkManager = ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); |
|
||||
} |
|
||||
|
|
||||
[Fact] |
|
||||
public async Task Should_Rollback_Transaction_When_An_Exception_Is_Thrown() |
|
||||
{ |
|
||||
var personId = Guid.NewGuid(); |
|
||||
const string exceptionMessage = "thrown to rollback the transaction!"; |
|
||||
|
|
||||
try |
|
||||
{ |
|
||||
await WithUnitOfWorkAsync(new AbpUnitOfWorkOptions {IsTransactional = true}, async () => |
|
||||
{ |
|
||||
await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); |
|
||||
throw new Exception(exceptionMessage); |
|
||||
}); |
|
||||
} |
|
||||
catch (Exception e) when (e.Message == exceptionMessage) |
|
||||
{ |
|
||||
|
|
||||
} |
|
||||
|
|
||||
var person = await _personRepository.FindAsync(personId); |
|
||||
person.ShouldBeNull(); |
|
||||
} |
|
||||
|
|
||||
[Fact] |
|
||||
public async Task Should_Rollback_Transaction_Manually() |
|
||||
{ |
|
||||
var personId = Guid.NewGuid(); |
|
||||
|
|
||||
await WithUnitOfWorkAsync(new AbpUnitOfWorkOptions {IsTransactional = true}, async () => |
|
||||
{ |
|
||||
_unitOfWorkManager.Current.ShouldNotBeNull(); |
|
||||
|
|
||||
await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); |
|
||||
|
|
||||
await _unitOfWorkManager.Current.RollbackAsync(); |
|
||||
}); |
|
||||
|
|
||||
var person = await _personRepository.FindAsync(personId); |
|
||||
person.ShouldBeNull(); |
|
||||
} |
|
||||
|
|
||||
[Fact] |
|
||||
public async Task Should_Rollback_Transaction_Manually_With_Double_DbContext_Transaction() |
|
||||
{ |
|
||||
var personId = Guid.NewGuid(); |
|
||||
var cityId = Guid.NewGuid(); |
|
||||
|
|
||||
using (var scope = ServiceProvider.CreateScope()) |
|
||||
{ |
|
||||
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>(); |
|
||||
|
|
||||
using (uowManager.Begin(new AbpUnitOfWorkOptions {IsTransactional = true})) |
|
||||
{ |
|
||||
_unitOfWorkManager.Current.ShouldNotBeNull(); |
|
||||
|
|
||||
await _personRepository.InsertAsync(new Person(personId, "Adam", 42)); |
|
||||
await _cityRepository.InsertAsync(new City(cityId, cityId.ToString())); |
|
||||
|
|
||||
await _unitOfWorkManager.Current.SaveChangesAsync(); |
|
||||
|
|
||||
//Will automatically rollback since not called the Complete!
|
|
||||
} |
|
||||
} |
|
||||
|
|
||||
(await _personRepository.FindAsync(personId)).ShouldBeNull(); |
|
||||
(await _cityRepository.FindAsync(cityId)).ShouldBeNull(); |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
Loading…
Reference in new issue