public void InvestmentVehicleDataTableGatewayShouldPresistData()
        {
            var investmentVehicleDataTableGateway = new InvestmentVehicleDataTableGateway(_mutualFundPerformanceDatabaseSettings);

            investmentVehicleDataTableGateway.DeleteAll();

            var investmentVehicleId = Guid.NewGuid();
            var externalId          = Guid.NewGuid();

            investmentVehicleDataTableGateway.Insert(new []
            {
                new InvestmentVehicleDto()
                {
                    InvestmentVehicleId = investmentVehicleId,
                    Name       = "Foo",
                    ExternalId = externalId
                }
            });

            var investmentVehicleDtos = investmentVehicleDataTableGateway.GetAll();

            investmentVehicleDtos.Should().HaveCount(1);

            investmentVehicleDtos[0].InvestmentVehicleId.Should().Be(investmentVehicleId);
            investmentVehicleDtos[0].Name.Should().Be("Foo");
            investmentVehicleDtos[0].ExternalId.Should().Be(externalId);

            investmentVehicleDataTableGateway.DeleteAll();
        }
        public void PriceDataTableGatewayShouldPresistData()
        {
            var investmentVehicleDataTableGateway = new InvestmentVehicleDataTableGateway(_mutualFundPerformanceDatabaseSettings);
            var priceDataTableGateway             = new PriceDataTableGateway(_mutualFundPerformanceDatabaseSettings);

            priceDataTableGateway.DeleteAll();
            investmentVehicleDataTableGateway.DeleteAll();

            var investmentVehicleId = Guid.NewGuid();
            var externalId          = Guid.NewGuid();

            investmentVehicleDataTableGateway.Insert(new[]
            {
                new InvestmentVehicleDto()
                {
                    InvestmentVehicleId = investmentVehicleId,
                    Name       = "Foo",
                    ExternalId = externalId
                }
            });

            priceDataTableGateway.Insert(new []
            {
                new PriceDto()
                {
                    InvestmentVehicleId = investmentVehicleId,
                    CloseDate           = new DateTime(2010, 1, 1),
                    Price = 32.0m
                }
            });

            var priceDtos = priceDataTableGateway.GetAll();

            priceDtos.Should().HaveCount(1);
            priceDtos[0].InvestmentVehicleId.Should().Be(investmentVehicleId);
            priceDtos[0].CloseDate.Should().Be(new DateTime(2010, 1, 1));
            priceDtos[0].Price.Should().Be(32.0m);

            priceDataTableGateway.DeleteAll();
            investmentVehicleDataTableGateway.DeleteAll();
        }
        static void Main(string[] args)
        {
            var currentDate = DateTime.Now;

            var testDataPopulatorSettings = new TestDataPopulatorSettings();

            var mutualFundDataTableGateway        = new MutualFundDataTableGateway(testDataPopulatorSettings);
            var benchmarkDataTableGateway         = new BenchmarkDataTableGateway(testDataPopulatorSettings);
            var investmentVehicleDataTableGateway = new InvestmentVehicleDataTableGateway(testDataPopulatorSettings);
            var priceDataTableGateway             = new PriceDataTableGateway(testDataPopulatorSettings);

            priceDataTableGateway.DeleteAll();
            investmentVehicleDataTableGateway.DeleteAll();
            benchmarkDataTableGateway.DeleteAll();
            mutualFundDataTableGateway.DeleteAll();

            var mutualFundDtos        = new List <MutualFundDto>();
            var benchmarkDtos         = new List <BenchmarkDto>();
            var investmentVehicleDtos = new List <InvestmentVehicleDto>();
            var priceDtos             = new List <PriceDto>();

            var random = new Random(100);

            var fundCount = 10;

            for (int fundCounter = 0; fundCounter < fundCount; fundCounter++)
            {
                var mutualFundId = Guid.NewGuid();

                mutualFundDtos.Add(new MutualFundDto()
                {
                    MutualFundId = mutualFundId,
                    Name         = $"Mutual Fun {fundCounter}",
                    Symbol       = $"MF{fundCounter:000}",
                });

                var mutualFundInvestmentVehicleId = Guid.NewGuid();

                investmentVehicleDtos.Add(new InvestmentVehicleDto()
                {
                    InvestmentVehicleId = mutualFundInvestmentVehicleId,
                    ExternalId          = mutualFundId,
                    Name = $"Prices for Mutual Fund {fundCounter}"
                });

                priceDtos = AddPrices(currentDate, random, priceDtos, mutualFundInvestmentVehicleId, isFund: true);

                var benchmarkCount = 1;

                var multiBenchmarkRandom = random.Next(1, 10);

                if (multiBenchmarkRandom == 10)
                {
                    benchmarkCount = 3;
                }
                else if (multiBenchmarkRandom >= 8)
                {
                    benchmarkCount = 3;
                }

                for (int benchmarkCounter = 0; benchmarkCounter < benchmarkCount; benchmarkCounter++)
                {
                    benchmarkDtos.Add(new BenchmarkDto()
                    {
                        BenchmarkId  = Guid.NewGuid(),
                        MutualFundId = mutualFundId,
                        Name         = $"Benchmark {fundCounter} {benchmarkCounter}",
                        SortOrder    = benchmarkCounter
                    });

                    var benchmarkInvestmentVehicleId = Guid.NewGuid();

                    investmentVehicleDtos.Add(new InvestmentVehicleDto()
                    {
                        InvestmentVehicleId = benchmarkInvestmentVehicleId,
                        ExternalId          = mutualFundId,
                        Name = $"Prices for Benchmark {fundCounter} {benchmarkCounter}"
                    });

                    priceDtos = AddPrices(currentDate, random, priceDtos, benchmarkInvestmentVehicleId, isFund: false);
                }
            }

            Console.WriteLine("Inserting mutual funds.");
            mutualFundDataTableGateway.Insert(mutualFundDtos.ToArray());

            Console.WriteLine("Inserting benchmarks.");
            benchmarkDataTableGateway.Insert(benchmarkDtos.ToArray());

            Console.WriteLine("Inserting investment vehcles.");
            investmentVehicleDataTableGateway.Insert(investmentVehicleDtos.ToArray());

            Console.WriteLine("Inserting prices.");
            priceDataTableGateway.Insert(priceDtos.ToArray());
        }