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 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); }
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); }