def test_request_validate_expiry(self, modtime):
        modtime.now.return_value = datetime(year=2019, month=3, day=10)

        request = PaymentRequest()
        request.amount = Amount({'value': 0.1, 'currency': Currency.RUB})
        request.payment_method_data = PaymentDataBankCard(
            card={
                "number": "4111111111111111",
                "expiry_year": "2019",
                "expiry_month": "11",
                "csc": "111"
            })

        # Should pass other validations
        request.validate()

        # Obviously expired
        request.payment_method_data.card.expiry_year = '2018'
        with self.assertRaises(ValueError):
            request.validate()

        # Same month
        request.payment_method_data.card.expiry_year = '2019'
        request.payment_method_data.card.expiry_month = '03'
        request.validate()

        # Just a notch before expiration (same timezone)
        modtime.now.return_value = datetime(year=2019,
                                            month=3,
                                            day=31,
                                            hour=23,
                                            minute=59,
                                            second=59)
        request.payment_method_data.card.expiry_year = '2019'
        request.payment_method_data.card.expiry_month = '03'
        request.validate()

        # Just a notch before expiration (worst timezone case)
        client_tz = timezone(timedelta(hours=-12))
        bank_tz = timezone(timedelta(hours=+14))
        tz_offset = datetime.now(client_tz) - datetime.now(bank_tz)
        tz_offset += timedelta(hours=1)  # DST
        modtime.now.return_value += tz_offset
        request.validate()

        # Couple days after expiration
        modtime.now.return_value = datetime(year=2019, month=4, day=3)
        with self.assertRaises(ValueError):
            request.validate()
Exemplo n.º 2
0
    def test_bank_card_cast(self):
        payment_data = RequestPaymentDataBankCard()
        payment_data.type = PaymentMethodType.BANK_CARD
        payment_data.card = RequestCreditCard({
            'number': '8888888888880000',
            'expiry_year': '2018',
            'expiry_month': '10',
            'csc': '111',
            'cardholder': 'test'
        })

        self.assertEqual(
            {
                'type': PaymentMethodType.BANK_CARD,
                'card': {
                    'number': '8888888888880000',
                    'expiry_year': '2018',
                    'expiry_month': '10',
                    'csc': '111',
                    'cardholder': 'test'
                }
            }, dict(payment_data))

        payment_data.card = {
            'number': '0000000000008888',
            'expiry_year': '2018',
            'expiry_month': '10',
            'csc': '111',
            'cardholder': 'test'
        }

        self.assertEqual(
            {
                'type': PaymentMethodType.BANK_CARD,
                'card': {
                    'number': '0000000000008888',
                    'expiry_year': '2018',
                    'expiry_month': '10',
                    'csc': '111',
                    'cardholder': 'test'
                }
            }, dict(payment_data))

        with self.assertRaises(TypeError):
            payment_data.card = 'invalid type'

        payment_data = ResponsePaymentDataBankCard()
        payment_data.type = PaymentMethodType.BANK_CARD
        payment_data.card = ResponseCreditCard({
            'last4': '0000',
            'expiry_year': '2010',
            'expiry_month': '02',
            'card_type': CardType.VISA
        })

        self.assertEqual(
            {
                'type': PaymentMethodType.BANK_CARD,
                'card': {
                    'last4': '0000',
                    'expiry_year': '2010',
                    'expiry_month': '02',
                    'card_type': CardType.VISA
                }
            }, dict(payment_data))

        payment_data.card = {
            'last4': '0000',
            'expiry_year': '2010',
            'expiry_month': '02',
            'card_type': CardType.VISA
        }

        self.assertEqual(
            {
                'type': PaymentMethodType.BANK_CARD,
                'card': {
                    'last4': '0000',
                    'expiry_year': '2010',
                    'expiry_month': '02',
                    'card_type': CardType.VISA
                }
            }, dict(payment_data))

        with self.assertRaises(TypeError):
            payment_data.card = 'invalid type'