コード例 #1
0
        public void TestCase1()
        {
            //Arrange
            decimal bal  = 100m;
            var     visa = new Visa(bal);
            var     mc   = new MasterCard(bal);
            var     disc = new Discover(bal);

            Wallet homersWallet = new Wallet();

            homersWallet.AddCard(visa);
            homersWallet.AddCard(mc);
            homersWallet.AddCard(disc);

            Person homer = new Person("Homer J Simpson", new List <Wallet>()
            {
                homersWallet
            });

            //Act
            decimal interestHomer = InterestCalculator.CalculatePersonSimpleInterest(homer);

            decimal interestVisa       = InterestCalculator.CalculateSimpleInterest(visa.CurrentBalance, visa.InterestRate);
            decimal interestMasterCard = InterestCalculator.CalculateSimpleInterest(mc.CurrentBalance, mc.InterestRate);
            decimal interestDiscover   = InterestCalculator.CalculateSimpleInterest(disc.CurrentBalance, disc.InterestRate);

            //Assert
            Assert.Equal(16m, interestHomer);       //Total simple interest for the person

            Assert.Equal(10m, interestVisa);        //Simple interest per card
            Assert.Equal(5m, interestMasterCard);
            Assert.Equal(1m, interestDiscover);

            Assert.Equal(interestHomer, interestVisa + interestMasterCard + interestDiscover); //Total should equal the sum of all cards
        }
コード例 #2
0
        public void TwoPersonsOneWalletEach()
        {
            var person1 = new Person();
            var wallet1 = new Wallet();

            wallet1.AddCard(new Visa(100));
            wallet1.AddCard(new Mastercard(100));
            wallet1.AddCard(new Discover(100));

            person1.GiveWallet(wallet1);


            var person2 = new Person();
            var wallet2 = new Wallet();

            wallet2.AddCard(new Visa(100));
            wallet2.AddCard(new Mastercard(100));

            person2.GiveWallet(wallet2);

            Assert.IsTrue(person1.CalculateSimpleInterest() == 16d);
            Assert.IsTrue(wallet1.GetSimpleInterest() == 16d);

            Assert.IsTrue(person2.CalculateSimpleInterest() == 15d);
            Assert.IsTrue(wallet2.GetSimpleInterest() == 15d);
        }
コード例 #3
0
        public void AddCardToWallet(string name, double interest, double balance)
        {
            sut.AddCard(name, interest, balance);

            cardBuilderMock
            .Verify(x => x.BuildCreditCard(name, interest, balance), Times.Once);

            Assert.That(sut.Cards.Contains(cardMock.Object));
        }
コード例 #4
0
        public void Test1()
        {
            Wallet wallet = new Wallet();
            Person person = new Person();

            wallet.AddCard(visa);
            wallet.AddCard(mastercard);
            wallet.AddCard(discover);
            person.AddWallet(wallet);

            double personInterest = person.CalculatePersonInterest();

            Assert.AreEqual(personInterest, 16);
        }
コード例 #5
0
        public void OnePersonOneWallet()
        {
            var person = new Person();
            var wallet = new Wallet();

            var visaId   = wallet.AddCard(new Visa(100));
            var masterId = wallet.AddCard(new Mastercard(100));
            var discId   = wallet.AddCard(new Discover(100));

            person.GiveWallet(wallet);

            Assert.IsTrue(person.CalculateSimpleInterest() == 16d);
            Assert.IsTrue(wallet.retrieveCard(visaId).GetSimpleInterest() == 10d);
            Assert.IsTrue(wallet.retrieveCard(masterId).GetSimpleInterest() == 5d);
            Assert.IsTrue(wallet.retrieveCard(discId).GetSimpleInterest() == 1d);
        }
コード例 #6
0
        public void FirstTest()
        {
            var person = new Person("First", "Person");

            var wallet = new Wallet();

            wallet.AddCard(_visa);
            wallet.AddCard(_masterCard);
            wallet.AddCard(_discover);

            person.AddWallet(wallet);

            double totalInterest = 0.00;

            //  Sum the total interest per card per wallet.
            person.Wallets.ForEach(ww => totalInterest += ww.CalculateTotalInterest());

            Console.WriteLine($"Total interest for {person.FullName} is {totalInterest.ToString("C")}\n");

            var aggregateCardInterest = (_discover.GetMonthlyInterestStatement() +
                                         _masterCard.GetMonthlyInterestStatement() + _visa.GetMonthlyInterestStatement());

            Assert.IsTrue(totalInterest == aggregateCardInterest);

            person.Wallets.ForEach(ww =>
                                   ww.CreditCards.ForEach(cc =>
            {
                //  Testing the expected interest return values per card.
                switch (cc.CardType)
                {
                case CreditCardType.Discover:
                    Assert.AreEqual(cc.GetMonthlyInterestStatement(), _discover.GetMonthlyInterestStatement());
                    break;

                case CreditCardType.MasterCard:
                    Assert.AreEqual(cc.GetMonthlyInterestStatement(), _masterCard.GetMonthlyInterestStatement());
                    break;

                case CreditCardType.Visa:
                    Assert.AreEqual(cc.GetMonthlyInterestStatement(), _visa.GetMonthlyInterestStatement());
                    break;
                }

                Console.WriteLine($"{cc.CardName} has {cc.GetMonthlyInterestStatement().ToString("C")}\n");
            }));
        }
コード例 #7
0
        public void TestCase3()
        {
            //Arrange
            decimal bal  = 100m;
            var     visa = new Visa(bal);
            var     mc   = new MasterCard(bal);
            var     disc = new Discover(bal);

            Wallet bartsWallet = new Wallet();

            bartsWallet.AddCard(mc);
            bartsWallet.AddCard(mc);
            bartsWallet.AddCard(visa);

            Person bart = new Person("Bart Simpson", new List <Wallet>()
            {
                bartsWallet
            });

            Wallet lisasWallet = new Wallet();

            lisasWallet.AddCard(visa);
            lisasWallet.AddCard(mc);

            Person lisa = new Person("Lisa Simpson", new List <Wallet>()
            {
                lisasWallet
            });

            //Act
            decimal interestBart        = InterestCalculator.CalculatePersonSimpleInterest(bart);
            decimal interestBartsWallet = InterestCalculator.CalculateWalletSimpleInterest(bartsWallet);

            decimal interestLisa        = InterestCalculator.CalculatePersonSimpleInterest(lisa);
            decimal interestLisasWallet = InterestCalculator.CalculateWalletSimpleInterest(lisasWallet);

            //Assert
            Assert.Equal(20m, interestBart);
            Assert.Equal(15m, interestLisa);

            Assert.Equal(20m, interestBartsWallet);
            Assert.Equal(15m, interestLisasWallet);
        }
コード例 #8
0
        public void OnePersonTwoWallets()
        {
            var person = new Person();

            var wallet1 = new Wallet();

            wallet1.AddCard(new Visa(100));
            wallet1.AddCard(new Discover(100));
            person.GiveWallet(wallet1);

            var wallet2 = new Wallet();

            wallet2.AddCard(new Mastercard(100));
            person.GiveWallet(wallet2);


            Assert.IsTrue(person.CalculateSimpleInterest() == 16d);
            Assert.IsTrue(wallet1.GetSimpleInterest() == 11d);
            Assert.IsTrue(wallet2.GetSimpleInterest() == 5d);
        }
コード例 #9
0
        public void Test3()
        {
            Wallet wallet1 = new Wallet();
            Wallet wallet2 = new Wallet();
            Person person1 = new Person();
            Person person2 = new Person();

            wallet1.AddCard(mastercard);
            wallet1.AddCard(visa);
            wallet1.AddCard(discover);
            wallet2.AddCard(visa);
            wallet2.AddCard(mastercard);
            person1.AddWallet(wallet1);
            person2.AddWallet(wallet2);

            double person1Interest = person1.CalculatePersonInterest();
            double person2Interest = person2.CalculatePersonInterest();

            Assert.AreEqual(person1Interest, 16);
            Assert.AreEqual(person2Interest, 15);
        }
コード例 #10
0
        public void TestCase2()
        {
            //Arrange
            decimal bal  = 100m;
            var     visa = new Visa(bal);
            var     mc   = new MasterCard(bal);
            var     disc = new Discover(bal);

            Wallet margesWallet1 = new Wallet();

            margesWallet1.AddCard(visa);
            margesWallet1.AddCard(disc);

            Wallet margesWallet2 = new Wallet();

            margesWallet2.AddCard(mc);

            Person marge = new Person("Marge Simpson", new List <Wallet>()
            {
                margesWallet1, margesWallet2
            });

            //Act
            decimal interestMarge = InterestCalculator.CalculatePersonSimpleInterest(marge);

            decimal interestWallet1 = InterestCalculator.CalculateWalletSimpleInterest(margesWallet1);
            decimal interestWallet2 = InterestCalculator.CalculateWalletSimpleInterest(margesWallet2);

            //Assert
            Assert.Equal(16m, interestMarge);       //Total simple interest for the person

            Assert.Equal(11m, interestWallet1);     //Simple interest per wallet
            Assert.Equal(5m, interestWallet2);

            Assert.Equal(interestMarge, interestWallet1 + interestWallet2); //Total should equal the sum of all wallets
        }
コード例 #11
0
        public void SecondTest()
        {
            var person = new Person("Second", "Person");

            var wallet1 = new Wallet();

            wallet1.AddCard(_visa);
            wallet1.AddCard(_discover);

            person.AddWallet(wallet1);

            var wallet2 = new Wallet();

            wallet2.AddCard(_masterCard);

            person.AddWallet(wallet2);

            //  Spec:
            //      1 Person, 2 wallets
            //          Wallet 1 - 1 Visa, 1 Discover
            //          Wallet 2 - 1 MC
            var totalPersonInterest = (_visa.GetMonthlyInterestStatement() + _discover.GetMonthlyInterestStatement() +
                                       _masterCard.GetMonthlyInterestStatement());

            Assert.IsTrue(person.CalculateTotalWalletInterest() == totalPersonInterest,
                          $"Total interest of both wallets for this person should be {totalPersonInterest.ToString("C")}");

            int walletCount = 0;

            person.Wallets.ForEach(ww => {
                walletCount++;

                //  Test total interest per wallet.
                if (walletCount == 1)
                {
                    Assert.IsTrue(ww.CalculateTotalInterest() == (_visa.GetMonthlyInterestStatement() + _discover.GetMonthlyInterestStatement()),
                                  $"Total interest in wallet 1 should be {(_visa.GetMonthlyInterestStatement() + _discover.GetMonthlyInterestStatement()).ToString("C")}");
                }

                else
                {
                    Assert.IsTrue(ww.CalculateTotalInterest() == _masterCard.GetMonthlyInterestStatement(),
                                  $"Total interest in wallet 2 should be {_masterCard.GetMonthlyInterestStatement().ToString("C")}");
                }

                ww.CreditCards.ForEach(cc =>
                {
                    switch (cc.CardType)
                    {
                    case CreditCardType.Discover:
                        Assert.IsTrue(walletCount == 1,
                                      "Making sure the Discover card is in wallet 1");
                        break;

                    case CreditCardType.MasterCard:
                        Assert.IsTrue(walletCount == 2,
                                      "Making sure the MasterCard is in wallet 2");
                        break;

                    case CreditCardType.Visa:
                        Assert.IsTrue(walletCount == 1,
                                      "Making sure the Visa is in wallet 1");
                        break;
                    }
                });
            }
                                   );
        }
コード例 #12
0
        public void ThirdTest()
        {
            var personOne = new Person("Person", "One");
            var wallet1   = new Wallet();

            /*
             * Spec says: "person 1 has 1 wallet , with 2 cards MC and visa".
             * I am interpreting this to be 2 cards MC and 1 card Visa since
             * the implied Visa count appears to be one though the spec for person
             * two explicitly states only one wallet and 1 MC and 1 Visa in the wallet.
             * I would normally ask for clarification, though.          */
            wallet1.AddCard(_masterCard);
            wallet1.AddCard(_masterCard);

            wallet1.AddCard(_visa);

            personOne.AddWallet(wallet1);

            var personTwo = new Person("Person", "Two");
            var wallet2   = new Wallet();

            wallet2.AddCard(_visa);
            wallet2.AddCard(_masterCard);

            personTwo.AddWallet(wallet2);

            List <IPerson> people = new List <IPerson> {
                personOne, personTwo
            };

            int personCount = 0;

            foreach (var personItem in people)
            {
                personCount++;
                double totalInterestPerPerson = 0.00;

                int walletCount = 0;
                personItem.Wallets.ForEach(ww => {
                    walletCount++;
                    var totalPerWallet = ww.CalculateTotalInterest();

                    double cardSum = 0.00;
                    if (personCount == 1 && walletCount == 1)
                    {
                        cardSum = (_masterCard.GetMonthlyInterestStatement() * 2) + _visa.GetMonthlyInterestStatement();
                    }
                    else if (personCount == 2 && walletCount == 1)
                    {
                        cardSum = _masterCard.GetMonthlyInterestStatement() + _visa.GetMonthlyInterestStatement();
                    }
                    Assert.IsTrue(totalPerWallet == cardSum, $"Total interest in wallet {walletCount} is {cardSum}");

                    totalInterestPerPerson += totalPerWallet;
                });

                if (personCount == 1)
                {
                    Assert.IsTrue(totalInterestPerPerson == (_masterCard.GetMonthlyInterestStatement() * 2) + _visa.GetMonthlyInterestStatement(),
                                  $"Total interest in wallet {walletCount} is {((_masterCard.GetMonthlyInterestStatement() * 2) + _visa.GetMonthlyInterestStatement()).ToString("C")}");
                }
                else
                {
                    Assert.IsTrue(totalInterestPerPerson == _masterCard.GetMonthlyInterestStatement() + _visa.GetMonthlyInterestStatement(),
                                  $"Total interest in wallet {walletCount} is {(_masterCard.GetMonthlyInterestStatement() + _visa.GetMonthlyInterestStatement()).ToString("C")}");
                }
            }
        }