public void UpsertStockCommandHandler_EmptyDbUpsertOneObject_ObjectSaved()
        {
            //given
            var stocks = new[]
            {
                new Stock {
                    Name = "test1", Balance = new Balance {
                        Value = 12.45m
                    }
                }
            };

            var repository = LiteDbHelper.CreateMemoryDb();
            var handler    = new UpsertStocksCommandHandler(repository);
            var command    = new UpsertStocksCommand(stocks);

            //when
            handler.Execute(command);

            //then
            var orderedStocksInDatabase = repository.Database.Query <Stock>().OrderBy(x => x.Id).ToArray();

            Assert.Equal(stocks.OrderBy(x => x.Id), orderedStocksInDatabase);
            Assert.Equal(stocks[0].Balance, orderedStocksInDatabase[0].Balance);
            Assert.Equal(stocks[0].Balance.Value, orderedStocksInDatabase[0].Balance.Value);
        }
        public void UpsertStockCommandHandler_EmptyDbUpsertList_ListSaved()
        {
            //given
            var stocks = new[]
            {
                new Stock {
                    Name = "test1"
                },
                new Stock {
                    Name = "test2"
                }
            };

            var repository = LiteDbHelper.CreateMemoryDb();
            var handler    = new UpsertStocksCommandHandler(repository);
            var command    = new UpsertStocksCommand(stocks);

            //when
            handler.Execute(command);

            //then
            var orderedStocksInDatabase = repository.Database.Query <Stock>().OrderBy(x => x.Id);

            Assert.Equal(stocks.OrderBy(x => x.Id), orderedStocksInDatabase);
        }
        public void UpsertStockCommandHandler_NullEmptyDb_EmptyDb()
        {
            //given
            var repository = LiteDbHelper.CreateMemoryDb();
            var handler    = new UpsertStocksCommandHandler(repository);
            var command    = new UpsertStocksCommand((Stock)null);

            //when
            handler.Execute(command);

            //then
            Assert.Empty(repository.Database.Query <Stock>());
        }
        public void UpsertStockCommandHandler_NotEmptyDbUpsertList_ListUpdated()
        {
            //given
            var stocks = new[]
            {
                new Stock {
                    Name = "test1"
                },
                new Stock {
                    Name = "test2"
                }
            };

            var repository = LiteDbHelper.CreateMemoryDb();
            var handler    = new UpsertStocksCommandHandler(repository);
            var command    = new UpsertStocksCommand(stocks);

            repository.Database.UpsertBulk(stocks);
            foreach (var stock in stocks)
            {
                stock.Name += " - updated";
            }

            //when
            handler.Execute(command);

            //then
            var orderedStocksInDatabase = repository.Database.Query <Stock>().OrderBy(x => x.Id).ToArray();

            stocks = stocks.OrderBy(x => x.Id).ToArray();
            Assert.Equal(stocks, orderedStocksInDatabase);
            for (int i = 0; i < stocks.Length; i++)
            {
                Assert.Equal(stocks[i].Name, orderedStocksInDatabase[i].Name);
            }
        }