@@ -1582,6 +1582,57 @@ describe("grouped chat rendering", () => {
15821582 vi . unstubAllGlobals ( ) ;
15831583 } ) ;
15841584
1585+ it ( "renders canonical inbound media refs through the Control UI media route" , async ( ) => {
1586+ resetAssistantAttachmentAvailabilityCacheForTest ( ) ;
1587+ const fetchMock = vi . fn ( async ( url : string , init ?: RequestInit ) => {
1588+ const mediaUrl = new URL ( url , "http://control.test" ) ;
1589+ expect ( mediaUrl . pathname ) . toBe ( "/openclaw/__openclaw__/assistant-media" ) ;
1590+ expect ( [ ...mediaUrl . searchParams . keys ( ) ] . toSorted ( ) ) . toEqual ( [ "meta" , "source" ] ) ;
1591+ expect ( mediaUrl . searchParams . get ( "meta" ) ) . toBe ( "1" ) ;
1592+ expect ( mediaUrl . searchParams . get ( "source" ) ) . toBe ( "media://inbound/telegram-photo.png" ) ;
1593+ const headers = init ?. headers as Headers ;
1594+ expect ( headers . get ( "Authorization" ) ) . toBe ( "Bearer session-token" ) ;
1595+ return {
1596+ ok : true ,
1597+ json : async ( ) => mediaTicketPayload ( "ticket-inbound" ) ,
1598+ } ;
1599+ } ) ;
1600+ vi . stubGlobal ( "fetch" , fetchMock as unknown as typeof fetch ) ;
1601+
1602+ const container = document . createElement ( "div" ) ;
1603+ const renderMessage = ( ) =>
1604+ renderGroupedMessage (
1605+ container ,
1606+ {
1607+ id : "user-inbound-media-ref" ,
1608+ role : "user" ,
1609+ content : "" ,
1610+ MediaPath : "media://inbound/telegram-photo.png" ,
1611+ MediaType : "image/png" ,
1612+ timestamp : Date . now ( ) ,
1613+ } ,
1614+ "user" ,
1615+ {
1616+ showToolCalls : false ,
1617+ basePath : "/openclaw" ,
1618+ assistantAttachmentAuthToken : "session-token" ,
1619+ localMediaPreviewRoots : [ ] ,
1620+ onRequestUpdate : renderMessage ,
1621+ } ,
1622+ ) ;
1623+
1624+ renderMessage ( ) ;
1625+ await flushAssistantAttachmentAvailabilityChecks ( ) ;
1626+
1627+ expect ( fetchMock ) . toHaveBeenCalledTimes ( 1 ) ;
1628+ expect (
1629+ container . querySelector < HTMLImageElement > ( ".chat-message-image" ) ?. getAttribute ( "src" ) ,
1630+ ) . toBe (
1631+ "/openclaw/__openclaw__/assistant-media?source=media%3A%2F%2Finbound%2Ftelegram-photo.png&mediaTicket=ticket-inbound" ,
1632+ ) ;
1633+ vi . unstubAllGlobals ( ) ;
1634+ } ) ;
1635+
15851636 it ( "fetches managed chat images with auth and renders blob previews" , async ( ) => {
15861637 resetAssistantAttachmentAvailabilityCacheForTest ( ) ;
15871638 const managedChatImageUrl =
0 commit comments