public void CalculateInterest_TestCase1_calculate_simple_interest_for_card_and_holder() { var cardHolder = new CreditCardHolder { Wallets = new List <Wallet> { new Wallet { CreditCards = new List <CreditCard> { new VisaCreditCard { Balance = 100 }, new MasterCardCreditCard { Balance = 100 }, new DiscoverCreditCard { Balance = 100 } } } } }; _logic.CalculateInterestForHolder(cardHolder); var creditCards = cardHolder.Wallets.First().CreditCards.ToList(); Assert.Equal(10, creditCards[0].SimpleInterest); // per card Assert.Equal(5, creditCards[1].SimpleInterest); Assert.Equal(1, creditCards[2].SimpleInterest); Assert.Equal(16, cardHolder.TotalInterest); // for card holder }
public void CalculateInterest_TestCase3_calculate_simple_interest_for_wallet_and_holder_for_2_card_holders( CreditCardHolder cardHolder, double walletInterest, double cardHolderInterest) { _logic.CalculateInterestForHolder(cardHolder); Assert.Equal(walletInterest, cardHolder.Wallets.First().TotalInterest); Assert.Equal(cardHolderInterest, cardHolder.TotalInterest); }
/// <summary> /// Calculate interest for all cards and all wallets of the credit card holder /// </summary> /// <param name="person">The person to calculate interest for</param> public void CalculateInterestForHolder(CreditCardHolder person) { foreach (Wallet wallet in person.Wallets) { foreach (CreditCard card in wallet.CreditCards) { card.InterestRate = _interestRates.First(r => r.Key == card.Type).Value; CalculateInterestForCard(card); wallet.TotalInterest += card.SimpleInterest; } person.TotalInterest += wallet.TotalInterest; } }
static void Main(string[] args) { ICreditCardInterestLogic interestLogic = new CreditCardInterestLogic(); var cardHolder1 = new CreditCardHolder { Wallets = new List <Wallet> { new Wallet { CreditCards = new List <CreditCard> { new VisaCreditCard { Balance = 100 }, new MasterCardCreditCard { Balance = 100 }, new DiscoverCreditCard { Balance = 100 } } } } }; interestLogic.CalculateInterestForHolder(cardHolder1); Console.WriteLine("\nTEST CASE 1"); var cards = cardHolder1.Wallets.First().CreditCards.ToList(); cards.ForEach(c => Console.WriteLine($"Interest for {c.Type} card: {c.SimpleInterest}")); Console.WriteLine($"Total interest for card holder: {cardHolder1.TotalInterest}"); var cardHolder2 = new CreditCardHolder { Wallets = new List <Wallet> { new Wallet { CreditCards = new List <CreditCard> { new VisaCreditCard { Balance = 100 }, new DiscoverCreditCard { Balance = 100 } } }, new Wallet { CreditCards = new List <CreditCard> { new MasterCardCreditCard { Balance = 100 }, } } } }; interestLogic.CalculateInterestForHolder(cardHolder2); Console.WriteLine("\nTEST CASE 2"); var case2Wallets = cardHolder2.Wallets.ToList(); case2Wallets.ForEach(w => Console.WriteLine($"Interest for wallet: {w.TotalInterest}")); Console.WriteLine($"Total interest for card holder: {cardHolder2.TotalInterest}"); var cardHolderGroups3 = new List <CreditCardHolder> { new CreditCardHolder { Wallets = new List <Wallet> { new Wallet { CreditCards = new List <CreditCard> { new MasterCardCreditCard { Balance = 100 }, new VisaCreditCard { Balance = 100 } } } } }, new CreditCardHolder { Wallets = new List <Wallet> { new Wallet { CreditCards = new List <CreditCard> { new VisaCreditCard { Balance = 100 }, new MasterCardCreditCard { Balance = 100 }, } } } } }; Console.WriteLine("\nTEST CASE 3"); for (int i = 0; i < cardHolderGroups3.Count; i++) { interestLogic.CalculateInterestForHolder(cardHolderGroups3[i]); var case3Wallets = cardHolderGroups3[i].Wallets.ToList(); case3Wallets.ForEach(w => Console.WriteLine($"Interest for card holder {i + 1} wallet: {w.TotalInterest}")); Console.WriteLine($"Total interest for card holder {i + 1}: {cardHolderGroups3[i].TotalInterest}\n"); } }
/// <summary> /// Instantiate the object and assigns default values of it members /// </summary> public CreditCardProcessAccessLayer() { cardHolder = new CreditCardHolder(); }