Пример #1
0
    def test_with_value(self, requests_mock):
        """
        Test the value returned when the GOV.UK Pay response data includes next_url.
        """
        govuk_payment_id = '123abc123abc123abc123abc12'
        next_url = 'https://payment.example.com/123abc'
        requests_mock.get(
            govuk_url(f'payments/{govuk_payment_id}'),
            status_code=200,
            json={
                'state': {
                    'status': 'started',
                    'finished': False
                },
                'payment_id': govuk_payment_id,
                '_links': {
                    'next_url': {
                        'href': next_url,
                        'method': 'GET',
                    },
                },
            },
        )

        session = PaymentGatewaySession(govuk_payment_id=govuk_payment_id)
        assert session.get_payment_url() == next_url
Пример #2
0
    def test_with_unchanged_govuk_payment_status_doesnt_change_anything(
        self,
        status,
        requests_mock,
    ):
        """
        Test that if the GOV.UK payment status is the same as the payment gateway session one,
        (meaning that the payment gateway session is up-to-date), the record is not changed.
        """
        session = PaymentGatewaySession(status=status)
        url = govuk_url(f'payments/{session.govuk_payment_id}')
        requests_mock.get(
            url,
            status_code=200,
            json={
                'state': {
                    'status': status,
                    'finished': False
                },
            },
        )

        assert not session.refresh_from_govuk_payment()
        assert session.status == status
        assert Payment.objects.count() == 0

        assert requests_mock.call_count == 1
Пример #3
0
    def test_already_finished_doesnt_do_anything(self, status, requests_mock):
        """
        Test that if the payment gateway session is already finished, the system
        doesn't call GOV.UK Pay as it's already in its end state.
        """
        session = PaymentGatewaySession(status=status)

        assert not session.refresh_from_govuk_payment()
        assert not requests_mock.called
Пример #4
0
 def test_doesnt_call_govuk_pay_if_finished(self, session_status, requests_mock):
     """
     Test that if the payment gateway session is finished, no call to GOV.UK Pay is made
     and the method returns an empty string.
     """
     session = PaymentGatewaySession(
         status=session_status,
         govuk_payment_id='123abc123abc123abc123abc12',
     )
     assert session.get_payment_url() == ''
     assert not requests_mock.called
Пример #5
0
    def test_without_value(self, requests_mock):
        """
        Test that an empty string is returned when the GOV.UK Pay response data
        doesn't include next_url.
        """
        govuk_payment_id = '123abc123abc123abc123abc12'
        requests_mock.get(
            govuk_url(f'payments/{govuk_payment_id}'),
            status_code=200,
            json={
                'state': {'status': 'cancelled', 'finished': True},
                'payment_id': govuk_payment_id,
                '_links': {
                    'next_url': None,
                },
            },
        )

        session = PaymentGatewaySession(govuk_payment_id=govuk_payment_id)
        assert session.get_payment_url() == ''
Пример #6
0
 def test_value(self, status, finished):
     """
     Test the return value of `is_finished` with different values of session.status.
     """
     session = PaymentGatewaySession(status=status)
     assert session.is_finished() == finished