public void EventsAreDeletedWhenUnitOfWorkIsCommitted() { var bus = new MockServiceBus(); var store = new MockEventStore(); using (var session = new EventStoreSession(bus, store, new SingleThreadUseGuard(), DateTimeNowTimeSource.Instance)) { var uow = new UnitOfWork(new SingleThreadUseGuard()); uow.AddParticipant(session); var aggregate1 = new Guid("92EC4FE2-26A8-4274-8674-DC5D95513C83"); var aggregate2 = new Guid("F08200E4-8790-4ECC-9F06-A3D3BAC9E21C"); session.Delete(aggregate1); session.Delete(aggregate2); session.SaveChanges(); Assert.That(store.DeletedAggregates, Is.Empty); uow.Commit(); Assert.That(store.DeletedAggregates, Is.EquivalentTo(new[] { aggregate1, aggregate2 })); } }
public void EventsArePublishedOnSaveChangesAndThisInteractsWithUnitOfWorkParticipations() { var bus = new MockServiceBus(); var store = new MockEventStore(); var users = 1.Through(9).Select(i => { var u = new User(); u.Register(i + "@test.com", "abcd", Guid.NewGuid()); u.ChangeEmail("new" + i + "@test.com"); return(u); }).ToList(); using (var session = new EventStoreSession(bus, store, new SingleThreadUseGuard(), DateTimeNowTimeSource.Instance)) { var uow = new UnitOfWork(new SingleThreadUseGuard()); uow.AddParticipant(session); users.Take(3).ForEach(u => session.Save(u)); Assert.That(bus.Published.Count, Is.EqualTo(0)); session.SaveChanges(); Assert.That(bus.Published.Count, Is.EqualTo(6)); users.Skip(3).Take(3).ForEach(u => session.Save(u)); Assert.That(bus.Published.Count, Is.EqualTo(6)); session.SaveChanges(); Assert.That(bus.Published.Count, Is.EqualTo(12)); users.Skip(6).Take(3).ForEach(u => session.Save(u)); Assert.That(bus.Published.Count, Is.EqualTo(12)); Assert.That(store.SavedEvents.Count, Is.EqualTo(0)); uow.Commit(); Assert.That(bus.Published.Count, Is.EqualTo(18)); Assert.That(bus.Published.Select(e => e.EventId).Distinct().Count(), Is.EqualTo(18)); Assert.That(bus.Published, Is.EquivalentTo(store.SavedEvents)); } }
public void EventsAreDeletedWhenNotAUnitOfWorkParticipant() { var bus = new MockServiceBus(); var store = new MockEventStore(); using (var session = new EventStoreSession(bus, store, new SingleThreadUseGuard(), DateTimeNowTimeSource.Instance)) { var aggregate1 = new Guid("92EC4FE2-26A8-4274-8674-DC5D95513C83"); var aggregate2 = new Guid("F08200E4-8790-4ECC-9F06-A3D3BAC9E21C"); session.Delete(aggregate1); session.Delete(aggregate2); session.SaveChanges(); session.SaveChanges(); // Verify that SaveChanges() does not delete the events twice. Assert.That(store.DeletedAggregates, Is.EquivalentTo(new[] { aggregate1, aggregate2 })); } }
public void EventsAreDeletedWhenUnitOfWorkIsCommitted() { var bus = new MockServiceBus(); var store = new MockEventStore(); using (var session = new EventStoreSession(bus, store, new SingleThreadUseGuard())) { var uow = new UnitOfWork(new SingleThreadUseGuard()); uow.AddParticipant(session); var aggregate1 = new Guid("92EC4FE2-26A8-4274-8674-DC5D95513C83"); var aggregate2 = new Guid("F08200E4-8790-4ECC-9F06-A3D3BAC9E21C"); session.Delete(aggregate1); session.Delete(aggregate2); session.SaveChanges(); Assert.That(store.DeletedAggregates, Is.Empty); uow.Commit(); Assert.That(store.DeletedAggregates, Is.EquivalentTo(new[] { aggregate1, aggregate2 })); } }
public void EventsAreDeletedWhenNotAUnitOfWorkParticipant() { var bus = new MockServiceBus(); var store = new MockEventStore(); using (var session = new EventStoreSession(bus, store, new SingleThreadUseGuard())) { var aggregate1 = new Guid("92EC4FE2-26A8-4274-8674-DC5D95513C83"); var aggregate2 = new Guid("F08200E4-8790-4ECC-9F06-A3D3BAC9E21C"); session.Delete(aggregate1); session.Delete(aggregate2); session.SaveChanges(); session.SaveChanges(); // Verify that SaveChanges() does not delete the events twice. Assert.That(store.DeletedAggregates, Is.EquivalentTo(new[] { aggregate1, aggregate2 })); } }
public void EventsArePublishedOnSaveChangesAndThisInteractsWithUnitOfWorkParticipations() { var bus = new MockServiceBus(); var store = new MockEventStore(); var users = 1.Through(9).Select(i => { var u = new User(); u.Register(i + "@test.com", "abcd", Guid.NewGuid()); u.ChangeEmail("new" + i + "@test.com"); return u; }).ToList(); using (var session = new EventStoreSession(bus, store, new SingleThreadUseGuard())) { var uow = new UnitOfWork(new SingleThreadUseGuard()); uow.AddParticipant(session); users.Take(3).ForEach(u => session.Save(u)); Assert.That(bus.Published.Count, Is.EqualTo(0)); session.SaveChanges(); Assert.That(bus.Published.Count, Is.EqualTo(6)); users.Skip(3).Take(3).ForEach(u => session.Save(u)); Assert.That(bus.Published.Count, Is.EqualTo(6)); session.SaveChanges(); Assert.That(bus.Published.Count, Is.EqualTo(12)); users.Skip(6).Take(3).ForEach(u => session.Save(u)); Assert.That(bus.Published.Count, Is.EqualTo(12)); Assert.That(store.SavedEvents.Count, Is.EqualTo(0)); uow.Commit(); Assert.That(bus.Published.Count, Is.EqualTo(18)); Assert.That(bus.Published.Select(e => e.EventId).Distinct().Count(), Is.EqualTo(18)); Assert.That(bus.Published, Is.EquivalentTo(store.SavedEvents)); } }
protected override async Task OnPostActorMethodAsync(ActorMethodContext actorMethodContext) { await EventStoreSession.SaveChanges(); }
protected override async Task OnActivateAsync() { _aggregate = await EventStoreSession.GetAsync <Person>(); await base.OnActivateAsync(); }
private async Task <IHttpActionResult> Handle(VerifyMatchMessage message) { Roster roster = DocumentSession.Load <Roster>(message.RosterId); if (roster.IsVerified && message.Force == false) { return(Ok()); } WebsiteConfig websiteConfig = DocumentSession.Load <WebsiteConfig>(WebsiteConfig.GlobalId); HeadInfo result = await bitsClient.GetHeadInfo(roster.BitsMatchId); ParseHeaderResult header = BitsParser.ParseHeader(result, websiteConfig.ClubId); // chance to update roster values var update = new Roster.Update( Roster.ChangeType.VerifyMatchMessage, "system") { OilPattern = header.OilPattern, Date = header.Date, Opponent = header.Opponent, Location = header.Location }; if (roster.MatchResultId != null) { // update match result values BitsMatchResult bitsMatchResult = await bitsClient.GetBitsMatchResult(roster.BitsMatchId); Player[] players = DocumentSession.Query <Player, PlayerSearch>() .ToArray() .Where(x => x.PlayerItem?.LicNbr != null) .ToArray(); var parser = new BitsParser(players); if (roster.IsFourPlayer) { MatchResult4 matchResult = EventStoreSession.Load <MatchResult4>(roster.MatchResultId); Parse4Result parseResult = parser.Parse4(bitsMatchResult, websiteConfig.ClubId); update.Players = GetPlayerIds(parseResult); bool isVerified = matchResult.Update( PublishMessage, roster, parseResult.TeamScore, parseResult.OpponentScore, roster.BitsMatchId, parseResult.CreateMatchSeries(), players); update.IsVerified = isVerified; } else { MatchResult matchResult = EventStoreSession.Load <MatchResult>(roster.MatchResultId); ParseResult parseResult = parser.Parse(bitsMatchResult, websiteConfig.ClubId); update.Players = GetPlayerIds(parseResult); var resultsForPlayer = DocumentSession.Query <ResultForPlayerIndex.Result, ResultForPlayerIndex>() .Where(x => x.Season == roster.Season) .ToArray() .ToDictionary(x => x.PlayerId); MatchSerie[] matchSeries = parseResult.CreateMatchSeries(); bool isVerified = matchResult.Update( PublishMessage, roster, parseResult.TeamScore, parseResult.OpponentScore, matchSeries, parseResult.OpponentSeries, players, resultsForPlayer); update.IsVerified = isVerified; } } roster.UpdateWith(Trace.CorrelationManager.ActivityId, update); return(Ok()); }