@@ -9,6 +9,8 @@ import { afterEach, describe, expect, it, vi } from 'vitest'
99import { readDevframeInstances } from '../../node/instance-registry'
1010import { createDevServer } from '../dev'
1111
12+ const jsonHandler = vi . fn ( ( value : unknown ) => value )
13+
1214const definition = defineDevframe ( {
1315 id : 'dev-transports-test' ,
1416 name : 'Dev transports test' ,
@@ -20,13 +22,13 @@ const definition = defineDevframe({
2022 ctx . rpc . register ( defineRpcFunction ( {
2123 name : 'test:probe' ,
2224 type : 'query' ,
23- handler : ( ) => 'connected' ,
25+ handler : ( value : unknown ) => value ,
2426 } ) )
2527 ctx . rpc . register ( defineRpcFunction ( {
2628 name : 'test:json' ,
2729 type : 'query' ,
2830 jsonSerializable : true ,
29- handler : ( value : unknown ) => value ,
31+ handler : jsonHandler ,
3032 } ) )
3133 } ,
3234} )
@@ -70,7 +72,8 @@ describe('dev server transport handle', () => {
7072 sse : { path : '__sse' } ,
7173 } )
7274 await vi . waitFor ( ( ) => expect ( readDevframeInstances ( { instancesDir : registryDir } ) ) . toHaveLength ( 1 ) )
73- await callThroughHandle ( handle , '/' , 'sse' )
75+ await checkRpcCalls ( handle , '/' , 'sse' )
76+ await checkRpcCalls ( handle , '/' , 'sse' , 'http' )
7477 }
7578 finally {
7679 await handle . close ( )
@@ -96,8 +99,9 @@ describe('dev server transport handle', () => {
9699 expect ( handle . connectionMeta ( ) ) . toMatchObject ( httpMeta )
97100 expect ( handle . connectionMeta ( ) . jsonSerializableMethods ) . toContain ( 'test:json' )
98101 expect ( resolveClientTransport ( 'auto' , handle . connectionMeta ( ) ) ) . toBe ( 'websocket' )
99- await callThroughHandle ( handle , basePath , 'sse' )
100- await callThroughHandle ( handle , basePath , 'websocket' )
102+ await checkRpcCalls ( handle , basePath , 'sse' )
103+ await checkRpcCalls ( handle , basePath , 'websocket' )
104+ await checkRpcCalls ( handle , basePath , 'websocket' , 'http' )
101105 }
102106 finally {
103107 await handle . close ( )
@@ -109,7 +113,7 @@ describe('dev server transport handle', () => {
109113 const handle = await createDevServer ( definition , { ...options , sse : false } )
110114 try {
111115 expect ( handle . connectionMeta ( ) . sse ) . toBeUndefined ( )
112- await callThroughHandle ( handle , '/' , 'websocket' )
116+ await checkRpcCalls ( handle , '/' , 'websocket' )
113117 }
114118 finally {
115119 await handle . close ( )
@@ -124,6 +128,7 @@ describe('dev server transport handle', () => {
124128 expect ( handle . connectionMeta ( ) ) . toMatchObject ( { backend : 'none' } )
125129 expect ( handle . connectionMeta ( ) . websocket ) . toBeUndefined ( )
126130 expect ( handle . connectionMeta ( ) . sse ) . toBeUndefined ( )
131+ expect ( handle . connectionMeta ( ) ) . not . toHaveProperty ( 'jsonSerializableMethods' )
127132 expect ( ( await fetch ( `${ handle . origin } /__connection.json` ) ) . status ) . toBe ( 200 )
128133 }
129134 finally {
@@ -133,13 +138,17 @@ describe('dev server transport handle', () => {
133138 } )
134139} )
135140
136- async function callThroughHandle ( handle : Awaited < ReturnType < typeof createDevServer > > , basePath : string , transport : 'sse' | 'websocket' ) {
141+ async function checkRpcCalls ( handle : Awaited < ReturnType < typeof createDevServer > > , basePath : string , transport : 'sse' | 'websocket' , source : 'handle' | 'http' = 'handle ') {
137142 vi . stubGlobal ( 'location' , new URL ( `${ handle . origin } ${ basePath } ` ) )
138143 vi . stubGlobal ( 'navigator' , { userAgent : 'vitest' } )
144+ const metaBaseUrl = `${ handle . origin } ${ basePath } __connection.json`
145+ const connectionMeta = source === 'http'
146+ ? await fetch ( metaBaseUrl ) . then ( response => response . json ( ) )
147+ : handle . connectionMeta ( )
139148 const client = await getDevframeRpcClient ( {
140149 connection : {
141- connectionMeta : handle . connectionMeta ( ) ,
142- metaBaseUrl : ` ${ handle . origin } ${ basePath } __connection.json` ,
150+ connectionMeta,
151+ metaBaseUrl,
143152 } ,
144153 transport,
145154 otpParam : false ,
@@ -148,14 +157,15 @@ async function callThroughHandle(handle: Awaited<ReturnType<typeof createDevServ
148157 try {
149158 await client . ensureTrusted ( 2000 )
150159 expect ( client . transport ) . toBe ( transport )
151- await expect ( ( client . call as any ) ( 'test:probe' ) ) . resolves . toBe ( 'connected' )
160+ const map = new Map ( [
161+ [ 'key' , 42 ] ,
162+ ] )
163+ await expect ( ( client . call as any ) ( 'test:probe' , map ) ) . resolves . toEqual ( map )
152164 expect ( handle . rpcGroup . clients . length ) . toBeGreaterThan ( 0 )
153- if ( handle . connectionMeta ( ) . jsonSerializableMethods ?. includes ( 'test:json' ) ) {
154- await expect ( ( client . call as any ) ( 'test:json' , { value : 42 } ) ) . resolves . toEqual ( { value : 42 } )
155- await expect ( ( client . call as any ) ( 'test:json' , new Map ( [
156- [ 'key' , 42 ] ,
157- ] ) ) ) . rejects . toThrow ( )
158- }
165+ jsonHandler . mockClear ( )
166+ await expect ( ( client . call as any ) ( 'test:json' , { value : 42 } ) ) . resolves . toEqual ( { value : 42 } )
167+ await expect ( ( client . call as any ) ( 'test:json' , map ) ) . rejects . toThrow ( / M a p / )
168+ expect ( jsonHandler ) . toHaveBeenCalledTimes ( 1 )
159169 }
160170 finally {
161171 client . close ?.( )
0 commit comments