public void GetValueWeekly()
        {
            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 01, 17));

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioValueService(portfolio, PortfolioTestCreator.TradingCalendar);

            var result = service.GetValue(dateRange, ValueFrequency.Week);

            result.Result.Should().BeEquivalentTo(new
            {
                Values = new[]
                {
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 02), Price = 9960.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 09), Price = 9963.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 16), Price = 9975.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 17), Price = 9982.10m
                    }
                }
            });
        }
        public void GetValueForStockWeekly()
        {
            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 01, 17));

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioValueService(portfolio, PortfolioTestCreator.TradingCalendar);

            var result = service.GetValue(PortfolioTestCreator.Stock_ARG.Id, dateRange, ValueFrequency.Week);

            result.Result.Should().BeEquivalentTo(new
            {
                Values = new[]
                {
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 02), Price = 100.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 09), Price = 101.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 16), Price = 107.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 17), Price = 108.00m
                    }
                }
            });
        }
        public void PortfolioNotFound()
        {
            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 12, 31));

            var service = new PortfolioValueService(null, PortfolioTestCreator.TradingCalendar);

            var result = service.GetValue(dateRange, ValueFrequency.Day);

            result.Should().HaveNotFoundStatus();
        }
        public void GetValueForStockNotOwned()
        {
            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 12, 31));

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioValueService(portfolio, PortfolioTestCreator.TradingCalendar);

            var result = service.GetValue(Guid.NewGuid(), dateRange, ValueFrequency.Day);

            result.Should().HaveNotFoundStatus();
        }
        public void GetValueForStockMonthly()
        {
            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 05, 25));

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioValueService(portfolio, PortfolioTestCreator.TradingCalendar);

            var result = service.GetValue(PortfolioTestCreator.Stock_ARG.Id, dateRange, ValueFrequency.Month);

            result.Result.Should().BeEquivalentTo(new
            {
                Values = new[]
                {
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 03), Price = 101.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 31), Price = 109.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 02, 29), Price = 110.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 03, 31), Price = 107.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 04, 30), Price = 107.00m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 05, 25), Price = 103.00m
                    }
                }
            });
        }
        public void GetValueMonthly()
        {
            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 05, 25));

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioValueService(portfolio, PortfolioTestCreator.TradingCalendar);

            var result = service.GetValue(dateRange, ValueFrequency.Month);

            result.Result.Should().BeEquivalentTo(new
            {
                Values = new[]
                {
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 03), Price = 9963.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 01, 31), Price = 9985.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 02, 29), Price = 9988.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 03, 31), Price = 9981.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 04, 30), Price = 9981.10m
                    },
                    new ClosingPrice()
                    {
                        Date = new Date(2000, 05, 25), Price = 9969.10m
                    }
                }
            });
        }