public void Numero_Do_Cartao_Deve_Ser_Invalido_Para_Tipo_Visa()
        {
            var cartaoDeCredito = new CartaoCredito("4417 1234 5678 9112");

            var resultado = cartaoDeCredito.EhValido();

            Assert.IsFalse(resultado);
        }
        public void Numero_Do_Cartao_Deve_Ser_Valido_Para_Tipo_Visa()
        {
            var cartaoDeCredito = new CartaoCredito("4408 0412 3456 7893");

            var resultado = cartaoDeCredito.EhValido();

            Assert.IsTrue(resultado);
        }
        public void Tipo_Do_Cartao_Deve_Ser_Discover_Invalido()
        {
            var cartaoDeCredito = new CartaoCredito("6011111111111717");

            var resultado = cartaoDeCredito.EhValido();

            Assert.AreEqual(cartaoDeCredito.TipoCartao, EnumTipoCartao.Discover);
            Assert.IsFalse(resultado);
        }
        public void Tipo_Do_Cartao_Deve_Ser_Amex_Invalido()
        {
            var cartaoDeCredito = new CartaoCredito("378282246310505");

            var resultado = cartaoDeCredito.EhValido();

            Assert.AreEqual(cartaoDeCredito.TipoCartao, EnumTipoCartao.Amex);
            Assert.IsFalse(resultado);
        }
        public void Tipo_Do_Cartao_Deve_Ser_Visa_Invalido()
        {
            var cartaoDeCredito = new CartaoCredito("4408 0412 3456 1234");

            var resultado = cartaoDeCredito.EhValido();

            Assert.AreEqual(cartaoDeCredito.TipoCartao, EnumTipoCartao.Visa);
            Assert.IsFalse(resultado);
        }
        public void Tipo_Do_Cartao_Deve_Ser_MasterCard_Invalido()
        {
            var cartaoDeCredito = new CartaoCredito("5105105105105106");

            var resultado = cartaoDeCredito.EhValido();

            Assert.AreEqual(cartaoDeCredito.TipoCartao, EnumTipoCartao.MasterCard);
            Assert.IsFalse(resultado);
        }
        public void CartaoCredito_ValidarDiscover_RetornarComSucesso()
        {
            // Arrange
            CartaoCredito c = CartaoCredito.CartaoCreditoFactory.NovoCartaoCredito("6011111111111117");

            // Act
            var result = c.EhValido();

            // Assert
            Assert.True(result);
            Assert.StrictEqual(c.Bandeira, "Discover");
        }
        public void CartaoCredito_ValidarMasteCard_RetornarComFalha()
        {
            // Arrange
            CartaoCredito c = CartaoCredito.CartaoCreditoFactory.NovoCartaoCredito("5105105105105106");

            // Act
            var result = c.EhValido();

            // Assert
            Assert.False(result);
            Assert.StrictEqual(c.Bandeira, "MasterCard");
        }
        public void CartaoCredito_ValidarAmex_RetornarComSucesso()
        {
            // Arrange
            CartaoCredito c = CartaoCredito.CartaoCreditoFactory.NovoCartaoCredito("378282246310005");

            // Act
            var result = c.EhValido();

            // Assert
            Assert.True(result);
            Assert.StrictEqual(c.Bandeira, "AMEX");
        }
        public void CartaoCredito_ValidarVisa_RetornarComFalha()
        {
            // Arrange
            CartaoCredito c = CartaoCredito.CartaoCreditoFactory.NovoCartaoCredito("4111111111111");

            // Act
            var result = c.EhValido();

            // Assert
            Assert.False(result);
            Assert.StrictEqual(c.Bandeira, "Visa");
        }
        public ActionResult Index(CartaoCreditoViewModel cartaoCredito)
        {
            if (!ModelState.IsValid)
            {
                return(View(cartaoCredito));
            }

            var cartaoDeCredito = new CartaoCredito(cartaoCredito.Numero);

            cartaoCredito.TipoCartao = cartaoDeCredito.TipoCartao;
            if (cartaoDeCredito.EhValido())
            {
                return(PartialView("_Valido", cartaoCredito));
            }

            return(PartialView("_Invalido", cartaoCredito));
        }