@@ -142,6 +142,69 @@ describe('RSocketServer', () => {
142
142
} ) ;
143
143
144
144
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
+
145
208
it ( 'sends error if getRequestHandler throws' , ( ) => {
146
209
const transport = genMockTransportServer ( ) ;
147
210
const server = new RSocketServer ( {
0 commit comments