public void HasBeenApplied()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var stock = new Stock(Guid.NewGuid());

            stock.List("ABC", "ABC Pty Ltd", new Date(1974, 01, 01), false, AssetCategory.AustralianStocks);

            var splitConsolidation = new SplitConsolidation(Guid.NewGuid(), stock, new Date(2020, 01, 01), "Test SplitConsolidation", 1, 2);

            var transaction = new UnitCountAdjustment()
            {
                Id            = Guid.NewGuid(),
                Date          = new Date(2020, 02, 01),
                Stock         = stock,
                Comment       = "Test Unit Count Adjustment",
                OriginalUnits = 1,
                NewUnits      = 2
            };
            var transactions = mockRepository.Create <IPortfolioTransactionList>();

            transactions.Setup(x => x.ForHolding(stock.Id, splitConsolidation.Date)).Returns(new IPortfolioTransaction[] { transaction });

            var result = splitConsolidation.HasBeenApplied(transactions.Object);

            result.Should().BeTrue();

            mockRepository.Verify();
        }
Example #2
0
        public void DeserializeUnitCountAdjustment()
        {
            var serializer = new RestClientSerializer();

            var transactionId = Guid.NewGuid();
            var stockId       = Guid.NewGuid();

            var json = "{\"id\":\"" + transactionId + "\","
                       + "\"stock\":\"" + stockId + "\","
                       + "\"type\":\"unitcountadjustment\","
                       + "\"transactionDate\":\"2000-01-10\","
                       + "\"comment\":\"comment\","
                       + "\"description\":\"description\","
                       + "\"originalUnits\":1,"
                       + "\"newUnits\":2}";

            var transaction = serializer.Deserialize <Transaction>(json);

            var expected = new UnitCountAdjustment()
            {
                Id              = transactionId,
                Stock           = stockId,
                TransactionDate = new Date(2000, 01, 10),
                Comment         = "comment",
                Description     = "description",
                OriginalUnits   = 1,
                NewUnits        = 2
            };

            transaction.Should().BeEquivalentTo(expected);
        }
Example #3
0
        public void NoSharesOwned()
        {
            var stock = new Stock(Guid.NewGuid());

            stock.List("ABC", "ABC Pty Ltd", new Date(1974, 01, 01), false, AssetCategory.AustralianStocks);

            var transaction = new UnitCountAdjustment()
            {
                Id            = Guid.NewGuid(),
                Date          = new Date(2020, 02, 01),
                Stock         = stock,
                Comment       = "Test Stock Split",
                OriginalUnits = 2,
                NewUnits      = 3
            };

            var mockRepository = new MockRepository(MockBehavior.Strict);

            var holding = mockRepository.Create <IHolding>();

            holding.Setup(x => x.IsEffectiveAt(new Date(2020, 02, 01))).Returns(false);

            var cashAccount = mockRepository.Create <ICashAccount>();

            var handler = new UnitCountAdjustmentHandler();

            Action a = () => handler.Apply(transaction, holding.Object, cashAccount.Object);

            a.Should().Throw <NoSharesOwnedException>();

            mockRepository.Verify();
        }
Example #4
0
        public override IEnumerable <IPortfolioTransaction> GetTransactionList(IReadOnlyHolding holding, IStockResolver stockResolver)
        {
            var transactions = new List <IPortfolioTransaction>();

            var holdingProperties = holding.Properties[Date];

            if (holdingProperties.Units == 0)
            {
                return(transactions);
            }

            var dividendRules = Stock.DividendRules[Date];

            var returnOfCapital = new UnitCountAdjustment()
            {
                Id            = Guid.NewGuid(),
                Date          = Date,
                Stock         = Stock,
                NewUnits      = NewUnits,
                OriginalUnits = OriginalUnits,
                Comment       = Description
            };

            transactions.Add(returnOfCapital);

            return(transactions);
        }
        protected override void CopyFieldsToTransaction()
        {
            if (_Transaction == null)
            {
                _Transaction = new UnitCountAdjustment();
            }

            base.CopyFieldsToTransaction();

            var unitCountAdjustment = (UnitCountAdjustment)_Transaction;

            unitCountAdjustment.TransactionDate = RecordDate;
            unitCountAdjustment.OriginalUnits   = OriginalUnits;
            unitCountAdjustment.NewUnits        = NewUnits;
        }
Example #6
0
        public void MultipleParcelsOwned()
        {
            var stock = new Stock(Guid.NewGuid());

            stock.List("ABC", "ABC Pty Ltd", new Date(1974, 01, 01), false, AssetCategory.AustralianStocks);

            var transaction = new UnitCountAdjustment()
            {
                Id            = Guid.NewGuid(),
                Date          = new Date(2020, 02, 01),
                Stock         = stock,
                Comment       = "Test Stock Split",
                OriginalUnits = 2,
                NewUnits      = 3
            };

            var mockRepository = new MockRepository(MockBehavior.Strict);

            var parcel1 = mockRepository.Create <IParcel>();

            parcel1.Setup(x => x.Properties[new Date(2020, 02, 01)]).Returns(new ParcelProperties(100, 1000.00m, 1000.00m));
            parcel1.Setup(x => x.Change(new Date(2020, 02, 01), 150, 0.00m, 0.00m, transaction)).Verifiable();
            var parcel2 = mockRepository.Create <IParcel>();

            parcel2.Setup(x => x.Properties[new Date(2020, 02, 01)]).Returns(new ParcelProperties(50, 500.00m, 500.00m));
            parcel2.Setup(x => x.Change(new Date(2020, 02, 01), 75, 0.00m, 0.00m, transaction)).Verifiable();
            var parcel3 = mockRepository.Create <IParcel>();

            parcel3.Setup(x => x.Properties[new Date(2020, 02, 01)]).Returns(new ParcelProperties(200, 1000.00m, 1000.00m));
            parcel3.Setup(x => x.Change(new Date(2020, 02, 01), 300, 0.00m, 0.00m, transaction)).Verifiable();

            var holding = mockRepository.Create <IHolding>();

            holding.Setup(x => x.IsEffectiveAt(new Date(2020, 02, 01))).Returns(true);
            holding.Setup(x => x.Parcels(new Date(2020, 02, 01))).Returns(new IParcel[] { parcel1.Object, parcel2.Object, parcel3.Object });

            var cashAccount = mockRepository.Create <ICashAccount>();

            var handler = new UnitCountAdjustmentHandler();

            handler.Apply(transaction, holding.Object, cashAccount.Object);

            mockRepository.Verify();
        }
        public void AdjustUnitCount()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var stock = new Stock(Guid.NewGuid());

            stock.List("ABC", "ABC Pty Ltd", new Date(1974, 01, 01), false, AssetCategory.AustralianStocks);

            var stockResolver = mockRepository.Create <IStockResolver>();

            stockResolver.Setup(x => x.GetStock(stock.Id)).Returns(stock);

            var handler = mockRepository.Create <ITransactionHandler>();
            UnitCountAdjustment transaction = null;

            handler.Setup(x => x.Apply(It.IsAny <IPortfolioTransaction>(), It.IsAny <IHolding>(), It.IsAny <ICashAccount>()))
            .Callback <IPortfolioTransaction, IHolding, ICashAccount>((t, h, c) => transaction = (UnitCountAdjustment)t)
            .Verifiable();

            var transactionHandlers = mockRepository.Create <IServiceFactory <ITransactionHandler> >();

            transactionHandlers.Setup(x => x.GetService <UnitCountAdjustment>()).Returns(handler.Object);
            transactionHandlers.Setup(x => x.GetService <OpeningBalance>()).Returns(new OpeningBalanceHandler());

            var portfolio = new Portfolio(Guid.NewGuid(), stockResolver.Object, transactionHandlers.Object);

            portfolio.AddOpeningBalance(stock.Id, new Date(1999, 01, 01), new Date(1999, 01, 01), 100, 100.00m, "", Guid.Empty);

            var transactionId = Guid.NewGuid();

            portfolio.AdjustUnitCount(stock.Id, new Date(2000, 01, 01), 1, 2, "Comment", transactionId);

            transaction.Should().BeEquivalentTo(new
            {
                Id            = transaction.Id,
                Date          = new Date(2000, 01, 01),
                Stock         = stock,
                Comment       = "Comment",
                OriginalUnits = 1,
                NewUnits      = 2
            });

            mockRepository.Verify();
        }
        public void Apply(UnitCountAdjustmentOccurredEvent @event)
        {
            var holding = _Holdings[@event.Stock];

            if (holding == null)
            {
                throw new NoSharesOwnedException("No shares owned");
            }

            var unitCountAdjustment = new UnitCountAdjustment
            {
                Id            = @event.TransactionId,
                Date          = @event.Date,
                Stock         = holding.Stock,
                Comment       = @event.Comment,
                OriginalUnits = @event.OriginalUnitCount,
                NewUnits      = @event.NewUnitCount
            };

            var handler = _TransactionHandlers.GetService <UnitCountAdjustment>();

            handler.Apply(unitCountAdjustment, holding, _CashAccount);
            _Transactions.Add(unitCountAdjustment);
        }
Example #9
0
        public void ApplyUnitCountAdjustment()
        {
            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 UnitCountAdjustment()
            {
                Id              = Guid.NewGuid(),
                Stock           = PortfolioTestCreator.Stock_ARG.Id,
                TransactionDate = new Date(2007, 01, 01),
                Comment         = "",
                OriginalUnits   = 1,
                NewUnits        = 2
            };
            var result = service.ApplyTransaction(transaction);

            result.Should().HaveOkStatus();
            events.Should().BeEquivalentTo(new[]
            {
                new UnitCountAdjustmentOccurredEvent(portfolio.Id, 1, transaction.Id, new Date(2007, 01, 01), PortfolioTestCreator.Stock_ARG.Id, "")
                {
                    OriginalUnitCount = 1,
                    NewUnitCount      = 2
                }
            });

            mockRepository.Verify();
        }
 public UnitCountAdjustmentViewModel(UnitCountAdjustment unitCostAdjustment, RestClient restClient)
     : base(unitCostAdjustment, "Unit Count Adjustment", TransactionStockSelection.Holdings, restClient)
 {
 }