Skip to content

Commit 6e73d65

Browse files
fix: Order transfers by timestamp in descending order
1 parent b89b695 commit 6e73d65

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

safe_transaction_service/history/tests/test_views.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3072,6 +3072,16 @@ def test_incoming_transfers_view(self):
30723072
],
30733073
)
30743074

3075+
# Validate ordering by timestamp (descending - newest first)
3076+
self.assertGreater(
3077+
ethereum_erc_721_event.timestamp,
3078+
ethereum_erc_20_event.timestamp,
3079+
)
3080+
self.assertGreater(
3081+
ethereum_erc_20_event.timestamp,
3082+
internal_tx.timestamp,
3083+
)
3084+
30753085
def test_transfers_view(self):
30763086
safe_address = Account.create().address
30773087
response = self.client.get(
@@ -3364,6 +3374,28 @@ def test_transfers_view(self):
33643374
for result in response.data["results"]:
33653375
self.assertNotEqual(result["type"], TransferType.ETHER_TRANSFER.name)
33663376

3377+
# Validate ordering by timestamp (descending - newest first)
3378+
self.assertGreater(
3379+
ethereum_erc_721_event_2.timestamp,
3380+
ethereum_erc_721_event.timestamp,
3381+
)
3382+
self.assertGreater(
3383+
ethereum_erc_721_event.timestamp,
3384+
ethereum_erc_20_event_2.timestamp,
3385+
)
3386+
self.assertGreater(
3387+
ethereum_erc_20_event_2.timestamp,
3388+
ethereum_erc_20_event.timestamp,
3389+
)
3390+
self.assertGreater(
3391+
ethereum_erc_20_event.timestamp,
3392+
internal_tx_2.timestamp,
3393+
)
3394+
self.assertGreater(
3395+
internal_tx_2.timestamp,
3396+
internal_tx.timestamp,
3397+
)
3398+
33673399
# Test that the result should be cached
33683400
# Mock get_queryset with empty queryset return value to get proper error in case of fail
33693401
with mock.patch.object(

safe_transaction_service/history/views.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -948,13 +948,13 @@ class SafeTransferListView(ListAPIView):
948948

949949
def get_transfers(self, address: str):
950950
erc20_queryset = self.filter_queryset(
951-
ERC20Transfer.objects.to_or_from(address).token_txs()
951+
ERC20Transfer.objects.to_or_from(address).token_txs().order_by("-timestamp")
952952
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
953953
erc721_queryset = self.filter_queryset(
954-
ERC721Transfer.objects.to_or_from(address).token_txs()
954+
ERC721Transfer.objects.to_or_from(address).token_txs().order_by("-timestamp")
955955
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
956956
ether_queryset = self.filter_queryset(
957-
InternalTx.objects.ether_txs_for_address(address)
957+
InternalTx.objects.ether_txs_for_address(address).order_by("-timestamp")
958958
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
959959
return InternalTx.objects.union_ether_and_token_txs(
960960
erc20_queryset, erc721_queryset, ether_queryset
@@ -1029,13 +1029,13 @@ def get(self, *args, **kwargs):
10291029

10301030
def get_transfers(self, address: str):
10311031
erc20_queryset = self.filter_queryset(
1032-
ERC20Transfer.objects.incoming(address).token_txs()
1032+
ERC20Transfer.objects.incoming(address).token_txs().order_by("-timestamp")
10331033
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
10341034
erc721_queryset = self.filter_queryset(
1035-
ERC721Transfer.objects.incoming(address).token_txs()
1035+
ERC721Transfer.objects.incoming(address).token_txs().order_by("-timestamp")
10361036
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
10371037
ether_queryset = self.filter_queryset(
1038-
InternalTx.objects.ether_incoming_txs_for_address(address)
1038+
InternalTx.objects.ether_incoming_txs_for_address(address).order_by("-timestamp")
10391039
)[: settings.TX_SERVICE_ALL_TXS_ENDPOINT_LIMIT_TRANSFERS]
10401040

10411041
return InternalTx.objects.union_ether_and_token_txs(

0 commit comments

Comments
 (0)