public void can_retrieve_correlated_aggregate() { var command1 = CorrelatedMessage.NewRoot(); var id = Guid.NewGuid(); var agg = new CorrelatedAggregate(id, command1); agg.RaiseCorrelatedEvent(); agg.RaiseCorrelatedEvent(); _repo.Save(agg); var command2 = CorrelatedMessage.NewRoot(); var recovered = _repo.GetById <CorrelatedAggregate>(id, command2); Assert.NotNull(recovered); Assert.Equal(2, recovered.Version);//zero based, includes created recovered.RaiseCorrelatedEvent(); recovered.RaiseCorrelatedEvent(); _repo.Save(recovered); var command3 = CorrelatedMessage.NewRoot(); var recovered2 = _repo.GetById <CorrelatedAggregate>(id, command3); Assert.NotNull(recovered2); Assert.Equal(4, recovered2.Version); }
public void taking_events_removes_source() { var agg = new CorrelatedAggregate(); agg.ApplyNewSource(_command); agg.RaiseCorrelatedEvent(); var evt = agg.TakeEvents()[0] as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(evt); Assert.Throws <NullReferenceException>(() => agg.RaiseCorrelatedEvent()); Assert.Empty(agg.TakeEvents()); }
public void cannot_raise_events_without_source() { var otherRoot = CorrelatedMessage.NewRoot(); var agg = new CorrelatedAggregate(); Assert.Throws <NullReferenceException>(() => agg.RaiseCorrelatedEvent()); Assert.Throws <InvalidOperationException>(() => agg.RaiseUncorrelatedEvent()); Assert.Throws <InvalidOperationException>(() => agg.RaiseExternallyCorrelatedEvent(otherRoot)); agg.ApplyNewSource(otherRoot); agg.RaiseCorrelatedEvent(); var evt = agg.TakeEvents()[0] as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(evt); Assert.Throws <NullReferenceException>(() => agg.RaiseCorrelatedEvent()); Assert.Empty(agg.TakeEvents()); }
public void correlation_and_causation_are_injected() { var command1 = MessageBuilder.New(() => new TestCommands.Command1()); var id = Guid.NewGuid(); var agg = new CorrelatedAggregate(id, command1); agg.RaiseCorrelatedEvent(); agg.RaiseCorrelatedEvent(); var raisedEvents = ((IEventSource)agg).TakeEvents(); Assert.Collection(raisedEvents, @event => { var created = @event as CorrelatedAggregate.Created; Assert.NotNull(created); Assert.Equal(command1.MsgId, created.CausationId); Assert.Equal(command1.CorrelationId, created.CorrelationId); }, @event => { var corrEvent = @event as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(corrEvent); Assert.Equal(command1.MsgId, corrEvent.CausationId); Assert.Equal(command1.CorrelationId, corrEvent.CorrelationId); }, @event => { var corrEvent = @event as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(corrEvent); Assert.Equal(command1.MsgId, corrEvent.CausationId); Assert.Equal(command1.CorrelationId, corrEvent.CorrelationId); }); var command2 = MessageBuilder.New(() => new TestCommands.Command2()); ((ICorrelatedEventSource)agg).Source = command2; agg.RaiseCorrelatedEvent(); raisedEvents = ((IEventSource)agg).TakeEvents(); Assert.Collection(raisedEvents, @event => { var corrEvent = @event as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(corrEvent); Assert.Equal(command2.MsgId, corrEvent.CausationId); Assert.Equal(command2.CorrelationId, corrEvent.CorrelationId); }); }
public void source_is_not_persisted() { var command1 = CorrelatedMessage.NewRoot(); var id = Guid.NewGuid(); var agg = new CorrelatedAggregate(id, command1); agg.RaiseCorrelatedEvent(); agg.RaiseCorrelatedEvent(); _stdRepo.Save(agg); var command2 = CorrelatedMessage.NewRoot(); var recovered = _stdRepo.GetById <CorrelatedAggregate>(id); Assert.NotNull(recovered); Assert.Equal(2, recovered.Version);//zero based, includes created //no source has been set Assert.Throws <NullReferenceException>(() => recovered.RaiseCorrelatedEvent()); recovered.ApplyNewSource(command2); recovered.RaiseCorrelatedEvent(); }
public void source_is_not_persisted() { var command1 = MessageBuilder.New(() => new TestCommands.Command1()); var id = Guid.NewGuid(); var agg = new CorrelatedAggregate(id, command1); agg.RaiseCorrelatedEvent(); agg.RaiseCorrelatedEvent(); _stdRepo.Save(agg); var command2 = MessageBuilder.New(() => new TestCommands.Command2()); var recovered = _stdRepo.GetById <CorrelatedAggregate>(id); Assert.NotNull(recovered); Assert.Equal(2, recovered.Version);//zero based, includes created //no source has been set Assert.Throws <InvalidOperationException>(() => recovered.RaiseCorrelatedEvent()); ((ICorrelatedEventSource)recovered).Source = command2; recovered.RaiseCorrelatedEvent(); }
public void after_taking_events_new_source_may_be_applied() { var agg = new CorrelatedAggregate(); agg.ApplyNewSource(_command); agg.RaiseCorrelatedEvent(); var evt = agg.TakeEvents()[0] as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(evt); Assert.Equal(_command.CorrelationId, evt.CorrelationId); Assert.Equal(_command.MsgId, evt.SourceId); Assert.Throws <NullReferenceException>(() => agg.RaiseCorrelatedEvent()); Assert.Empty(agg.TakeEvents()); var otherRoot = CorrelatedMessage.NewRoot(); agg.ApplyNewSource(otherRoot); agg.RaiseCorrelatedEvent(); evt = agg.TakeEvents()[0] as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(evt); Assert.Equal(otherRoot.CorrelationId, evt.CorrelationId); Assert.Equal(otherRoot.MsgId, evt.SourceId); }
public void can_raise_correlated_events_from_constructor_source() { var agg = new CorrelatedAggregate(Guid.NewGuid(), _command); agg.RaiseCorrelatedEvent(); var events = agg.TakeEvents(); Assert.Collection(events, new Action <object>[] { e => { if (e is CorrelatedAggregate.Created created) { Assert.Equal(_command.CorrelationId, created.CorrelationId); Assert.Equal(_command.MsgId, created.CausationId); } else { throw new Exception("wrong event"); }; },
public void can_raise_correlated_events() { var agg = new CorrelatedAggregate(); agg.ApplyNewSource(_command); agg.RaiseCorrelatedEvent(); agg.RaiseCorrelatedEventByIds(); var events = agg.TakeEvents(); Assert.Equal(2, events.Length); var @event = events[0] as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(@event); Assert.Equal(_command.CorrelationId, @event.CorrelationId); Assert.Equal(_command.MsgId, @event.SourceId); @event = events[1] as CorrelatedAggregate.CorrelatedEvent; Assert.NotNull(@event); Assert.Equal(_command.CorrelationId, @event.CorrelationId); Assert.Equal(_command.MsgId, @event.SourceId); }