@@ -202,6 +202,158 @@ describe("Consumer", () => {
202202 } )
203203 } )
204204
205+ test ( "consumer can handle message on stream with filter on message properties" , async ( ) => {
206+ const publisher = await connection . createPublisher ( { queue : { name : streamName } } )
207+ const filteredMessage = createAmqpMessage ( {
208+ body : "my body" ,
209+ message_properties : {
210+ subject : "foo" ,
211+ } ,
212+ } )
213+ const discardedMessage = createAmqpMessage ( {
214+ body : "discard me" ,
215+ message_properties : {
216+ subject : "bar" ,
217+ } ,
218+ } )
219+ await publisher . publish ( filteredMessage )
220+ await publisher . publish ( discardedMessage )
221+ let received : number = 0
222+
223+ const consumer = await connection . createConsumer ( {
224+ stream : {
225+ name : streamName ,
226+ offset : Offset . first ( ) ,
227+ matchUnfiltered : false ,
228+ messagePropertiesFilter : { subject : "foo" } ,
229+ } ,
230+ messageHandler : ( context ) => {
231+ received ++
232+ context . accept ( )
233+ } ,
234+ } )
235+ consumer . start ( )
236+
237+ await eventually ( ( ) => {
238+ expect ( received ) . to . be . eql ( 1 )
239+ } )
240+ } )
241+
242+ test ( "consumer can handle message on stream with filter on application properties" , async ( ) => {
243+ const publisher = await connection . createPublisher ( { queue : { name : streamName } } )
244+ const filteredMessage = createAmqpMessage ( {
245+ body : "my body" ,
246+ application_properties : {
247+ test : "foo" ,
248+ } ,
249+ } )
250+ const discardedMessage = createAmqpMessage ( {
251+ body : "discard me" ,
252+ application_properties : {
253+ test : "bar" ,
254+ } ,
255+ } )
256+ await publisher . publish ( filteredMessage )
257+ await publisher . publish ( discardedMessage )
258+ let received : number = 0
259+
260+ const consumer = await connection . createConsumer ( {
261+ stream : {
262+ name : streamName ,
263+ offset : Offset . first ( ) ,
264+ matchUnfiltered : false ,
265+ applicationPropertiesFilter : { test : "foo" } ,
266+ } ,
267+ messageHandler : ( context ) => {
268+ received ++
269+ context . accept ( )
270+ } ,
271+ } )
272+ consumer . start ( )
273+
274+ await eventually ( ( ) => {
275+ expect ( received ) . to . be . eql ( 1 )
276+ } )
277+ } )
278+
279+ test ( "consumer can handle message on stream with SQL filters on message properties" , async ( ) => {
280+ const publisher = await connection . createPublisher ( { queue : { name : streamName } } )
281+ const filteredMessage = createAmqpMessage ( {
282+ body : "my body" ,
283+ message_properties : {
284+ subject : "foo" ,
285+ } ,
286+ } )
287+ const discardedMessage = createAmqpMessage ( {
288+ body : "discard me" ,
289+ message_properties : {
290+ subject : "bar" ,
291+ } ,
292+ } )
293+ await publisher . publish ( filteredMessage )
294+ await publisher . publish ( discardedMessage )
295+ let received : string = ""
296+
297+ const consumer = await connection . createConsumer ( {
298+ stream : {
299+ name : streamName ,
300+ offset : Offset . first ( ) ,
301+ matchUnfiltered : false ,
302+ sqlFilter : "properties.subject = 'foo'" ,
303+ } ,
304+ messageHandler : ( context , message ) => {
305+ if ( message . subject && message . subject == "foo" ) {
306+ received = message . body
307+ }
308+ context . accept ( )
309+ } ,
310+ } )
311+ consumer . start ( )
312+
313+ await eventually ( ( ) => {
314+ expect ( received ) . to . be . eql ( "my body" )
315+ } )
316+ } )
317+
318+ test ( "consumer can handle message on stream with SQL filters on message application properties" , async ( ) => {
319+ const publisher = await connection . createPublisher ( { queue : { name : streamName } } )
320+ const filteredMessage = createAmqpMessage ( {
321+ body : "my body" ,
322+ application_properties : {
323+ test : "foo" ,
324+ } ,
325+ } )
326+ const discardedMessage = createAmqpMessage ( {
327+ body : "discard me" ,
328+ application_properties : {
329+ test : "bar" ,
330+ } ,
331+ } )
332+ await publisher . publish ( filteredMessage )
333+ await publisher . publish ( discardedMessage )
334+ let received : string = ""
335+
336+ const consumer = await connection . createConsumer ( {
337+ stream : {
338+ name : streamName ,
339+ offset : Offset . first ( ) ,
340+ matchUnfiltered : false ,
341+ sqlFilter : "application_properties.test = 'foo'" ,
342+ } ,
343+ messageHandler : ( context , message ) => {
344+ if ( message . application_properties && message . application_properties . test == "foo" ) {
345+ received = message . body
346+ }
347+ context . accept ( )
348+ } ,
349+ } )
350+ consumer . start ( )
351+
352+ await eventually ( ( ) => {
353+ expect ( received ) . to . be . eql ( "my body" )
354+ } )
355+ } )
356+
205357 test ( "consumer can discard a message published to a queue" , async ( ) => {
206358 const publisher = await connection . createPublisher ( { queue : { name : discardQueueName } } )
207359 const expectedBody = "ciao"
0 commit comments