public void Setup()
        {
            _bankaSecen       = new Mock <IBankaSecen>();
            _veritabaniVekili = new Mock <IGuvenliPosVeritabaniVekili>();
            _banka            = new Mock <IBanka>();

            _bankaSecen.Setup(x => x.BankaSec(It.IsAny <SiparisBilgi>())).Returns(_banka.Object);

            _guvenliPos   = new GuvenliPos(_bankaSecen.Object, _veritabaniVekili.Object);
            _siparisBilgi = new SiparisBilgi
            {
                Kart = new KrediKarti
                {
                    KartNo         = "0123456789123456",
                    AdSoyad        = "Caner Demirci",
                    GuvenlikKodu   = "000",
                    SonKullanmaYil = 2022,
                    SonKullanmaAy  = 1
                },
                Tutar       = 200,
                TaksitAdedi = 4
            };

            _banka3DOnayUrl         = "https://ziraaat.com";
            _bankaCekimIstegiSonucu = new BankaCekimIstegiSonucu
            {
                Basarili = true,
                BankaSistemi3DOnayUrl = _banka3DOnayUrl
            };

            _banka.Setup(x => x.CekimIstegiGonder(_siparisBilgi)).Returns(_bankaCekimIstegiSonucu);
        }
        public void SiparisBilgisindeKartNumarasiEksikse_HataDonerBankaSecilmez()
        {
            SiparisBilgi gecersizBilgi = new SiparisBilgi
            {
                Kart = new KrediKarti
                {
                    KartNo         = "",
                    AdSoyad        = "Caner Demirci",
                    GuvenlikKodu   = "000",
                    SonKullanmaYil = 2022,
                    SonKullanmaAy  = 1
                },
                Tutar       = 200,
                TaksitAdedi = 4
            };

            BankaCekimIstegiSonucu bankaCekimIstegiSonucu = _guvenliPos.CekimIstegiGonder(gecersizBilgi);

            Assert.IsTrue(!bankaCekimIstegiSonucu.Basarili);
            _bankaSecen.Verify(x => x.BankaSec(It.IsAny <SiparisBilgi>()), Times.Never);
        }
        public BankaCekimIstegiSonucu CekimIstegiGonder(SiparisBilgi siparisBilgi)
        {
            SiparisKontrolSonuc siparisKontrolSonuc = siparisBilgileriGecerliMi(siparisBilgi);

            if (!siparisKontrolSonuc.Basarili)
            {
                return new BankaCekimIstegiSonucu()
                       {
                           Basarili = false
                       }
            }
            ;

            IBanka banka = _bankaSecen.BankaSec(siparisBilgi);

            string guid         = "";
            long   islemKayitId = _veritabaniVekili.BankayaIstekOncesiIslemKaydet(siparisBilgi, guid);

            try
            {
                var cekimIstegiSonuc = banka?.CekimIstegiGonder(siparisBilgi);

                if (cekimIstegiSonuc != null)
                {
                    _veritabaniVekili.BankadanGelenCevapIleIslemKaydiniGuncelle(islemKayitId, cekimIstegiSonuc);
                    return(cekimIstegiSonuc);
                }

                return(null);
            }
            catch (Exception ex)
            {
                _veritabaniVekili.BankaHatasiniLogla(islemKayitId, ex);
                return(new BankaCekimIstegiSonucu()
                {
                    Basarili = false, Mesaj = "Banka çekimi sırasında hata oluştu - " + ex.Message
                });
            }
        }
        private SiparisKontrolSonuc siparisBilgileriGecerliMi(SiparisBilgi siparisBilgi)
        {
            if (siparisBilgi.Kart == null)
            {
                return new SiparisKontrolSonuc()
                       {
                           Basarili = false, Mesaj = "Kart bilgileri bulunamadi."
                       }
            }
            ;

            if (siparisBilgi.Kart.KartNo.Length != 15 && siparisBilgi.Kart.KartNo.Length != 16)
            {
                return new SiparisKontrolSonuc()
                       {
                           Basarili = false, Mesaj = "Kredi kartı numarası 15 veya 16 hane olmalı"
                       }
            }
            ;

            if (siparisBilgi.Kart.GuvenlikKodu.Length != 3)
            {
                return new SiparisKontrolSonuc()
                       {
                           Basarili = false, Mesaj = "Kart güvenlik numarası 3 hane olmalı"
                       }
            }
            ;

            return(new SiparisKontrolSonuc()
            {
                Basarili = true
            });
        }
    }
}