def test_returns_payments_with_last_payment_status_retry(self, app):
        # Given
        user = users_factories.UserFactory()
        booking = create_booking(user=user)
        offerer = booking.stock.offer.venue.managingOfferer
        retry_payment1 = create_payment(booking,
                                        offerer,
                                        10,
                                        status=TransactionStatus.RETRY)
        retry_payment2 = create_payment(booking,
                                        offerer,
                                        10,
                                        status=TransactionStatus.RETRY)
        pending_payment = create_payment(booking,
                                         offerer,
                                         10,
                                         status=TransactionStatus.PENDING)
        repository.save(retry_payment1, retry_payment2, pending_payment)

        # When
        payments = payment_queries.find_retry_payments()

        # Then
        assert len(payments) == 2
        for payment in payments:
            assert payment.currentStatus.status == TransactionStatus.RETRY
def concatenate_payments_with_errors_and_retries(
        payments: List[Payment]) -> List[Payment]:
    error_payments = payment_queries.find_error_payments()
    retry_payments = payment_queries.find_retry_payments()
    payments = payments + error_payments + retry_payments

    logger.info("[BATCH][PAYMENTS] %i Payments in status ERROR to send",
                len(error_payments))
    logger.info("[BATCH][PAYMENTS] %i Payments in status RETRY to send",
                len(retry_payments))
    logger.info("[BATCH][PAYMENTS] %i Payments in total to send",
                len(payments))

    return payments
    def test_does_not_return_payment_if_has_status_retry_but_not_last(
            self, app):
        # Given
        user = users_factories.UserFactory()
        booking = create_booking(user=user)
        payment = create_payment(booking,
                                 booking.stock.offer.venue.managingOfferer, 10)
        payment = create_payment(booking,
                                 booking.stock.offer.venue.managingOfferer, 10)
        pending_payment = create_payment(
            booking, booking.stock.offer.venue.managingOfferer, 10)
        retry_status = PaymentStatus()
        retry_status.status = TransactionStatus.RETRY
        sent_status = PaymentStatus()
        sent_status.status = TransactionStatus.SENT
        payment.statuses.extend([retry_status, sent_status])
        repository.save(payment, pending_payment)

        # When
        payments = payment_queries.find_retry_payments()

        # Then
        assert payments == []