private SimpleUnrealisedGainsResponse GetCapitalGains(IEnumerable <IReadOnlyHolding> holdings, Date date) { var response = new SimpleUnrealisedGainsResponse(); foreach (var holding in holdings) { foreach (var parcel in holding.Parcels(date)) { var properties = parcel.Properties[date]; var value = properties.Units * holding.Stock.GetPrice(date); var capitalGain = value - properties.CostBase; var discountMethod = CgtUtils.CgtMethodForParcel(parcel.AquisitionDate, date); var discoutedGain = (discountMethod == Domain.Portfolios.CgtMethod.Discount) ? CgtUtils.DiscountedCgt(capitalGain, Domain.Portfolios.CgtMethod.Discount) : capitalGain; var unrealisedGain = new SimpleUnrealisedGainsItem() { Stock = holding.Stock.ToSummaryResponse(date), AquisitionDate = parcel.AquisitionDate, Units = properties.Units, CostBase = properties.CostBase, MarketValue = value, CapitalGain = capitalGain, DiscoutedGain = discoutedGain, DiscountMethod = discountMethod.ToResponse() }; response.UnrealisedGains.Add(unrealisedGain); } } return(response); }
public void GetCapitalGainsForDate() { var mockRepository = new MockRepository(MockBehavior.Strict); var response = new SimpleUnrealisedGainsResponse(); var service = mockRepository.Create <IPortfolioCapitalGainsService>(); service.Setup(x => x.GetCapitalGains(new Date(2000, 01, 01))).Returns(ServiceResult <SimpleUnrealisedGainsResponse> .Ok(response)).Verifiable(); var controller = new PortfolioController(); var result = controller.GetCapitalGains(service.Object, new DateTime(2000, 01, 01)); result.Result.Should().BeOkObjectResult().Value.Should().Be(response); mockRepository.VerifyAll(); }
public void GetCapitalGainsNoDate() { var mockRepository = new MockRepository(MockBehavior.Strict); var stockId = Guid.NewGuid(); var response = new SimpleUnrealisedGainsResponse(); var service = mockRepository.Create <IPortfolioCapitalGainsService>(); service.Setup(x => x.GetCapitalGains(stockId, Date.Today)).Returns(ServiceResult <SimpleUnrealisedGainsResponse> .Ok(response)).Verifiable(); var controller = new HoldingController(); var result = controller.GetCapitalGains(service.Object, stockId, null); result.Result.Should().BeOkObjectResult().Value.Should().Be(response); mockRepository.VerifyAll(); }
public async Task GetCapitalGains() { var mockRepository = new MockRepository(MockBehavior.Strict); var portfolioId = Guid.NewGuid(); var date = new Date(2001, 02, 03); var response = new SimpleUnrealisedGainsResponse(); var messageHandler = mockRepository.Create <IRestClientMessageHandler>(); messageHandler.SetupProperty(x => x.Portfolio, portfolioId); messageHandler.Setup(x => x.GetAsync <SimpleUnrealisedGainsResponse>(It.Is <string>(x => x == "portfolio/" + portfolioId + "/capitalgains?date=2001-02-03"))) .Returns(Task <SimpleUnrealisedGainsResponse> .FromResult(response)) .Verifiable(); var resource = new PortfolioResource(messageHandler.Object); var result = await resource.GetCapitalGains(date); result.Should().Be(response); mockRepository.Verify(); }