File tree Expand file tree Collapse file tree 6 files changed +149
-3
lines changed Expand file tree Collapse file tree 6 files changed +149
-3
lines changed Original file line number Diff line number Diff line change @@ -36,6 +36,9 @@ Tests are written per protocol layer: http or grpc. This is done because Dapr re
36
36
# Ports: 1883 = TCP MQTT Port | 8081 = HTTP API | 8083 = MQTT/SSL Port | 8883 = MQTT/Websocket/SSL Port | 8084 = MQTT/Websocket Port | 18083 = Dashboard
37
37
docker run -d --rm --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx
38
38
39
+ # Start MongoDB for State Query
40
+ docker run -d --rm --name mongodb -p 27017:27017 mongo
41
+
39
42
# Run Unit Tests
40
43
npm run test:unit:main
41
44
npm run test:unit:actors
Original file line number Diff line number Diff line change @@ -71,7 +71,7 @@ export default class HTTPClientState implements IClientState {
71
71
"Content-Type" : "application/json"
72
72
} ,
73
73
body : JSON . stringify ( {
74
- query
74
+ ... query
75
75
} )
76
76
} ) ;
77
77
Original file line number Diff line number Diff line change @@ -100,7 +100,7 @@ export default class DaprServer {
100
100
}
101
101
102
102
async stopServer ( ) : Promise < void > {
103
- await this . daprServer . stopServer ( ) ;
103
+ await this . daprServer . stop ( ) ;
104
104
}
105
105
106
106
getDaprClient ( ) : IServer {
Original file line number Diff line number Diff line change @@ -3,7 +3,7 @@ import { Enumerable } from "./Enumerable.type"
3
3
export type StateQueryType = {
4
4
filter : StateQueryFilter ;
5
5
sort : StateQuerySort [ ] ;
6
- pagination : StateQueryPagination ;
6
+ page : StateQueryPagination ;
7
7
}
8
8
9
9
type StateQuerySort = {
Original file line number Diff line number Diff line change
1
+ apiVersion : dapr.io/v1alpha1
2
+ kind : Component
3
+ metadata :
4
+ name : state-mongodb
5
+ spec :
6
+ type : state.mongodb
7
+ version : v1
8
+ metadata :
9
+ - name : host
10
+ value : localhost:27017
Original file line number Diff line number Diff line change @@ -341,6 +341,139 @@ describe('http/main', () => {
341
341
expect ( resTransactionDelete ) . toEqual ( '' ) ;
342
342
expect ( resTransactionUpsert ) . toEqual ( 'my-new-data-1' ) ;
343
343
} ) ;
344
+
345
+ it ( 'should be able to query state' , async ( ) => {
346
+ // First save our data
347
+ await client . state . save ( "state-mongodb" , [
348
+ {
349
+ key : 'key-1' ,
350
+ value : {
351
+ person : {
352
+ id : 1036 ,
353
+ org : "Dev Ops"
354
+ } ,
355
+ city : "Seattle" ,
356
+ state : "WA"
357
+ }
358
+ } ,
359
+ {
360
+ key : 'key-2' ,
361
+ value : {
362
+ person : {
363
+ id : 1037 ,
364
+ org : "Developers"
365
+ } ,
366
+ city : "Seattle" ,
367
+ state : "WA"
368
+ } ,
369
+ } ,
370
+ {
371
+ key : 'key-3' ,
372
+ value : {
373
+ person : {
374
+ id : 1038 ,
375
+ org : "Developers"
376
+ } ,
377
+ city : "Seattle" ,
378
+ state : "WA"
379
+ } ,
380
+ } ,
381
+ {
382
+ key : 'key-4' ,
383
+ value : {
384
+ person : {
385
+ id : 1039 ,
386
+ org : "Dev Ops"
387
+ } ,
388
+ city : "Spokane" ,
389
+ state : "WA"
390
+ } ,
391
+ } ,
392
+ {
393
+ key : 'key-5' ,
394
+ value : {
395
+ person : {
396
+ id : 1040 ,
397
+ org : "Developers"
398
+ } ,
399
+ city : "Seattle" ,
400
+ state : "WA"
401
+ } ,
402
+ } ,
403
+ {
404
+ key : 'key-6' ,
405
+ value : {
406
+ person : {
407
+ id : 1041 ,
408
+ org : "Dev Ops"
409
+ } ,
410
+ city : "Seattle" ,
411
+ state : "WA"
412
+ } ,
413
+ } ,
414
+ {
415
+ key : 'key-7' ,
416
+ value : {
417
+ person : {
418
+ id : 1042 ,
419
+ org : "Finance"
420
+ } ,
421
+ city : "Brussels" ,
422
+ state : "Flemish-Brabant"
423
+ } ,
424
+ } ,
425
+ {
426
+ key : 'key-8' ,
427
+ value : {
428
+ person : {
429
+ id : 1043 ,
430
+ org : "Finance"
431
+ } ,
432
+ city : "San Francisco" ,
433
+ state : "CA"
434
+ } ,
435
+ }
436
+ ] ) ;
437
+
438
+ const res = await client . state . query ( "state-mongodb" , {
439
+ filter : {
440
+ OR : [
441
+ {
442
+ EQ : { "value.person.org" : "Dev Ops" }
443
+ } ,
444
+ {
445
+ "AND" : [
446
+ {
447
+ "EQ" : { "value.person.org" : "Finance" }
448
+ } ,
449
+ {
450
+ "IN" : { "value.state" : [ "CA" , "WA" ] }
451
+ }
452
+ ]
453
+ }
454
+ ]
455
+ } ,
456
+ sort : [
457
+ {
458
+ key : "value.state" ,
459
+ order : "DESC"
460
+ }
461
+ ] ,
462
+ page : {
463
+ limit : 10
464
+ }
465
+ } ) ;
466
+
467
+ expect ( res . results . length ) . toEqual ( 4 ) ;
468
+ expect ( res . results . map ( i => i . key ) . indexOf ( "key-1" ) ) . toBeGreaterThan ( - 1 ) ;
469
+ expect ( res . results . map ( i => i . key ) . indexOf ( "key-4" ) ) . toBeGreaterThan ( - 1 ) ;
470
+ expect ( res . results . map ( i => i . key ) . indexOf ( "key-6" ) ) . toBeGreaterThan ( - 1 ) ;
471
+ expect ( res . results . map ( i => i . key ) . indexOf ( "key-8" ) ) . toBeGreaterThan ( - 1 ) ;
472
+
473
+ for ( let i = 1 ; i <= 8 ; i ++ ) {
474
+ await client . state . delete ( "state-mongodb" , `key-${ i } ` )
475
+ }
476
+ } ) ;
344
477
} ) ;
345
478
} ) ;
346
479
} ) ;
You can’t perform that action at this time.
0 commit comments