public async Task Get_should_return_aggregate_loaded_from_events_and_snapshot([Frozen] Mock <ISnapshotStorageProvider> snapshotProvider, [Frozen] Mock <IEventStorageProvider> eventProvider, List <Transaction> transactions, Repository repo, Guid aggregateId) { var snapshot = new BankAccountSnapshot(Guid.NewGuid(), aggregateId, 3, "Joe Bloggs", 10, transactions); snapshotProvider.Setup(x => x.GetSnapshotAsync( It.Is <Type>(t => t == typeof(BankAccount)), It.Is <Guid>(g => g == aggregateId))) .Returns(Task.FromResult <Snapshot>(snapshot)); eventProvider.Setup(x => x.GetEventsAsync( It.Is <Type>(t => t == typeof(BankAccount)), It.Is <Guid>(g => g == aggregateId), It.Is <int>(s => s == snapshot.Version + 1), It.Is <int>(c => c == int.MaxValue))) .Returns(Task.FromResult <IEnumerable <IEvent> >(new List <IEvent> { new FundsDepositedEvent(aggregateId, 1, Guid.NewGuid(), 10), new FundsWithdrawalEvent(aggregateId, 2, Guid.NewGuid(), 5) })); var actual = await repo.GetByIdAsync <BankAccount>(aggregateId) .ConfigureAwait(false); actual.Should().NotBeNull(); actual.Id.Should().Be(aggregateId); actual.CurrentBalance.Should().Be(15); }
public void Initialize_AggregateId() { var guid = Guid.NewGuid(); var snapshot = new BankAccountSnapshot(1, 0, guid); Assert.AreEqual(snapshot.AggregateId, guid); }
public void Throw_InvalidOperationException_If_AggregateId_Is_Default_Guid() { Assert.Throws <InvalidOperationException>(() => { var snapshot = new BankAccountSnapshot(1, 0, Guid.Empty); }); }
public void Throw_InvalidOperationException_If_Version_Is_Less_Or_Equal_To_Zero() { Assert.Throws <InvalidOperationException>(() => { var snapshot = new BankAccountSnapshot(0, 0, Guid.NewGuid()); }); Assert.Throws <InvalidOperationException>(() => { var snapshot = new BankAccountSnapshot(-4, 0, Guid.NewGuid()); }); }
public async Task Get_should_get_all_events_after_snapshot_if_one_is_returned([Frozen] Mock <ISnapshotStorageProvider> snapshotProvider, [Frozen] Mock <IEventStorageProvider> eventProvider, Repository repo, BankAccountSnapshot snapshot, Guid aggregateId) { snapshotProvider.Setup(x => x.GetSnapshotAsync( It.Is <Type>(t => t == typeof(BankAccount)), It.Is <Guid>(g => g == aggregateId))) .Returns(Task.FromResult <Snapshot>(snapshot)); await repo.GetByIdAsync <BankAccount>(aggregateId) .ConfigureAwait(false); eventProvider.Verify(x => x.GetEventsAsync( It.Is <Type>(t => t == typeof(BankAccount)), It.Is <Guid>(g => g == aggregateId), It.Is <int>(s => s == snapshot.Version + 1), It.Is <int>(c => c == int.MaxValue)), Times.Once); }
public void SaveSnapshot(BankAccountSnapshot snapshot, BankAccount bankAccount) { var streamName = StreamFor(bankAccount.Id); _eventStore.AddSnapshot(streamName, snapshot); }
public void Initialize_Balance() { var snapshot = new BankAccountSnapshot(1, 0, Guid.NewGuid()); Assert.AreEqual(snapshot.Balance, 0); }
public void Initialize_Version() { var snapshot = new BankAccountSnapshot(1, 0, Guid.NewGuid()); Assert.AreEqual(snapshot.Version, 1); }
public void Initialize_Identity() { var snapshot = new BankAccountSnapshot(1, 0, Guid.NewGuid()); Assert.AreNotEqual(default(Guid), snapshot.Id); }