1
+ import { marbles } from 'rxjs-marbles' ;
1
2
import { InMemoryDBEntity } from '../interfaces' ;
2
3
import { InMemoryDBService } from './in-memory-db.service' ;
3
4
@@ -43,6 +44,39 @@ describe('In Memory DB Service', () => {
43
44
expect ( actualRecord ) . toEqual ( expectedRecord ) ;
44
45
} ) ;
45
46
} ) ;
47
+
48
+ describe ( 'getAsync' , ( ) => {
49
+ it (
50
+ 'should return expected record as an observable if given valid id' ,
51
+ marbles ( m => {
52
+ // arrange
53
+ service . records = [ ...sampleRecords ] ;
54
+ const expectedRecord = m . cold ( 'a|' , sampleRecords [ 0 ] ) ;
55
+
56
+ // act
57
+ const actualRecord = m . cold ( 'a|' , service . getAsync ( 1 ) ) ;
58
+
59
+ // assert
60
+ m . expect ( actualRecord ) . toBeObservable ( expectedRecord ) ;
61
+ } ) ,
62
+ ) ;
63
+
64
+ it (
65
+ 'should return observable with no value given invalid id' ,
66
+ marbles ( m => {
67
+ // arrange
68
+ service . records = [ ...sampleRecords ] ;
69
+ const expectedRecord = m . cold ( 'a|' , { } ) ;
70
+
71
+ // act
72
+ const actualRecord = m . cold ( 'a|' , service . getAsync ( - 1 ) ) ;
73
+
74
+ // assert
75
+ m . expect ( actualRecord ) . toBeObservable ( expectedRecord ) ;
76
+ } ) ,
77
+ ) ;
78
+ } ) ;
79
+
46
80
describe ( 'getMany' , ( ) => {
47
81
it ( 'should return expected records if given valid ids' , ( ) => {
48
82
// arrange
@@ -68,6 +102,41 @@ describe('In Memory DB Service', () => {
68
102
expect ( actualRecords ) . toEqual ( expectedRecords ) ;
69
103
} ) ;
70
104
} ) ;
105
+
106
+ describe ( 'getManyAsync' , ( ) => {
107
+ it (
108
+ 'should return expected records as observable if given valid ids' ,
109
+ marbles ( m => {
110
+ // arrange
111
+ service . records = [ ...sampleRecords ] ;
112
+ const expectedRecord = m . cold ( 'a|' , [
113
+ ...[ sampleRecords [ 0 ] , sampleRecords [ 1 ] ] ,
114
+ ] ) ;
115
+
116
+ // act
117
+ const actualRecord = m . cold ( 'a|' , service . getManyAsync ( [ 1 , 2 ] ) ) ;
118
+
119
+ // assert
120
+ m . expect ( actualRecord ) . toBeObservable ( expectedRecord ) ;
121
+ } ) ,
122
+ ) ;
123
+
124
+ it (
125
+ 'should return only expected records as observables if given an invalid id' ,
126
+ marbles ( m => {
127
+ // arrange
128
+ service . records = [ ...sampleRecords ] ;
129
+ const expectedRecord = m . cold ( 'a|' , [ sampleRecords [ 0 ] ] ) ;
130
+
131
+ // act
132
+ const actualRecords = m . cold ( 'a|' , service . getManyAsync ( [ - 1 , 1 ] ) ) ;
133
+
134
+ // assert
135
+ m . expect ( actualRecords ) . toBeObservable ( expectedRecord ) ;
136
+ } ) ,
137
+ ) ;
138
+ } ) ;
139
+
71
140
describe ( 'getAll' , ( ) => {
72
141
it ( 'should return all expected records' , ( ) => {
73
142
// arrange
@@ -92,6 +161,38 @@ describe('In Memory DB Service', () => {
92
161
expect ( actualRecords ) . toEqual ( expectedRecords ) ;
93
162
} ) ;
94
163
} ) ;
164
+
165
+ describe ( 'getAllAsync' , ( ) => {
166
+ it (
167
+ 'should return all expected records as observable' ,
168
+ marbles ( m => {
169
+ // arrange
170
+ service . records = [ ...sampleRecords ] ;
171
+ const expectedRecords = m . cold ( 'a|' , service . records ) ;
172
+
173
+ // act
174
+ const actualRecords = m . cold ( 'a|' , service . getAllAsync ( ) ) ;
175
+
176
+ // assert
177
+ m . expect ( actualRecords ) . toBeObservable ( expectedRecords ) ;
178
+ } ) ,
179
+ ) ;
180
+ it (
181
+ 'should return empty array as observable if no records' ,
182
+ marbles ( m => {
183
+ // arrange
184
+ service . records = [ ] ;
185
+ const expectedRecords = m . cold ( 'a|' , [ ] ) ;
186
+
187
+ // act
188
+ const actualRecords = m . cold ( 'a|' , service . getAllAsync ( ) ) ;
189
+
190
+ // assert
191
+ m . expect ( actualRecords ) . toBeObservable ( expectedRecords ) ;
192
+ } ) ,
193
+ ) ;
194
+ } ) ;
195
+
95
196
describe ( 'create' , ( ) => {
96
197
it ( 'should update records with correct items' , ( ) => {
97
198
// arrange
@@ -118,6 +219,41 @@ describe('In Memory DB Service', () => {
118
219
expect ( actualRecord ) . toEqual ( expectedRecord ) ;
119
220
} ) ;
120
221
} ) ;
222
+
223
+ describe ( 'createAsync' , ( ) => {
224
+ it (
225
+ 'should update records with correct items asyncronously' ,
226
+ marbles ( m => {
227
+ // arrange
228
+ service . records = [ ] ;
229
+ const itemToAdd : Partial < TestEntity > = { someField : 'Test' } ;
230
+ const expectedRecords = m . cold ( 'a|' , [ ...[ { ...itemToAdd , id : 1 } ] ] ) ;
231
+
232
+ // act
233
+ service . createAsync ( itemToAdd ) ;
234
+ const actualRecords = m . cold ( 'a|' , service . records ) ;
235
+
236
+ // assert
237
+ m . expect ( actualRecords ) . toBeObservable ( expectedRecords ) ;
238
+ } ) ,
239
+ ) ;
240
+ it (
241
+ 'should return generated id as observable' ,
242
+ marbles ( m => {
243
+ // arrange
244
+ service . records = [ ] ;
245
+ const itemToAdd : Partial < TestEntity > = { someField : 'Test' } ;
246
+ const expectedRecord = m . cold ( 'a|' , { ...itemToAdd , id : 1 } ) ;
247
+
248
+ // act
249
+ const actualRecord = m . cold ( 'a|' , service . createAsync ( itemToAdd ) ) ;
250
+
251
+ // assert
252
+ m . expect ( actualRecord ) . toBeObservable ( expectedRecord ) ;
253
+ } ) ,
254
+ ) ;
255
+ } ) ;
256
+
121
257
describe ( 'createMany' , ( ) => {
122
258
it ( 'should update records with correct items' , ( ) => {
123
259
// arrange
@@ -156,6 +292,58 @@ describe('In Memory DB Service', () => {
156
292
expect ( actualGeneratedRecords ) . toEqual ( expectedGeneratedRecords ) ;
157
293
} ) ;
158
294
} ) ;
295
+
296
+ describe ( 'createManyAsync' , ( ) => {
297
+ it (
298
+ 'should update records with correct items asynchronously' ,
299
+ marbles ( m => {
300
+ // arrange
301
+ service . records = [ ] ;
302
+ const item1ToAdd : Partial < TestEntity > = { someField : 'Test' } ;
303
+ const item2ToAdd : Partial < TestEntity > = { someField : 'Another' } ;
304
+ const expectedRecords = m . cold ( 'a|' , [
305
+ ...[ { ...item1ToAdd , id : 1 } , { ...item2ToAdd , id : 2 } ] ,
306
+ ] ) ;
307
+
308
+ // act
309
+ const createdRecords = m . cold (
310
+ 'a|' ,
311
+ service . createManyAsync ( [ item1ToAdd , item2ToAdd ] ) ,
312
+ ) ;
313
+ const actualRecords = m . cold ( 'a|' , service . records ) ;
314
+
315
+ // assert
316
+ m . expect ( actualRecords ) . toBeObservable ( expectedRecords ) ;
317
+ m . expect ( createdRecords ) . toBeObservable ( expectedRecords ) ;
318
+ } ) ,
319
+ ) ;
320
+ it (
321
+ 'should return generated ids asyncronously' ,
322
+ marbles ( m => {
323
+ // arrange
324
+ service . records = [ ] ;
325
+ const item1ToAdd : Partial < TestEntity > = { someField : 'Test' } ;
326
+ const item2ToAdd : Partial < TestEntity > = { someField : 'Another' } ;
327
+
328
+ const expectedGeneratedRecords = m . cold ( 'a|' , [
329
+ { ...item1ToAdd , id : 1 } ,
330
+ { ...item2ToAdd , id : 2 } ,
331
+ ] ) ;
332
+
333
+ // act
334
+ const actualGeneratedRecords = m . cold (
335
+ 'a|' ,
336
+ service . createManyAsync ( [ item1ToAdd , item2ToAdd ] ) ,
337
+ ) ;
338
+
339
+ // assert
340
+ m . expect ( actualGeneratedRecords ) . toBeObservable (
341
+ expectedGeneratedRecords ,
342
+ ) ;
343
+ } ) ,
344
+ ) ;
345
+ } ) ;
346
+
159
347
describe ( 'update' , ( ) => {
160
348
it ( 'should update record as expected' , ( ) => {
161
349
// arrange
@@ -174,6 +362,31 @@ describe('In Memory DB Service', () => {
174
362
expect ( actualUpdatedRecord ) . toEqual ( expectedUpdatedRecord ) ;
175
363
} ) ;
176
364
} ) ;
365
+
366
+ describe ( 'updateAsync' , ( ) => {
367
+ it (
368
+ 'should update record as expected asyncronously' ,
369
+ marbles ( m => {
370
+ // arrange
371
+ const originRecord : TestEntity = { id : 1 , someField : 'AAA' } ;
372
+ const updatedRecord : TestEntity = { id : 1 , someField : 'BBB' } ;
373
+ service . records = [ ...[ originRecord ] ] ;
374
+ const expectedRecord = m . cold ( 'a|' , updatedRecord ) ;
375
+
376
+ // act
377
+ service . updateAsync ( updatedRecord ) ;
378
+
379
+ // assert
380
+ const actualUpdatedRecord = m . cold (
381
+ 'a|' ,
382
+ service . records . find ( record => record . id === originRecord . id ) ,
383
+ ) ;
384
+
385
+ m . expect ( actualUpdatedRecord ) . toBeObservable ( expectedRecord ) ;
386
+ } ) ,
387
+ ) ;
388
+ } ) ;
389
+
177
390
describe ( 'updateMany' , ( ) => {
178
391
it ( 'should update records as expected' , ( ) => {
179
392
// arrange
@@ -199,6 +412,40 @@ describe('In Memory DB Service', () => {
199
412
expect ( actualUpdatedRecords ) . toEqual ( expectedUpdatedRecords ) ;
200
413
} ) ;
201
414
} ) ;
415
+
416
+ describe ( 'updateManyAsync' , ( ) => {
417
+ it (
418
+ 'should update records as expected asynronously' ,
419
+ marbles ( m => {
420
+ // arrange
421
+ const originRecords : TestEntity [ ] = [
422
+ { id : 1 , someField : 'AAA' } ,
423
+ { id : 2 , someField : 'BBB' } ,
424
+ { id : 3 , someField : 'CCC' } ,
425
+ ] ;
426
+ const updatedRecords : TestEntity [ ] = [
427
+ { id : 1 , someField : 'YYY' } ,
428
+ { id : 2 , someField : 'ZZZ' } ,
429
+ ] ;
430
+ service . records = [ ...originRecords ] ;
431
+ const expectedRecords = m . cold ( 'a|' , updatedRecords ) ;
432
+
433
+ // act
434
+ service . updateManyAsync ( updatedRecords ) ;
435
+
436
+ // assert
437
+ const actualUpdatedRecords = m . cold (
438
+ 'a|' ,
439
+ service . records . filter ( record =>
440
+ updatedRecords . map ( o => o . id ) . includes ( record . id ) ,
441
+ ) ,
442
+ ) ;
443
+
444
+ m . expect ( actualUpdatedRecords ) . toBeObservable ( expectedRecords ) ;
445
+ } ) ,
446
+ ) ;
447
+ } ) ;
448
+
202
449
describe ( 'delete' , ( ) => {
203
450
it ( 'should remove record as expected' , ( ) => {
204
451
// arrange
@@ -216,6 +463,25 @@ describe('In Memory DB Service', () => {
216
463
expect ( service . records . length ) . toEqual ( 1 ) ;
217
464
} ) ;
218
465
} ) ;
466
+
467
+ describe ( 'deleteAsync' , ( ) => {
468
+ it ( 'should remove record as expected asyncronously' , ( ) => {
469
+ // arrange
470
+ service . records = [
471
+ { id : 1 , someField : 'AAA' } ,
472
+ { id : 2 , someField : 'BBB' } ,
473
+ ] ;
474
+
475
+ // act
476
+ service . deleteAsync ( 2 ) ;
477
+
478
+ // assert
479
+ const secondRecord = service . records . find ( record => record . id === 2 ) ;
480
+ expect ( secondRecord ) . toEqual ( undefined ) ;
481
+ expect ( service . records . length ) . toEqual ( 1 ) ;
482
+ } ) ;
483
+ } ) ;
484
+
219
485
describe ( 'deleteMany' , ( ) => {
220
486
it ( 'should remove records as expected' , ( ) => {
221
487
// arrange
@@ -234,6 +500,26 @@ describe('In Memory DB Service', () => {
234
500
expect ( service . records . length ) . toEqual ( 1 ) ;
235
501
} ) ;
236
502
} ) ;
503
+
504
+ describe ( 'deleteManyAsync' , ( ) => {
505
+ it ( 'should remove records as expected asyncronously' , ( ) => {
506
+ // arrange
507
+ service . records = [
508
+ { id : 1 , someField : 'AAAA' } ,
509
+ { id : 2 , someField : 'BBB' } ,
510
+ { id : 3 , someField : 'CCC' } ,
511
+ ] ;
512
+
513
+ // act
514
+ service . deleteManyAsync ( [ 1 , 2 ] ) ;
515
+
516
+ // assert
517
+ const thirdRecord = service . records [ 0 ] ;
518
+ expect ( thirdRecord ) . toEqual ( { id : 3 , someField : 'CCC' } ) ;
519
+ expect ( service . records . length ) . toEqual ( 1 ) ;
520
+ } ) ;
521
+ } ) ;
522
+
237
523
describe ( 'query' , ( ) => {
238
524
it ( 'should return expected records for given predicate' , ( ) => {
239
525
// arrange
@@ -250,4 +536,27 @@ describe('In Memory DB Service', () => {
250
536
expect ( foundRecord ) . toEqual ( expectedFoundRecord ) ;
251
537
} ) ;
252
538
} ) ;
539
+
540
+ describe ( 'queryAsync' , ( ) => {
541
+ it (
542
+ 'should return expected records for given predicate as observable' ,
543
+ marbles ( m => {
544
+ // arrange
545
+ service . records = [
546
+ { id : 1 , someField : 'AAA' } ,
547
+ { id : 2 , someField : 'BBB' } ,
548
+ ] ;
549
+ const expectedFoundRecord = m . cold ( 'a|' , service . records [ 1 ] ) ;
550
+
551
+ // act
552
+ const foundRecord = m . cold (
553
+ 'a|' ,
554
+ service . queryAsync ( record => record . someField === 'BBB' ) ,
555
+ ) ;
556
+
557
+ // assert
558
+ m . expect ( foundRecord ) . toBeObservable ( expectedFoundRecord ) ;
559
+ } ) ,
560
+ ) ;
561
+ } ) ;
253
562
} ) ;
0 commit comments