public async Task StoreAsync_ConcurrentlyModifyExistingEntity_ExceptionThrown() { var eventStore = _dbContext.Persons.Add(new PersonEventStore { Id = 12, EntityVersion = 1 }).Entity; eventStore.Events.Add(new PersonEvent { SerializedEvent = "{" + "\"$type\": \"Silverback.Tests.EventSourcing.EntityFrameworkCore.TestTypes.Person+NameChangedEvent, Silverback.EventSourcing.EntityFrameworkCore.Tests\"," + "\"NewName\": \"Silverback\"" + "}" }); _dbContext.SaveChanges(); var repo = new PersonEventStoreRepository(_dbContext); var person = repo.Get(p => p.Id == 12); var person2 = repo.Get(p => p.Id == 12); person.ChangeName("Sergio"); person.ChangeAge(35); person2.ChangeName("Sergio"); person2.ChangeAge(35); await repo.StoreAsync(person); Func <Task> act = async() => await repo.StoreAsync(person2); act.Should().Throw <SilverbackConcurrencyException>(); }
public void Get_ExistingId_EventsApplied() { var eventStore = _dbContext.Persons.Add(new PersonEventStore { Id = 12 }).Entity; eventStore.Events.Add(new PersonEvent { SerializedEvent = "{" + "\"$type\": \"Silverback.Tests.EventSourcing.EntityFrameworkCore.TestTypes.Person+NameChangedEvent, Silverback.EventSourcing.EntityFrameworkCore.Tests\"," + "\"NewName\": \"Silverback\"" + "}" }); eventStore.Events.Add(new PersonEvent { SerializedEvent = "{" + "\"$type\": \"Silverback.Tests.EventSourcing.EntityFrameworkCore.TestTypes.Person+AgeChangedEvent, Silverback.EventSourcing.EntityFrameworkCore.Tests\"," + "\"NewAge\": 35" + "}" }); _dbContext.SaveChanges(); var repo = new PersonEventStoreRepository(_dbContext); var entity = repo.Get(p => p.Id == 12); entity.Name.Should().Be("Silverback"); entity.Age.Should().Be(35); }