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);
        }
Exemplo n.º 6
0
        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);
        }