public async Task LoadAggregateRootWithZeroEvents()
        {
            using (var rawContext = new Raw.RawContext(_rawOptions))
            {
                rawContext.Database.EnsureCreated();

                var bankje = new Raw.Bank {
                    Id = 7, Version = 12,
                };
                rawContext.Banks.Add(bankje);
                rawContext.SaveChanges();
            }

            var target = new BankRepository(_options);

            Bank bank = await target.FindAsync(7);

            Assert.AreEqual(7, bank.Id);
            Assert.AreEqual(0, bank.Version);
            // the 'Version' should reflect the number of events that have been handled, which is 0, in this test.
            // this should be equal the the 'Version' in the database, but in this test the latter was manually set to 12.
        }
        public async Task LoadAggregateRootWithTwoEvents()
        {
            using (var rawContext = new Raw.RawContext(_rawOptions))
            {
                rawContext.Database.EnsureCreated();

                var events = new List <Raw.BankEvent> {
                    new Raw.BankEvent
                    {
                        Id        = 1, BankId = 7, Version = 2,
                        EventType = "DDD.Core.Application.Test.AccountOpened",
                        EventData = "{ 'AccountNumber':5, 'Owner':'Karina van Irak' }",
                    },
                    new Raw.BankEvent
                    {
                        Id        = 2, BankId = 7, Version = 2,
                        EventType = "DDD.Core.Application.Test.AccountOpened",
                        EventData = "{ 'AccountNumber':6, 'Owner':'Evert \\'t Reve' }",
                    },
                };
                var bankje = new Raw.Bank {
                    Id = 7, Version = 12, Events = events
                };

                rawContext.Banks.Add(bankje);
                rawContext.SaveChanges();
            }

            var target = new BankRepository(_options);

            Bank bank = await target.FindAsync(7);

            Assert.AreEqual(7, bank.Id);
            Assert.AreEqual(2, bank.Version);
            Assert.AreEqual(2, bank.HandleAccountOpenedCallCount);
            Assert.AreEqual(6, bank.HandleAccountOpenedArgument.AccountNumber);
            Assert.AreEqual("Evert 't Reve", bank.HandleAccountOpenedArgument.Owner);
        }
Ejemplo n.º 3
0
        public async Task SaveAggregateWithTwoEvents()
        {
            Bank bank = new Bank(43);

            bank.OpenAccount(new OpenAccount("Karina van Irak"));
            bank.OpenAccount(new OpenAccount("Evert 't Reve"));
            Assert.AreEqual(2, bank.Events.Count());
            var target = new BankRepository(_options);

            await target.SaveAsync(bank);

            using (var rawContext = new Raw.RawContext(_rawOptions))
            {
                var bankFromDb = rawContext.Banks.Include(b => b.Events).Single(b => b.Id == 43);

                Assert.AreEqual(2, bankFromDb.Version);
                Assert.AreEqual(2, bankFromDb.Events.Count());
                Assert.IsTrue(bankFromDb.Events.Any(evt =>
                                                    evt.EventData.Contains("Karina van Irak")));
                Assert.IsTrue(bankFromDb.Events.Any(evt =>
                                                    evt.EventData.Contains("Evert 't Reve")));
            }
        }