@@ -142,6 +142,69 @@ describe('RSocketServer', () => {
142142 } ) ;
143143
144144 describe ( 'RequestHandler' , ( ) => {
145+ it ( 'deserializes and serializes the channel\'s payload.data' , ( ) => {
146+ console . error = jest . fn ( ) ;
147+ const transport = genMockTransportServer ( ) ;
148+
149+ const makePayload = ( data ) => ( {
150+ type : FRAME_TYPES . PAYLOAD ,
151+ streamId : 1 ,
152+ flags : 32 , // next bit - invoke onNext
153+ data,
154+ } ) ;
155+
156+ const server = new RSocketServer ( {
157+ getRequestHandler : ( ) => {
158+ return {
159+ requestChannel : ( incomingFlowable ) => {
160+ // If the payload.data has 'name', reply with custom response
161+ return incomingFlowable . map ( payload => {
162+ if ( payload && payload . data && payload . data . name ) {
163+ return { data : { say : 'hello ' + payload . data . name } } ;
164+ } else {
165+ return payload ;
166+ }
167+ } ) ;
168+ } ,
169+ } ;
170+ } ,
171+ serializers :JsonSerializers ,
172+ transport,
173+ } ) ;
174+
175+ server . start ( ) ;
176+ transport . mock . connect ( ) ;
177+ connection . receive . mock . publisher . onNext ( {
178+ type : FRAME_TYPES . SETUP ,
179+ data : undefined ,
180+ dataMimeType : '<dataMimeType>' ,
181+ flags : 0 ,
182+ keepAlive : 42 ,
183+ lifetime : 2017 ,
184+ metadata : undefined ,
185+ metadataMimeType : '<metadataMimeType>' ,
186+ resumeToken : null ,
187+ streamId : 0 ,
188+ majorVersion : 1 ,
189+ minorVersion : 0 ,
190+ } ) ;
191+ connection . receive . mock . publisher . onNext ( {
192+ type : FRAME_TYPES . REQUEST_CHANNEL ,
193+ flags : 0 ,
194+ requestN : 100 ,
195+ streamId : 1 ,
196+ // data along with first REQUEST_CHANNEL frame
197+ data : JSON . stringify ( { name : 'Alex' } ) ,
198+ } ) ;
199+ // data as separate PAYLOAD frame
200+ connection . receive . mock . publisher . onNext ( makePayload ( JSON . stringify ( { name : 'Bob' } ) ) ) ;
201+ jest . runOnlyPendingTimers ( ) ;
202+
203+ expect ( connection . sendOne . mock . calls . length ) . toBe ( 3 ) ;
204+ expect ( connection . sendOne . mock . calls [ 1 ] [ 0 ] ) . toEqual ( makePayload ( JSON . stringify ( { say : 'hello Alex' } ) ) ) ;
205+ expect ( connection . sendOne . mock . calls [ 2 ] [ 0 ] ) . toEqual ( makePayload ( JSON . stringify ( { say : 'hello Bob' } ) ) ) ;
206+ } ) ;
207+
145208 it ( 'sends error if getRequestHandler throws' , ( ) => {
146209 const transport = genMockTransportServer ( ) ;
147210 const server = new RSocketServer ( {
0 commit comments