diff --git a/lnbits/core/crud/payments.py b/lnbits/core/crud/payments.py index f9978db91..6cedd2711 100644 --- a/lnbits/core/crud/payments.py +++ b/lnbits/core/crud/payments.py @@ -1,3 +1,4 @@ +from datetime import datetime, timezone from time import time from typing import Any @@ -304,8 +305,16 @@ async def update_payment_checking_id( checking_id: str, new_checking_id: str, conn: Connection | None = None ) -> None: await (conn or db).execute( - "UPDATE apipayments SET checking_id = :new_id WHERE checking_id = :old_id", - {"new_id": new_checking_id, "old_id": checking_id}, + f""" + UPDATE apipayments + SET checking_id = :new_id, updated_at = {db.timestamp_placeholder('now')} + WHERE checking_id = :old_id + """, # noqa: S608 + { + "new_id": new_checking_id, + "old_id": checking_id, + "now": int(time()), + }, ) @@ -314,6 +323,7 @@ async def update_payment( new_checking_id: str | None = None, conn: Connection | None = None, ) -> None: + payment.updated_at = datetime.now(timezone.utc) await (conn or db).update( "apipayments", payment, "WHERE checking_id = :checking_id" ) diff --git a/tests/unit/test_crud_payments.py b/tests/unit/test_crud_payments.py index 33dd8e3f6..6bd2ad993 100644 --- a/tests/unit/test_crud_payments.py +++ b/tests/unit/test_crud_payments.py @@ -1,3 +1,5 @@ +import asyncio + import pytest from lnbits.core.crud import ( @@ -6,6 +8,7 @@ from lnbits.core.crud import ( get_payments_paginated, update_payment, ) +from lnbits.core.crud.payments import get_standalone_payment from lnbits.core.models import PaymentFilters, PaymentState from lnbits.core.services import ( create_invoice, @@ -39,6 +42,15 @@ async def test_crud_get_payments(app): filters = Filters(limit=100) payments = await get_payments(wallet_id=wallet.id, filters=filters) assert len(payments) == 22, "should return 22 successful payments" + first_payment = payments[0] + first_payment_updated_at = first_payment.updated_at.replace() + await update_payment(first_payment) + await asyncio.sleep(0.1) # ensure updated_at will be different + first_payment_updated = await get_standalone_payment(first_payment.checking_id) + assert first_payment_updated, "Updated payment not found" + assert ( + first_payment_updated.updated_at > first_payment_updated_at + ), "Updated payment timestamp is not newer" payments = await get_payments(wallet_id=wallet.id, incoming=True, filters=filters) assert len(payments) == 11, "should return 11 successful incoming payments"