public void ShouldFetchMultipleOffersForInvestor() { Investor investor = CreateInvestor("Jagan1", 5000); InvestorRepository investorRepository = new InvestorRepository(session); investorRepository.Save(investor); Venture venture1 = CreateVenture(3000, 500, "Ram1"); Venture venture2 = CreateVenture(6000, 1000, "Ram2"); VentureRepository ventureRepository = new VentureRepository(session); ventureRepository.Save(venture1); ventureRepository.Save(venture2); Amount amount1 = new Amount(700); Amount amount2 = new Amount(800); Offer offer1 = new Offer(investor, amount1, venture1); Offer offer2 = new Offer(investor, amount2, venture2); OfferRepository offerRepository = new OfferRepository(session); offerRepository.Save(offer1); offerRepository.Save(offer2); session.Flush(); session.Clear(); Investor fetchedInvestor = investorRepository.GetInvestorById(investor.Id); Assert.AreEqual(new Amount(1500), fetchedInvestor.OfferValue); }
public void ShouldBeAbleToCreateInvestmentFromOffer() { var offer = new Offer( new Investor(new Name("Investor1"), new Amount(500)), new Amount(300), null); var investment = new Investment(new Investor(new Name("Investor1"), new Amount(500)), null, new Amount(300)); Assert.AreEqual(investment, offer.ToInvestment()); }
public void Should_Be_Able_To_Confirm_Subscription() { Subscription subscription = new Subscription(); 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)); Investor investor2 = new Investor(new Name("Investor2"), new GringottsDate(DateTime.Now), new Amount(100)); Investor investor3 = new Investor(new Name("Investor3"), new GringottsDate(DateTime.Now), new Amount(100)); subscription.Add(new Offer(investor0, new Amount(100), null)); subscription.Add(new Offer(investor1, new Amount(200), null)); subscription.Add(new Offer(investor2, new Amount(300), null)); Offer excess = new Offer(investor3, new Amount(400), null); subscription.Add(excess); Amount outlay = new Amount(600); List<Investment> confirmations = subscription.Confirm(outlay); Assert.IsFalse(confirmations.Contains(excess.ToInvestment())); Assert.AreEqual(outlay, confirmations.Aggregate(new Amount(0), (sum, inv) => sum + inv.Value)); }
public void ShouldFetchInvestorAndVentureForOffer() { Investor investor = CreateInvestor("Jagan", 4000); var investorRepository = new InvestorRepository(session); investorRepository.Save(investor); Venture venture = CreateVenture(2000, 400, "Ram Capitalists"); var ventureRepository = new VentureRepository(session); ventureRepository.Save(venture); const int denomination = 500; var offer = new Offer(investor, new Amount(denomination), venture); var offerRepository = new OfferRepository(session); offerRepository.Save(offer); session.Flush(); session.Evict(offer); session.Evict(investor); session.Evict(venture); IList<Offer> offers = offerRepository.FetchAll(); Assert.AreEqual(1, offers.Count); Offer savedOffer = offers[0]; //offer props Assert.AreEqual(denomination, savedOffer.Value.Denomination); //investor props Assert.AreEqual(investor.Name.GetValue(), savedOffer.Investor.Name.GetValue()); //venture props Assert.AreEqual(venture.Name, savedOffer.Venture.Name); Assert.AreEqual(venture.Outlay, savedOffer.Venture.Outlay); Assert.AreEqual(venture.MinInvestment, savedOffer.Venture.MinInvestment); }
public virtual Offer AddOffer(Investor investor, Amount investedAmount) { if (Subscription.AlreadyInvested(investor)) throw new InvalidOfferException("Cannot invest more than once."); if (!MinimumInvestment(investedAmount)) throw new InvalidOfferException("Investment amount less than the required minimum amount."); Offer offer = new Offer(investor, investedAmount, this); investor.AcceptOffer(offer); Subscription.Add(offer); return offer; }
public void Save(Offer offer) { session.Save(offer); }
public void Add(Offer investment) { subscription.Add(investment); }
public void ShouldFetchMultipleSubscriptionsForVenture() { Investor investor1 = CreateInvestor("Joy", 9000); Investor investor2 = CreateInvestor("Roy", 6000); InvestorRepository investorRepository = new InvestorRepository(session); investorRepository.Save(investor1); investorRepository.Save(investor2); Venture venture = CreateVenture(8000, 1920, "Ace Ventura"); VentureRepository ventureRepository = new VentureRepository(session); ventureRepository.Save(venture); Amount amount1 = new Amount(712); Amount amount2 = new Amount(423); Offer offer1 = new Offer(investor1, amount1, venture); Offer offer2 = new Offer(investor2, amount2, venture); OfferRepository offerRepository = new OfferRepository(session); offerRepository.Save(offer1); offerRepository.Save(offer2); session.Flush(); session.Clear(); Venture fetchedVenture = ventureRepository.GetVentureById(venture.Id); Assert.AreEqual(new Amount(1135), fetchedVenture.SubscribedAmount()); }
public void ShouldFetchOffersForInvestorAndVenture() { Investor investor = CreateInvestor("Jagan", 4000); InvestorRepository investorRepository = new InvestorRepository(session); investorRepository.Save(investor); Venture venture = CreateVenture(2000, 400, "Ram Capitalists"); VentureRepository ventureRepository = new VentureRepository(session); ventureRepository.Save(venture); Amount amount = new Amount(600); Offer offer = new Offer(investor, amount, venture); OfferRepository offerRepository = new OfferRepository(session); offerRepository.Save(offer); session.Flush(); session.Evict(investor); session.Evict(venture); session.Evict(offer); Investor fetchedInvestor = investorRepository.GetInvestorById(investor.Id); Assert.AreEqual(amount, fetchedInvestor.OfferValue); Venture fetchedVenture = ventureRepository.GetVentureById(venture.Id); Assert.AreEqual(amount, fetchedVenture.SubscribedAmount()); }
public void AddOffer(Offer offer) { offers.Add(offer); }
public virtual void AcceptOffer(Offer offer) { Pay(offer.Value); offers.AddOffer(offer); }
public void Should_Be_Able_To_Create_Investment_From_Offer() { Offer offer = new Offer(new Investor(new Name("Investor1"), new GringottsDate(DateTime.Now), new Amount(500)), new Amount(300), null); Investment investment = new Investment(new Investor(new Name("Investor1"), new GringottsDate(DateTime.Now), new Amount(500)), null, new Amount(300)); Assert.AreEqual(investment, offer.ToInvestment()); }
public void SubscriptionConfirmationAcceptsJustTheMinimumSetOfOffers() { // venture used here just to create the offer. not for adding offers var dummyVenture = new Venture(new Name("Ventura"), new Amount(1), new Amount(1)); var subscription = new Subscription(); var investor0 = new Investor(new Name("Investor0"), new Amount(100)); var investor1 = new Investor(new Name("Investor1"), new Amount(100)); var investor2 = new Investor(new Name("Investor2"), new Amount(100)); var investor3 = new Investor(new Name("Investor3"), new Amount(100)); subscription.Add(new Offer(investor0, new Amount(100), dummyVenture)); subscription.Add(new Offer(investor1, new Amount(200), dummyVenture)); subscription.Add(new Offer(investor2, new Amount(300), dummyVenture)); var excess = new Offer(investor3, new Amount(400), dummyVenture); subscription.Add(excess); var outlay = new Amount(600); List<Investment> confirmations = subscription.Confirm(outlay); Assert.IsFalse(confirmations.Contains(excess.ToInvestment())); Assert.AreEqual(outlay, confirmations.Aggregate(new Amount(0), (sum, inv) => sum + inv.Value)); }