Start() public method

public Start ( ) : void
return void
Esempio n. 1
0
 public void HoldingShouldBeCreatedWhenVentureStarts()
 {
     var venture = new Venture(new Name("Ventura"), new Amount(100), new Amount(1));
     var investor0 = new Investor(new Name("Investor0"),  new Amount(100));
     var investor1 = new Investor(new Name("Investor1"),  new Amount(100));
     venture.AddOffer(investor0, new Amount(50));
     venture.AddOffer(investor1, new Amount(50));
     venture.Start();
     Assert.Greater(venture.Holding.Investments.Count, 0);
 }
Esempio n. 2
0
 public void Holding_Should_Be_Created_When_Venture_Starts()
 {
     Venture venture = new Venture(new Name("Ventura"), new Amount(100), new Amount(1));
     Investor investor0 = new Investor(new Name("Investor0"), new GringottsDate(DateTime.Now), new Amount(100));
     Investor investor1 = new Investor(new Name("Investor1"), new GringottsDate(DateTime.Now), new Amount(100));
     venture.AddOffer(investor0, new Amount(50));
     venture.AddOffer(investor1, new Amount(50));
     venture.Start();
     Assert.Greater(venture.Holding.Investments.Count, 0);
 }
Esempio n. 3
0
 public void ShouldCreateTwoVenturesOnSplit()
 {
     var venture = new Venture(new Name("venture-name"), new Amount(100), new Amount(10));
     var firstVentureName = new Name("new-venture-1");
     var secondVentureName = new Name("new-venture-2");
     var terms = new TermsOfSplit(new Percentage(0.8f), firstVentureName, secondVentureName);
     venture.AddOffer(new Investor(new Name("testName"), new Amount(1000)), new Amount(100));
     venture.Start();
     var ventures = venture.Split(terms);
     Assert.AreEqual(2, ventures.Count());
 }
Esempio n. 4
0
 public void ShouldCreateVenturesWithPassedNames()
 {
     var venture = new Venture(new Name("venture-name"), new Amount(100), new Amount(10));
     var firstVentureName = new Name("new-venture-1");
     var secondVentureName = new Name("new-venture-2");
     var terms = new TermsOfSplit(new Percentage(0.8f), firstVentureName, secondVentureName);
     venture.AddOffer(new Investor(new Name("testName"), new Amount(1000)), new Amount(100));
     venture.Start();
     var ventures = venture.Split(terms);
     Assert.AreEqual(firstVentureName.GetValue(), ventures.First().Name);
     Assert.AreEqual(secondVentureName.GetValue(), ventures.Last().Name);
 }
Esempio n. 5
0
        public void ShouldCloseTheVentureWhenAVentureSplits()
        {
            var outlay = new Amount(40);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var investor0 = new Investor(new Name("Investor0"), new Amount(100));
            venture.AddOffer(investor0, new Amount(50));
            venture.Start();
            var firstVentureName = new Name("new-venture-1");
            var secondVentureName = new Name("new-venture-2");
            var percentage = new Percentage(0.2f);

            var terms = new TermsOfSplit(percentage, firstVentureName, secondVentureName);
            venture.Split(terms);

            Assert.IsTrue(venture.IsClosed());
        }
Esempio n. 6
0
        public void ShouldCreateABalanceEventWhenVentureBankruptcyIsNotified()
        {
            var investor = new Investor(new Name("Inverstor1"), new Amount(1100));
            var venture = new Venture(new Name("Hacker's Venture"), new Amount(500), new Amount(500));
            Offer offer = venture.AddOffer(investor, new Amount(500));
            Investment investment = offer.ToInvestment();

            venture.Start();

            investor.NotifyVentureBankruptcy(investment);

            BalanceHistory history = investor.GetBalanceHistory();
            String offerEvent = String.Format(BalanceEvent.VENTURE_BANKRUPT, "Hacker's Venture");

            BalanceEvent expectedBalanceEvent = new BalanceEvent(offerEvent, new Amount(600));

            Assert.Contains(expectedBalanceEvent, history.GetEvents());
        }
Esempio n. 7
0
 public void ShouldNotTakeMoreInvestmentThanOutlay()
 {
     var outlay = new Amount(40);
     var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
     var investor0 = new Investor(new Name("Investor0"),  new Amount(100));
     venture.AddOffer(investor0, new Amount(50));
     venture.Start();
     // TODO: make aggregation in venture
     Assert.AreEqual(outlay, venture.Holding.Investments.Aggregate(new Amount(0), (sum, inv) => sum + inv.Value));
 }
Esempio n. 8
0
        public void ShouldUpdateThePortfolioOfTheInvestorWhenVentureCloses()
        {
            var outlay = new Amount(50);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var investor0 = new Investor(new Name("Investor0"), new Amount(100));
            venture.AddOffer(investor0, new Amount(50));
            venture.Start();
            var firstVentureName = new Name("new-venture-1");
            var secondVentureName = new Name("new-venture-2");
            var percentage = new Percentage(0.2f);

            var terms = new TermsOfSplit(percentage, firstVentureName, secondVentureName);
            var ventures = venture.Split(terms);

               Assert.IsFalse(investor0.HasInvestmentIn(venture));
               Assert.IsTrue(investor0.HasInvestmentIn(ventures.First()));
               Assert.IsTrue(investor0.HasInvestmentIn(ventures.Last()));
        }
Esempio n. 9
0
 public void Should_Not_Take_More_Investment_Than_Outlay()
 {
     Amount outlay = new Amount(40);
     Venture venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
     Investor investor0 = new Investor(new Name("Investor0"), new GringottsDate(DateTime.Now), new Amount(100));
     venture.AddOffer(investor0, new Amount(50));
     venture.Start();
     // TODO: make aggregation in venture
     Assert.AreEqual(outlay, venture.Holding.Investments.Aggregate(new Amount(0), (sum, inv) => sum + inv.Value));
 }
Esempio n. 10
0
        public void ShouldBeAbleToHandOutDividends()
        {
            var venture = new Venture(new Name("Venture"), new Amount(1000), new Amount(1));
            var quarterInvestor = new Investor(new Name("investor"), new Amount(1000));
            var threeFourthsInvestor = new Investor(new Name("investor"), new Amount(1000));
            var dividend = new Amount(1000);

            venture.AddOffer(quarterInvestor, new Amount(250));
            venture.AddOffer(threeFourthsInvestor, new Amount(750));

            venture.Start();

            venture.HandOutDividends(dividend);
        }
Esempio n. 11
0
 public void ShouldSplitOutlayMoneyAccordingToRatio()
 {
     var venture = new Venture(new Name("venture-name"), new Amount(100), new Amount(10));
     var firstVentureName = new Name("new-venture-1");
     var secondVentureName = new Name("new-venture-2");
     var percentage = new Percentage(0.2f);
     var terms = new TermsOfSplit(percentage, firstVentureName, secondVentureName);
     venture.AddOffer(new Investor(new Name("testName"), new Amount(1000)), new Amount(100));
     venture.Start();
     var ventures = venture.Split(terms);
     Assert.AreEqual(percentage.Apply(venture.Outlay), ventures.First().Outlay);
     Assert.AreEqual(percentage.ApplyRemaining(venture.Outlay), ventures.Last().Outlay);
 }
Esempio n. 12
0
 public void Should_Be_Able_To_Start_A_Venture()
 {
     Amount outlay = new Amount(40);
     Venture venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
     Investor investor0 = new Investor(new Name("Investor0"), new GringottsDate(DateTime.Now), new Amount(100));
     venture.AddOffer(investor0, new Amount(50));
     venture.Start();
     Assert.True(venture.IsStarted());
 }
Esempio n. 13
0
        public void StartedVentureMayGoBankrupt()
        {
            var outlay = new Amount(40);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var initialCorpus = new Amount(100);
            var investor = new Investor(new Name("Investor0"), initialCorpus);
            venture.AddOffer(investor, new Amount(50));
            venture.Start();

            venture.GoBankrupt();
            Assert.AreEqual(Venture.BANKRUPT_STATE, venture.State);
        }
Esempio n. 14
0
        public void ShouldCreateAOfferPartiallyAcceptedEventWhenOffersAreConfirmed()
        {
            var initialBalance = new Amount(1000);
            var investor1 = new Investor(new Name("Inverstor 1"), initialBalance);

            var outlay = new Amount(400);
            var venture = new Venture(new Name("Ventura Inc."), outlay, new Amount(1));

            var excess = new Amount(100);
            venture.AddOffer(investor1, outlay + excess);
            Assert.AreEqual(initialBalance - (outlay + excess), investor1.Balance);

            venture.Start();

            BalanceHistory history = investor1.GetBalanceHistory();
            string offerEvent = string.Format(BalanceEvent.OFFER_PARTIALLY_ACCEPTED, venture.Name);
            BalanceEvent balanceEvent = new BalanceEvent(offerEvent, initialBalance - outlay);
            Assert.Contains(balanceEvent, history.GetEvents());
        }
Esempio n. 15
0
        public void ShouldCreateDividendReceivedEventWhenDividendIsDeclared()
        {
            var initialBalance = new Amount(1000);
            var investor1 = new Investor(new Name("Inverstor 1"), initialBalance);

            var outlay = new Amount(400);
            var venture = new Venture(new Name("Ventura Inc."), outlay, new Amount(1));

            venture.AddOffer(investor1, outlay);

            venture.Start();
            var dividend = new Amount(1000);
            venture.HandOutDividends(dividend);

            BalanceHistory history = investor1.GetBalanceHistory();
            string dividendEvent = string.Format(BalanceEvent.DIVIDEND_RECEIVED, venture.Name);
            BalanceEvent balanceEvent = new BalanceEvent(dividendEvent, initialBalance - outlay + dividend);
            Assert.Contains(balanceEvent, history.GetEvents());
        }
Esempio n. 16
0
 public void Should_Return_Over_Investment_To_Investor_When_Start()
 {
     Amount outlay = new Amount(40);
     Venture venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
     Amount initialCorpus = new Amount(100);
     Investor investor = new Investor(new Name("Investor0"), new GringottsDate(DateTime.Now), initialCorpus);
     venture.AddOffer(investor, new Amount(50));
     venture.Start();
     Assert.AreEqual(initialCorpus - outlay, investor.Corpus);
 }
Esempio n. 17
0
        public void ShouldNotGiveDividendsIfItIsBankrupt()
        {
            var outlay = new Amount(40);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var initialCorpus = new Amount(100);
            var investor = new Investor(new Name("Investor0"), initialCorpus);
            venture.AddOffer(investor, new Amount(50));

            venture.Start();

            venture.GoBankrupt();

            Assert.Throws<InvalidOperationException>(()=> venture.HandOutDividends(new Amount(100)));
        }
Esempio n. 18
0
        public void ShouldCreateVentureEventWhenVentureSplits()
        {
            var outlay = new Amount(40);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var investor0 = new Investor(new Name("Investor0"), new Amount(100));
            venture.AddOffer(investor0, new Amount(50));
            venture.Start();
            var firstVentureName = new Name("new-venture-1");
            var secondVentureName = new Name("new-venture-2");
            var percentage = new Percentage(0.2f);

            var terms = new TermsOfSplit(percentage, firstVentureName, secondVentureName);
            var newVentures = venture.Split(terms);

            Assert.IsTrue(newVentures.First().IsStarted());
            Assert.IsTrue(newVentures.Last().IsStarted());

            VentureEvent ventureEventSplit1 = new VentureEvent(VentureEvent.SPLIT,new Amount(8));
            VentureEvent ventureEventStarted1 = new VentureEvent(VentureEvent.STARTED,new Amount(8));
            VentureEvent ventureEventSplit2 = new VentureEvent(VentureEvent.SPLIT,new Amount(32));
            VentureEvent ventureEventStarted2 = new VentureEvent(VentureEvent.STARTED,new Amount(32));

            VentureHistory ventureHistory1 = newVentures.First().GetVentureHistory();
            VentureHistory ventureHistory2 = newVentures.Last().GetVentureHistory();

            Assert.Contains(ventureEventSplit1, ventureHistory1.GetEvents());
            Assert.Contains(ventureEventStarted1, ventureHistory1.GetEvents());

            Assert.Contains(ventureEventSplit2, ventureHistory2.GetEvents());
            Assert.Contains(ventureEventStarted2, ventureHistory2.GetEvents());
        }
Esempio n. 19
0
 public void ShouldBeAbleToStartAVenture()
 {
     var outlay = new Amount(40);
     var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
     var investor0 = new Investor(new Name("Investor0"),  new Amount(100));
     venture.AddOffer(investor0, new Amount(50));
     venture.Start();
     Assert.True(venture.IsStarted());
 }
Esempio n. 20
0
        public void ShouldCreateVentureEventWhenVentureGoesBankrupt()
        {
            var outlay = new Amount(50);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var initialCorpus = new Amount(100);
            var investor = new Investor(new Name("Investor0"), initialCorpus);
            var investmentAmount = new Amount(50);
            venture.AddOffer(investor, investmentAmount);

            venture.Start();
            venture.GoBankrupt();

            VentureEvent ventureEventProposed = new VentureEvent(VentureEvent.PROPOSED, outlay);
            VentureEvent ventureEventStarted = new VentureEvent(VentureEvent.STARTED, outlay);
            VentureEvent ventureEventForBankruptcy = new VentureEvent(VentureEvent.BANKRUPT, outlay);

            VentureHistory ventureHistory = venture.GetVentureHistory();
            Assert.Contains(ventureEventProposed, ventureHistory.GetEvents());
            Assert.Contains(ventureEventStarted, ventureHistory.GetEvents());
            Assert.Contains(ventureEventForBankruptcy, ventureHistory.GetEvents());
        }
Esempio n. 21
0
        public void ShouldSplitHoldingInvestmentsAccordingToRatio()
        {
            var outlay = new Amount(40);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var investor0 = new Investor(new Name("Investor0"), new Amount(100));
            venture.AddOffer(investor0, new Amount(50));
            venture.Start();
            var firstVentureName = new Name("new-venture-1");
            var secondVentureName = new Name("new-venture-2");
            var percentage = new Percentage(0.2f);

            var terms = new TermsOfSplit(percentage, firstVentureName, secondVentureName);
            var ventures = venture.Split(terms);
            Assert.AreEqual(venture.HoldingValue.Denomination, ventures.Sum(n => n.HoldingValue.Denomination));
        }
Esempio n. 22
0
 public void ShouldReturnOverInvestmentToInvestorWhenStart()
 {
     var outlay = new Amount(40);
     var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
     var initialCorpus = new Amount(100);
     var investor = new Investor(new Name("Investor0"),  initialCorpus);
     venture.AddOffer(investor, new Amount(50));
     venture.Start();
     Assert.AreEqual(initialCorpus - outlay, investor.Balance);
 }
Esempio n. 23
0
        public void ShouldCreateAOfferRejectedEventWhenVentureRejectsAnOffer()
        {
            var initialBalance = new Amount(1000);
            var investor1 = new Investor(new Name("Inverstor 1"), initialBalance);
            var investor2 = new Investor(new Name("Inverstor 2"), initialBalance);

            var outlay = new Amount(500);
            var venture = new Venture(new Name("Ventura Inc."), outlay, new Amount(1));

            venture.AddOffer(investor1, outlay);
            var offerAmount2 = new Amount(600);
            venture.AddOffer(investor2, offerAmount2);

            venture.Start();

            BalanceHistory history = investor2.GetBalanceHistory();
            string offerEvent = string.Format(BalanceEvent.OFFER_REJECTED, venture.Name);
            BalanceEvent balanceEvent = new BalanceEvent(offerEvent, initialBalance);
            Assert.Contains(balanceEvent, history.GetEvents());
        }
Esempio n. 24
0
        public void ShouldUpdateInvestorBalancesWhileStartingAVenture()
        {
            var outlay = new Amount(600);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var initialBalance = new Amount(1000);
            var investor1 = new Investor(new Name("Investor1"), initialBalance);
            var investor2 = new Investor(new Name("Investor2"), initialBalance);
            var investor3 = new Investor(new Name("Investor3"), initialBalance);
            var investor4 = new Investor(new Name("Investor4"), initialBalance);

            var offerAmount1 = new Amount(100);
            venture.AddOffer(investor1, offerAmount1);
            Assert.AreEqual(initialBalance - offerAmount1, investor1.Balance);

            var offerAmount2 = new Amount(200);
            venture.AddOffer(investor2, offerAmount2);
            Assert.AreEqual(initialBalance - offerAmount2, investor2.Balance);

            var offerAmount3 = new Amount(400);
            venture.AddOffer(investor3, offerAmount3);
            Assert.AreEqual(initialBalance - offerAmount3, investor3.Balance);

            var offerAmount4 = new Amount(500);
            venture.AddOffer(investor4, offerAmount4);
            Assert.AreEqual(initialBalance - offerAmount4, investor4.Balance);

            venture.Start();

            // check the new balances
            Assert.AreEqual(initialBalance - offerAmount1, investor1.Balance);
            Assert.AreEqual(initialBalance - offerAmount2, investor2.Balance);
            Assert.AreEqual(initialBalance - offerAmount3 + new Amount(100), investor3.Balance, "Partially accepted amount should have been refunded");
            Assert.AreEqual(initialBalance, investor4.Balance);
        }
Esempio n. 25
0
        public void ShouldUpdateInvestorPortfolioWhenVentureGoesBankrupt()
        {
            var outlay = new Amount(50);
            var venture = new Venture(new Name("Ventura"), outlay, new Amount(1));
            var initialCorpus = new Amount(100);
            var investor = new Investor(new Name("Investor0"), initialCorpus);
            var investmentAmount = new Amount(50);
            venture.AddOffer(investor, investmentAmount);

            venture.Start();
            var previousAmount = investor.PortfolioValue;

            venture.GoBankrupt();
            var currentAmount = investor.PortfolioValue;

            Assert.AreEqual(previousAmount-investmentAmount, currentAmount);
        }
Esempio n. 26
0
        public void Should_Be_Able_To_Hand_Out_Dividends()
        {
            Venture venture = new Venture(new Name("Venture"), new Amount(1000), new Amount(1));
            Investor quarterInvestor = new Investor(new Name("investor"), new GringottsDate(DateTime.Now), new Amount(1000));
            Investor threeFourthsInvestor = new Investor(new Name("investor"), new GringottsDate(DateTime.Now), new Amount(1000));
            Amount dividend = new Amount(1000);

            venture.AddOffer(quarterInvestor, new Amount(250));
            venture.AddOffer(threeFourthsInvestor, new Amount(750));

            venture.Start();

            venture.HandOutDividends(dividend);
        }