Beispiel #1
0
        public void ApplyCostBaseAdjustment()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var events     = new List <Event>();
            var repository = mockRepository.Create <IRepository <Portfolio> >();

            repository.Setup(x => x.Update(It.IsAny <Portfolio>())).Callback <Portfolio>(x => events.AddRange(x.FetchEvents()));

            var service = new PortfolioTransactionService(portfolio, repository.Object);

            var transaction = new CostBaseAdjustment()
            {
                Id              = Guid.NewGuid(),
                Stock           = PortfolioTestCreator.Stock_ARG.Id,
                TransactionDate = new Date(2007, 01, 01),
                Comment         = "",
                Percentage      = 0.50m
            };
            var result = service.ApplyTransaction(transaction);

            result.Should().HaveOkStatus();
            events.Should().BeEquivalentTo(new[]
            {
                new CostBaseAdjustmentOccurredEvent(portfolio.Id, 1, transaction.Id, new Date(2007, 01, 01), PortfolioTestCreator.Stock_ARG.Id, "")
                {
                    Percentage = 0.50m
                }
            });

            mockRepository.Verify();
        }
Beispiel #2
0
        public void GetTransactionNotFound()
        {
            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioTransactionService(portfolio, null);

            var result = service.GetTransaction(Guid.NewGuid());

            result.Should().HaveNotFoundStatus();
        }
Beispiel #3
0
        public void PortfolioNotFound()
        {
            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 12, 31));

            var service = new PortfolioTransactionService(null, null);

            var result = service.GetTransactions(dateRange);

            result.Should().HaveNotFoundStatus();
        }
Beispiel #4
0
        public void GetTransactionsForStockNotOwned()
        {
            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioTransactionService(portfolio, null);

            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 12, 31));
            var result    = service.GetTransactions(Guid.NewGuid(), dateRange);

            result.Result.Transactions.Should().BeEmpty();
        }
Beispiel #5
0
        public void ApplyIncomeReceived()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var events     = new List <Event>();
            var repository = mockRepository.Create <IRepository <Portfolio> >();

            repository.Setup(x => x.Update(It.IsAny <Portfolio>())).Callback <Portfolio>(x => events.AddRange(x.FetchEvents()));

            var service = new PortfolioTransactionService(portfolio, repository.Object);

            var transaction = new IncomeReceived()
            {
                Id                    = Guid.NewGuid(),
                Stock                 = PortfolioTestCreator.Stock_ARG.Id,
                TransactionDate       = new Date(2007, 01, 01),
                Comment               = "",
                RecordDate            = new Date(2006, 12, 27),
                FrankedAmount         = 1.00m,
                UnfrankedAmount       = 2.00m,
                FrankingCredits       = 3.00m,
                Interest              = 4.00m,
                TaxDeferred           = 5.00m,
                CreateCashTransaction = true,
                DrpCashBalance        = 2.50m
            };
            var result = service.ApplyTransaction(transaction);

            result.Should().HaveOkStatus();
            events.Should().BeEquivalentTo(new[]
            {
                new IncomeOccurredEvent(portfolio.Id, 1, transaction.Id, new Date(2007, 01, 01), PortfolioTestCreator.Stock_ARG.Id, "")
                {
                    RecordDate            = new Date(2006, 12, 27),
                    FrankedAmount         = 1.00m,
                    UnfrankedAmount       = 2.00m,
                    FrankingCredits       = 3.00m,
                    Interest              = 4.00m,
                    TaxDeferred           = 5.00m,
                    CreateCashTransaction = true,
                    DrpCashBalance        = 2.50m
                }
            });

            mockRepository.Verify();
        }
Beispiel #6
0
        public void GetTransaction()
        {
            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioTransactionService(portfolio, null);

            var id     = portfolio.Transactions[1].Id;
            var result = service.GetTransaction(id);

            result.Result.Should().BeEquivalentTo(new
            {
                Stock           = PortfolioTestCreator.Stock_ARG.Id,
                Id              = id,
                Type            = TransactionType.Aquisition,
                TransactionDate = new Date(2000, 01, 01),
                Description     = "Aquired 100 shares @ $1.00"
            });
        }
Beispiel #7
0
        public void ApplyDisposal()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var events     = new List <Event>();
            var repository = mockRepository.Create <IRepository <Portfolio> >();

            repository.Setup(x => x.Update(It.IsAny <Portfolio>())).Callback <Portfolio>(x => events.AddRange(x.FetchEvents()));

            var service = new PortfolioTransactionService(portfolio, repository.Object);

            var transaction = new Disposal()
            {
                Id                    = Guid.NewGuid(),
                Stock                 = PortfolioTestCreator.Stock_ARG.Id,
                TransactionDate       = new Date(2007, 01, 01),
                Comment               = "",
                Units                 = 50,
                AveragePrice          = 0.98m,
                TransactionCosts      = 1.00m,
                CgtMethod             = CgtCalculationMethod.LastInFirstOut,
                CreateCashTransaction = true
            };
            var result = service.ApplyTransaction(transaction);

            result.Should().HaveOkStatus();
            events.Should().BeEquivalentTo(new[]
            {
                new DisposalOccurredEvent(portfolio.Id, 1, transaction.Id, new Date(2007, 01, 01), PortfolioTestCreator.Stock_ARG.Id, "")
                {
                    Units                 = 50,
                    AveragePrice          = 0.98m,
                    TransactionCosts      = 1.00m,
                    CgtMethod             = Domain.Utils.CgtCalculationMethod.LastInFirstOut,
                    CreateCashTransaction = true
                }
            });

            mockRepository.Verify();
        }
Beispiel #8
0
        public void GetTransactionsForStock()
        {
            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var service = new PortfolioTransactionService(portfolio, null);

            var dateRange = new DateRange(new Date(2000, 01, 01), new Date(2000, 12, 31));
            var result    = service.GetTransactions(PortfolioTestCreator.Stock_WAM.Id, dateRange);

            result.Result.Transactions.Should().BeEquivalentTo(new[]
            {
                new RestApi.Portfolios.TransactionsResponse.TransactionItem()
                {
                    Id              = portfolio.Transactions[2].Id,
                    Stock           = PortfolioTestCreator.Stock_WAM,
                    TransactionDate = new Date(2000, 01, 01),
                    Description     = "Aquired 200 shares @ $1.20",
                    Comment         = ""
                }
            });
        }
Beispiel #9
0
        public void ApplyReturnOfCapital()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var events     = new List <Event>();
            var repository = mockRepository.Create <IRepository <Portfolio> >();

            repository.Setup(x => x.Update(It.IsAny <Portfolio>())).Callback <Portfolio>(x => events.AddRange(x.FetchEvents()));

            var service = new PortfolioTransactionService(portfolio, repository.Object);

            var transaction = new ReturnOfCapital()
            {
                Id                    = Guid.NewGuid(),
                Stock                 = PortfolioTestCreator.Stock_ARG.Id,
                TransactionDate       = new Date(2007, 01, 01),
                Comment               = "",
                Amount                = 5.00m,
                RecordDate            = new Date(2006, 12, 01),
                CreateCashTransaction = true
            };
            var result = service.ApplyTransaction(transaction);

            result.Should().HaveOkStatus();
            events.Should().BeEquivalentTo(new[]
            {
                new ReturnOfCapitalOccurredEvent(portfolio.Id, 1, transaction.Id, new Date(2007, 01, 01), PortfolioTestCreator.Stock_ARG.Id, "")
                {
                    Amount                = 5.00m,
                    RecordDate            = new Date(2006, 12, 01),
                    CreateCashTransaction = true
                }
            });

            mockRepository.Verify();
        }
Beispiel #10
0
        public void ApplyCashTransaction()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var portfolio = PortfolioTestCreator.CreateDefaultPortfolio();

            var events     = new List <Event>();
            var repository = mockRepository.Create <IRepository <Portfolio> >();

            repository.Setup(x => x.Update(It.IsAny <Portfolio>())).Callback <Portfolio>(x => events.AddRange(x.FetchEvents()));

            var service = new PortfolioTransactionService(portfolio, repository.Object);

            var transaction = new CashTransaction()
            {
                Id                  = Guid.NewGuid(),
                Stock               = Guid.Empty,
                TransactionDate     = new Date(2007, 01, 01),
                Comment             = "",
                CashTransactionType = CashTransactionType.Interest,
                Amount              = 1.98m
            };
            var result = service.ApplyTransaction(transaction);

            result.Should().HaveOkStatus();
            events.Should().BeEquivalentTo(new[]
            {
                new CashTransactionOccurredEvent(portfolio.Id, 1, transaction.Id, new Date(2007, 01, 01), "")
                {
                    CashTransactionType = Domain.Transactions.BankAccountTransactionType.Interest,
                    Amount = 1.98m,
                }
            });

            mockRepository.Verify();
        }