public void MapTransactionResult_NormalTransaction_MapsAndMaskData()
        {
            var mapper     = new TransactionResultMapper();
            var tansaction = new Models.Transaction
            {
                Amount              = 1.0m,
                CardHolderName      = string.Empty,
                CardNumber          = "0000-1111-2222-3333",
                CurrencyISO4217Code = "EUR",
                CVVNumber           = 123,
                ExperyDate          = new DateTime(1, 1, 1)
            };
            var paymentState = new PaymentState
            {
                Code = (PaymentStateCode)1,
                Id   = string.Empty
            };

            var result = mapper.Map(paymentState, tansaction);

            Assert.AreEqual(result.Code, PaymentStatusCode.Success);
            Assert.AreEqual(result.BankId, string.Empty);
            Assert.IsNull(result.PaymentId);
            Assert.IsNotNull(result.TransactionDetails);
        }
        public void MapTransactionResult_NullPaymentState_ThrowsArgumentNullException()
        {
            var mapper = new TransactionResultMapper();

            bool thrown = false;

            try
            {
                var result = mapper.Map(null, new Transaction());
            }
            catch (ArgumentNullException)
            {
                thrown = true;
            }

            Assert.IsTrue(thrown);
        }
        public void MapTQR_NormalTransaction_MapsAndMaskData()
        {
            const string lastFourDigit = "3333";

            var mapper = new TransactionResultMapper();
            var input  = new Models.TransactionResult
            {
                Code               = (PaymentStatusCode)1,
                BankId             = string.Empty,
                PaymentId          = string.Empty,
                TransactionDetails = new Models.Transaction
                {
                    Amount              = 1.0m,
                    CardHolderName      = string.Empty,
                    CardNumber          = $"0000-1111-2222-{lastFourDigit}",
                    CurrencyISO4217Code = "EUR",
                    CVVNumber           = 123,
                    ExperyDate          = new DateTime(1, 1, 1)
                }
            };

            var result = mapper.Map(input);

            Models.Transaction resultTransaction = result.TransactionDetails;
            Models.Transaction inputTransaction  = input.TransactionDetails;

            Assert.AreEqual(result.Code, input.Code);
            Assert.AreEqual(result.PaymentId, input.PaymentId);
            Assert.AreEqual(resultTransaction.Amount, inputTransaction.Amount);
            Assert.AreEqual(resultTransaction.CardHolderName, inputTransaction.CardHolderName);
            Assert.AreEqual(resultTransaction.CurrencyISO4217Code, inputTransaction.CurrencyISO4217Code);
            Assert.IsTrue(resultTransaction.ExperyDate.CompareTo(inputTransaction.ExperyDate) == 0);
            Assert.IsNull(resultTransaction.CVVNumber);

            Assert.IsTrue(resultTransaction.CardNumber.StartsWith(TransactionResultMapper.CARD_MASK));
            Assert.IsTrue(resultTransaction.CardNumber.EndsWith(lastFourDigit));
        }