Exemple #1
0
        /// <summary>
        /// Vincula la información de una cuenta a las cuentas inscritas para transferencia de saldos al usuario actual.
        /// </summary>
        /// <param name="cardHolderDocType">El tipo de documento del titular de la cuenta que se desea registrar.</param>
        /// <param name="cardHolderDocNumber">El número de documento del titular de la cuenta que se desea registrar.</param>
        /// <param name="pinNumber">El pin transaccional del usuario autenticado.</param>
        /// <param name="accountNumber">El número de cuenta que se desea registrar o <c>null</c> para que el sistema busque el número de cuenta asociado con el tarjetahabiente.</param>
        /// <param name="alias">El nombre con el que se desea identificar la cuenta a registrar.</param>
        public void LinkTransferAccount(
            string cardHolderDocType,
            string cardHolderDocNumber,
            string pinNumber,
            string accountNumber = null,
            string alias         = null)
        {
            if (!ServiceLocator.Instance.Runtime.IsDevelopment)
            {
                Throw.IfNullOrEmpty(cardHolderDocType, nameof(cardHolderDocType));
                Throw.IfNullOrEmpty(cardHolderDocNumber, nameof(cardHolderDocNumber));
                Throw.IfNullOrEmpty(alias, nameof(alias));
            }

            LinkTransferAccountInfo linkTransferAccountInfo = new LinkTransferAccountInfo(
                cardHolderDocType,
                cardHolderDocNumber,
                alias,
                accountNumber,
                pinNumber);
            IRestRequest request = new AspenRequest(Scope.Delegated, EndpointMapping.LinkTransferAccountFromCurrentUser);

            request.AddJsonBody(linkTransferAccountInfo);
            this.Execute(request);
        }
        public void LinkTransferAccountWorks()
        {
            this.DeleteTransferAccountsFromRecognizedUser();
            IDelegatedApp           client = this.GetDelegatedClient();
            string                  recognizedPinNumber           = "141414";
            string                  recognizedCardHolderDocType   = "CC";
            string                  recognizedCardHolderDocNumber = "79483129";
            string                  recognizedAlias         = "MyTransferAccount";
            string                  accountNumber           = "6039590286132628";
            LinkTransferAccountInfo linkTransferAccountInfo = new LinkTransferAccountInfo(
                recognizedCardHolderDocType,
                recognizedCardHolderDocNumber,
                recognizedAlias,
                accountNumber,
                recognizedPinNumber);

            Assert.DoesNotThrow(() => client.Management.LinkTransferAccount(linkTransferAccountInfo));
            IList <TransferAccountInfo> transferAccounts = client.Management.GetTransferAccounts();

            CollectionAssert.IsNotEmpty(transferAccounts);
            TransferAccountInfo transferAccountInfo = transferAccounts.FirstOrDefault(info => info.Alias == recognizedAlias);

            Assert.NotNull(transferAccountInfo);
            Assert.That(transferAccountInfo.CardHolderDocType, Is.EqualTo(recognizedCardHolderDocType));
            Assert.That(transferAccountInfo.CardHolderDocNumber, Is.EqualTo(recognizedCardHolderDocNumber));
            Assert.IsNotEmpty(transferAccountInfo.CardHolderName);
            const string MaskedPanPattern = @".*\d{4}";

            Assert.That(transferAccountInfo.MaskedPan, Is.Not.Null.And.Match(MaskedPanPattern));
        }
        /// <summary>
        /// Restablece y registra cuentas para transferencia al usuario de pruebas reconocido.
        /// </summary>
        private void LinkTransferAccountsToRecognizedUser()
        {
            IDelegatedApp client = this.GetDelegatedClient();
            List <(string, string, string)> recognizedCardHolders = new List <(string, string, string)>
            {
                ("CC", "79483129", "6039590286132628"),
                ("CC", "52150900", "6039594610201554"),
                ("CC", "3262308", "6039590635149836"),
                ("CC", "52582664", "6039594246705697"),
                ("CC", "35512889", "6039599272117600")
            };

            const string RecognizedPinNumber = "141414";

            foreach ((string cardHolderDocType, string cardHolderDocNumber, string accountNumber) in recognizedCardHolders)
            {
                string randomAlias = new Random().Next(9999, 99999).ToString();
                LinkTransferAccountInfo linkTransferAccountInfo = new LinkTransferAccountInfo(
                    cardHolderDocType,
                    cardHolderDocNumber,
                    randomAlias,
                    accountNumber,
                    RecognizedPinNumber);
                client.Management.LinkTransferAccount(linkTransferAccountInfo);
            }
        }
        public void LinkTransferAccountUnrecognizedCardHolderThrows()
        {
            string recognizedPinNumber             = "141414";
            string recognizedCardHolderDocType     = "CC";
            string unrecognizedCardHolderDocNumber = new Random().Next(1000000000, int.MaxValue).ToString();
            string randomAlias         = $"MyAlias-{new Random().Next(9999, 99999)}";
            string randomAccountNumber = "6039590286132628";
            LinkTransferAccountInfo unrecognizedTransferAccountInfo = new LinkTransferAccountInfo(
                recognizedCardHolderDocType,
                unrecognizedCardHolderDocNumber,
                randomAlias,
                randomAccountNumber,
                recognizedPinNumber);
            IDelegatedApp  client    = this.GetDelegatedClient();
            AspenException exception = Assert.Throws <AspenException>(() => client.Management.LinkTransferAccount(unrecognizedTransferAccountInfo));

            Assert.That(exception.EventId, Is.EqualTo("15856"));
            Assert.That(exception.StatusCode, Is.EqualTo(HttpStatusCode.Conflict));
            StringAssert.IsMatch("No se encuentra información de la cuenta con los datos suministrados", exception.Message);
        }
        public void LinkTransferAccountUnrecognizedAccountNumberThrows()
        {
            this.DeleteTransferAccountsFromRecognizedUser();
            string recognizedPinNumber           = "141414";
            string recognizedCardHolderDocType   = "CC";
            string recognizedCardHolderDocNumber = "79483129";
            string recognizedAlias           = "MyTransferAccount";
            string unrecognizedAccountNumber = new Random().Next(1000000000, int.MaxValue).ToString("0000000000000000");
            LinkTransferAccountInfo unrecognizedTransferAccountInfo = new LinkTransferAccountInfo(
                recognizedCardHolderDocType,
                recognizedCardHolderDocNumber,
                recognizedAlias,
                unrecognizedAccountNumber,
                recognizedPinNumber);

            IDelegatedApp  client    = this.GetDelegatedClient();
            AspenException exception = Assert.Throws <AspenException>(() => client.Management.LinkTransferAccount(unrecognizedTransferAccountInfo));

            Assert.That(exception.EventId, Is.EqualTo("15857"));
            Assert.That(exception.StatusCode, Is.EqualTo(HttpStatusCode.Conflict));
            StringAssert.IsMatch("Cuenta no pertenece a tarjetahabiente", exception.Message);
        }
        /// <summary>
        /// Vincula la información de una cuenta a las cuentas inscritas de un usuario para transferencia de saldos.
        /// </summary>
        /// <param name="docType">El tipo de documento del cliente al cual se vinculará la cuenta.</param>
        /// <param name="docNumber">El número de documento del cliente al cual se vinculará la cuenta.</param>
        /// <param name="cardHolderDocType">El tipo de documento del titular de la cuenta que se está vinculando.</param>
        /// <param name="cardHolderDocNumber">El número de documento del titular de la cuenta que se está vinculando.</param>
        /// <param name="accountNumber">
        /// El número de cuenta que se está vinculando.
        /// Cuando es <see langword="null" />, el sistema auto-establece tomando el primer número de cuenta asociado con <paramref name="cardHolderDocType" /> y <paramref name="cardHolderDocNumber" />.
        /// </param>
        /// <param name="alias">
        /// El nombre o alias con el que se desea identificar a la cuenta que se está vinculando.
        /// Cuando es <see langword="null" />, el sistema auto-establece un alias a partir de la combinación de <paramref name="cardHolderDocType" /> y <paramref name="cardHolderDocNumber" />.
        /// </param>
        /// <exception cref="ArgumentException">Se produce cuando alguno de parámetros: <paramref name="docType"/>, <paramref name="docNumber"/>, <paramref name="cardHolderDocType"/> o <paramref name="cardHolderDocNumber"/> es nulo o vacío.</exception>
        public void LinkTransferAccount(
            string docType,
            string docNumber,
            string cardHolderDocType,
            string cardHolderDocNumber,
            string accountNumber = null,
            string alias         = null)
        {
            if (!ServiceLocator.Instance.Runtime.IsDevelopment)
            {
                Throw.IfNullOrEmpty(docType, nameof(docType));
                Throw.IfNullOrEmpty(docNumber, nameof(docNumber));
                Throw.IfNullOrEmpty(cardHolderDocType, nameof(cardHolderDocType));
                Throw.IfNullOrEmpty(cardHolderDocNumber, nameof(cardHolderDocNumber));
            }

            LinkTransferAccountInfo linkTransferAccountInfo = new LinkTransferAccountInfo(
                cardHolderDocType,
                cardHolderDocNumber,
                alias,
                accountNumber);

            this.LinkTransferAccount(docType, docNumber, linkTransferAccountInfo);
        }