public void GetCGTLiabilityBothDates() { var mockRepository = new MockRepository(MockBehavior.Strict); var response = new CgtLiabilityResponse(); var service = mockRepository.Create <IPortfolioCgtLiabilityService>(); service.Setup(x => x.GetCGTLiability(new DateRange(new Date(2000, 01, 01), new Date(2000, 12, 31)))).Returns(ServiceResult <CgtLiabilityResponse> .Ok(response)).Verifiable(); var controller = new PortfolioController(); var result = controller.GetCGTLiability(service.Object, new DateTime(2000, 01, 01), new DateTime(2000, 12, 31)); result.Result.Should().BeOkObjectResult().Value.Should().Be(response); mockRepository.VerifyAll(); }
public void GetCGTLiabilityNoDates() { var mockRepository = new MockRepository(MockBehavior.Strict); var response = new CgtLiabilityResponse(); var service = mockRepository.Create <IPortfolioCgtLiabilityService>(); service.Setup(x => x.GetCGTLiability(new DateRange(Date.Today.AddYears(-1).AddDays(1), Date.Today))).Returns(ServiceResult <CgtLiabilityResponse> .Ok(response)).Verifiable(); var controller = new PortfolioController(); var result = controller.GetCGTLiability(service.Object, null, null); result.Result.Should().BeOkObjectResult().Value.Should().Be(response); mockRepository.VerifyAll(); }
public async Task GetCGTLiability() { var mockRepository = new MockRepository(MockBehavior.Strict); var portfolioId = Guid.NewGuid(); var dateRange = new DateRange(new Date(2001, 02, 03), new Date(2008, 06, 30)); var response = new CgtLiabilityResponse(); var messageHandler = mockRepository.Create <IRestClientMessageHandler>(); messageHandler.SetupProperty(x => x.Portfolio, portfolioId); messageHandler.Setup(x => x.GetAsync <CgtLiabilityResponse>(It.Is <string>(x => x == "portfolio/" + portfolioId + "/cgtliability?fromdate=2001-02-03&todate=2008-06-30"))) .Returns(Task <CgtLiabilityResponse> .FromResult(response)) .Verifiable(); var resource = new PortfolioResource(messageHandler.Object); var result = await resource.GetCGTLiability(dateRange); result.Should().Be(response); mockRepository.Verify(); }
public ServiceResult <CgtLiabilityResponse> GetCGTLiability(DateRange dateRange) { if (_Portfolio == null) { return(ServiceResult <CgtLiabilityResponse> .NotFound()); } var response = new CgtLiabilityResponse(); // Get a list of all the cgt events for the year var cgtEvents = _Portfolio.CgtEvents.InDateRange(dateRange); foreach (var cgtEvent in cgtEvents) { var item = new CgtLiabilityResponse.CgtLiabilityEvent() { Stock = cgtEvent.Stock.ToSummaryResponse(cgtEvent.Date), EventDate = cgtEvent.Date, CostBase = cgtEvent.CostBase, AmountReceived = cgtEvent.AmountReceived, CapitalGain = cgtEvent.CapitalGain, Method = cgtEvent.CgtMethod.ToResponse() }; response.Events.Add(item); // Apportion capital gains if (cgtEvent.CapitalGain < 0) { response.CurrentYearCapitalLossesTotal += -cgtEvent.CapitalGain; } else if (cgtEvent.CgtMethod == Domain.Portfolios.CgtMethod.Discount) { response.CurrentYearCapitalGainsDiscounted += cgtEvent.CapitalGain; } else { response.CurrentYearCapitalGainsOther += cgtEvent.CapitalGain; } } response.CurrentYearCapitalGainsTotal = response.CurrentYearCapitalGainsOther + response.CurrentYearCapitalGainsDiscounted; if (response.CurrentYearCapitalGainsOther > response.CurrentYearCapitalLossesTotal) { response.CurrentYearCapitalLossesOther = response.CurrentYearCapitalLossesTotal; } else { response.CurrentYearCapitalLossesOther = response.CurrentYearCapitalGainsOther; } if (response.CurrentYearCapitalGainsOther > response.CurrentYearCapitalLossesTotal) { response.CurrentYearCapitalLossesDiscounted = 0.00m; } else { response.CurrentYearCapitalLossesDiscounted = response.CurrentYearCapitalLossesTotal - response.CurrentYearCapitalGainsOther; } response.GrossCapitalGainOther = response.CurrentYearCapitalGainsOther - response.CurrentYearCapitalLossesOther; response.GrossCapitalGainDiscounted = response.CurrentYearCapitalGainsDiscounted - response.CurrentYearCapitalLossesDiscounted; response.GrossCapitalGainTotal = response.GrossCapitalGainOther + response.GrossCapitalGainDiscounted; if (response.GrossCapitalGainDiscounted > 0) { response.Discount = (response.GrossCapitalGainDiscounted / 2).ToCurrency(RoundingRule.Round); } else { response.Discount = 0.00m; } response.NetCapitalGainOther = response.GrossCapitalGainOther; response.NetCapitalGainDiscounted = response.GrossCapitalGainDiscounted - response.Discount; response.NetCapitalGainTotal = response.NetCapitalGainOther + response.NetCapitalGainDiscounted; return(ServiceResult <CgtLiabilityResponse> .Ok(response)); }