@@ -862,7 +862,9 @@ def mock_global_data_autouse():
862862 "other.lang_tools.my_gettext" ,
863863 side_effect = lambda chat_id , key , param = None , ** kwargs : f"text { key } " ,
864864 )
865- p2 = patch ("infrastructure.utils.common_utils.get_user_id" , return_value = 123 )
865+ from infrastructure .utils import common_utils
866+
867+ p2 = patch .object (common_utils , "get_user_id" , return_value = 123 )
866868
867869 p3 .start ()
868870 p2 .start ()
@@ -1187,22 +1189,35 @@ async def get_ledgers(request):
11871189 state .requests .append (
11881190 {"endpoint" : "ledgers" , "method" : "GET" , "params" : params }
11891191 )
1192+ ledger_record = {
1193+ "id" : "123456789" ,
1194+ "sequence" : 12345 ,
1195+ "hash" : "hash123" ,
1196+ "paging_token" : "12345" ,
1197+ "closed_at" : "2024-01-01T00:00:00Z" ,
1198+ }
1199+
1200+ if "text/event-stream" in request .headers .get ("Accept" , "" ):
1201+ import json
1202+
1203+ response = web .StreamResponse (
1204+ status = 200 ,
1205+ reason = "OK" ,
1206+ headers = {
1207+ "Content-Type" : "text/event-stream" ,
1208+ "Cache-Control" : "no-cache" ,
1209+ "Connection" : "keep-alive" ,
1210+ },
1211+ )
1212+ await response .prepare (request )
1213+ await response .write (b'event: open\n data: "hello"\n \n ' )
1214+ await response .write (
1215+ f"data: { json .dumps (ledger_record )} \n \n " .encode ("utf-8" )
1216+ )
1217+ return response
1218+
11901219 # Return a simple ledger list to satisfy basic polling
1191- return web .json_response (
1192- {
1193- "_embedded" : {
1194- "records" : [
1195- {
1196- "id" : "123456789" ,
1197- "sequence" : 12345 ,
1198- "hash" : "hash123" ,
1199- "paging_token" : "12345" ,
1200- "closed_at" : "2024-01-01T00:00:00Z" ,
1201- }
1202- ]
1203- }
1204- }
1205- )
1220+ return web .json_response ({"_embedded" : {"records" : [ledger_record ]}})
12061221
12071222 @routes .get ("/ledgers/{sequence}" )
12081223 async def get_ledger_by_seq (request ):
@@ -1217,6 +1232,26 @@ async def get_ledger_by_seq(request):
12171232 }
12181233 )
12191234
1235+ @routes .get ("/ledgers/{sequence}/transactions" )
1236+ async def get_ledger_transactions (request ):
1237+ """Mock transactions-by-ledger endpoint used by notifier polling."""
1238+ seq = request .match_info ["sequence" ]
1239+ params = dict (request .query )
1240+ state .requests .append (
1241+ {
1242+ "endpoint" : "ledger-transactions" ,
1243+ "method" : "GET" ,
1244+ "sequence" : seq ,
1245+ "params" : params ,
1246+ }
1247+ )
1248+
1249+ cursor = params .get ("cursor" , "0" )
1250+ limit = int (params .get ("limit" , 10 ))
1251+ filtered = [tx for tx in state .transactions if tx ["paging_token" ] > cursor ]
1252+ records = filtered [:limit ]
1253+ return web .json_response ({"_embedded" : {"records" : records }})
1254+
12201255 @routes .get ("/operations" )
12211256 async def get_operations (request ):
12221257 """Mock operations endpoint."""
0 commit comments