public void OnCreateUser_Should_Emit_UserCreatedEvent() { Given(aggregate => { }); var fullname = Fullname.Create(Faker.Name.FirstName(), Faker.Name.LastName()); var email = Email.Create($"{Faker.Random.Word()}@example.com"); var password = Password.Create(Faker.Random.Word()); var start = DateTimeUtc.Now(); When(aggregate => { aggregate.Create( fullname, email, password); }); var end = DateTimeUtc.Now(); Then(aggregate => { aggregate.Fullname.Should().Be(fullname); aggregate.Email.Should().Be(email); aggregate.Password.Should().Be(password); }); Then <UserCreatedEvent>((aggregate, @event) => { @event.Firstname.Should().Be(fullname.Firstname); @event.Lastname.Should().Be(fullname.Lastname); @event.Email.Should().Be(email.ToString()); @event.Password.Should().Be(password.ToString()); @event.CreatedOn.Should().NotBe(default);
protected void Emit(IDomainEvent @event) { if (_unCommittedEvents.Any(e => e.EventId == @event.EventId)) { return; } @event.SetProperty(nameof(@event.CreatedOn), DateTimeUtc.Now().Value); Apply(@event); _unCommittedEvents.Add(@event); }