public void CreditAmount_ZeroModelYearValue_ReturnArgumentNullException(string brand, int modelYear)
        {
            //Eğer ICreditService içerisinde GetVehicleCreditAmount metotu çağrılırsa ve model yılı 0 ve altında ise return olarak ArgumentNullException fırlat.
            CreditServiceMock.Setup(p => p.GetVehicleCreditAmount(brand, modelYear)).Throws(new ArgumentNullException(nameof(modelYear), "model year cannot be less than zero"));

            //GetVehicleCreditAmount servisine model yılı 0 ve altında bir değer girildiğinde ArgumentNullException fırlatılacak.
            var argumentNullException = Assert.Throws <ArgumentNullException>(() => VehicleCredit.CreditAmount(brand, modelYear));

            //Dönen hata mesajı doğru mu?
            Assert.Equal("model year cannot be less than zero (Parameter 'modelYear')", argumentNullException.Message);
        }
        public void Add_SimpleValues_ReturnCreditAmount(string brand, int modelYear, int expectedCreditAmount)
        {
            //Eğer ICreditService içerisinde GetVehicleCreditAmount metotu çağrılırsa return olarak expectedCreditAmount değerini dön.
            CreditServiceMock.Setup(p => p.GetVehicleCreditAmount(brand, modelYear)).Returns(expectedCreditAmount);

            int creditAmount = VehicleCredit.CreditAmount(brand, modelYear);

            //GetVehicleCreditAmount servisinden 200 dönecek(Mock), Calculate buna 100 ekleyecek ve gelen değer 300 olacak.
            //Seat için 185 + 100 = 285 dönecek
            //Volkswagen için 200 + 100 = 300 dönecek
            Assert.InRange(creditAmount, 280, 310);
        }
        public void Installment_VehicleValues_ReturnNumberOfCreditInstallments(string model, int modelYear, string fuel)
        {
            //Eğer ICreditService içerisinde CalculateInstallments metotu çağrılırsa return olarak 10 değerini dön.
            CreditServiceMock.Setup(p => p.CalculateInstallments(model, modelYear, fuel)).Returns(10);

            //VehicleCredit.Installment metotu servisten dönen değeri 2'ye bölüyor.
            int installmentsCount = VehicleCredit.Installment(model, modelYear, fuel);

            //Servisten dönen değeri 2'ye böldüğü için beklenen değeri 5 verdim.
            Assert.Equal <int>(5, installmentsCount);                                                   //(xUnit ile doğrula)
            CreditServiceMock.Verify(p => p.CalculateInstallments(model, modelYear, fuel), Times.Once); //Bu metot 1 kere çalışsın. Eğer 2 kere çalışırsa test başarısız olacak.
        }
        public void CreditAmount_BrandAndModelYearValues_ReturnCreditAmountValue(string brand, int modelYear)
        {
            int actualCreditAmount = 0;

            //Eğer ICreditService içerisinde GetVehicleCreditAmount metotu çağrılırsa return olarak expectedCreditAmount değerini dön.
            CreditServiceMock.Setup(p => p.GetVehicleCreditAmount(It.IsAny <string>(), It.IsAny <int>())).Callback <string, int>((x, y) => actualCreditAmount = y / 3);

            VehicleCredit.CreditAmount(brand, modelYear);
            Assert.Equal(673, actualCreditAmount);

            VehicleCredit.CreditAmount("Seat", 2012);
            Assert.Equal(670, actualCreditAmount);
        }