1
- import { IEvent } from '../models/IEvent' ;
2
- import { IStorage } from './IStorage' ;
3
- import { IStorageItem } from './IStorageItem' ;
4
-
5
- import { InMemoryStorage } from './InMemoryStorage' ;
6
1
import { NodeFileStorage } from './NodeFileStorage' ;
7
2
8
- import { expect } from 'chai' ;
3
+ import { describeStorage } from './Storage-spec' ;
4
+
9
5
import * as mockFs from 'mock-fs' ;
10
6
11
7
let mockedFs ;
@@ -25,181 +21,3 @@ describeStorage('NodeFileStorage',
25
21
nodeFileStorageInitializer ,
26
22
true
27
23
) ;
28
-
29
- describeStorage ( 'InMemoryStorage' , ( maxItems = 250 ) => {
30
- return new InMemoryStorage ( maxItems ) ;
31
- } ) ;
32
-
33
- function describeStorage ( name : string ,
34
- storageFactory : ( maxItems ?: number ) => IStorage ,
35
- beforeEachCallback ?: ( ) => void ,
36
- recreateStorage : boolean = false ) {
37
-
38
- describe ( name , ( ) => {
39
-
40
- if ( beforeEachCallback ) {
41
- beforeEach ( beforeEachCallback ) ;
42
- }
43
-
44
- it ( 'should save events' , ( ) => {
45
- let storage = storageFactory ( ) ;
46
- let key = 'ex-q-' ;
47
- let event1 : IEvent = { type : 'log' , reference_id : key + '123454321' } ;
48
- let event2 : IEvent = { type : 'log' , reference_id : key + '098765432' } ;
49
- expect ( storage . get ( ) . length ) . to . equal ( 0 ) ;
50
- storage . save ( event1 ) ;
51
- expect ( storage . get ( ) . length ) . to . equal ( 1 ) ;
52
-
53
- if ( recreateStorage ) {
54
- storage = storageFactory ( ) ;
55
- }
56
-
57
- storage . save ( event2 ) ;
58
- expect ( storage . get ( ) . length ) . to . equal ( 2 ) ;
59
- } ) ;
60
-
61
- it ( 'should get saved events' , ( ) => {
62
- let storage = storageFactory ( ) ;
63
- let key = 'ex-q-' ;
64
- let event1 : IEvent = { type : 'log' , reference_id : key + '11' } ;
65
- let event2 : IEvent = { type : 'log' , reference_id : key + '12' } ;
66
- let event3 : IEvent = { type : 'log' , reference_id : key + '13' } ;
67
- let event4 : IEvent = { type : 'log' , reference_id : key + '14' } ;
68
- let event5 : IEvent = { type : 'log' , reference_id : key + '15' } ;
69
- let event6 : IEvent = { type : 'log' , reference_id : key + '16' } ;
70
- expect ( storage . get ( ) . length ) . to . equal ( 0 ) ;
71
-
72
- let ts1 = storage . save ( event1 ) ;
73
- let ts2 = storage . save ( event2 ) ;
74
- storage . save ( event3 ) ;
75
- storage . save ( event4 ) ;
76
- storage . save ( event5 ) ;
77
- storage . save ( event6 ) ;
78
- expect ( storage . get ( ) . length ) . to . equal ( 6 ) ;
79
-
80
- if ( recreateStorage ) {
81
- storage = storageFactory ( ) ;
82
- }
83
-
84
- expect ( storage . get ( ) . length ) . to . equal ( 6 ) ;
85
- storage . remove ( ts1 ) ;
86
- expect ( storage . get ( ) . length ) . to . equal ( 5 ) ;
87
-
88
- expect ( storage . get ( ) [ 0 ] . value ) . to . eql ( event2 ) ;
89
- storage . remove ( ts2 ) ;
90
- expect ( storage . get ( ) . length ) . to . equal ( 4 ) ;
91
-
92
- let events = storage . get ( 2 ) ;
93
- expect ( events . length ) . to . equal ( 2 ) ;
94
- expect ( events [ 0 ] . value ) . not . to . equal ( events [ 1 ] . value ) ;
95
- storage . remove ( events [ 0 ] . timestamp ) ;
96
- storage . remove ( events [ 1 ] . timestamp ) ;
97
- expect ( storage . get ( ) . length ) . to . equal ( 2 ) ;
98
-
99
- events = storage . get ( ) ;
100
- expect ( events . length ) . to . equal ( 2 ) ;
101
- expect ( events [ 0 ] . value ) . not . to . equal ( events [ 1 ] . value ) ;
102
- } ) ;
103
-
104
- it ( 'should clear all events' , ( ) => {
105
- let storage = storageFactory ( ) ;
106
- let key = 'ex-q-' ;
107
- let event1 : IEvent = { type : 'log' , reference_id : key + '11' } ;
108
- let event2 : IEvent = { type : 'log' , reference_id : key + '12' } ;
109
- let event3 : IEvent = { type : 'log' , reference_id : key + '13' } ;
110
- let event4 : IEvent = { type : 'log' , reference_id : key + '14' } ;
111
- let event5 : IEvent = { type : 'log' , reference_id : key + '15' } ;
112
- let event6 : IEvent = { type : 'log' , reference_id : key + '16' } ;
113
- expect ( storage . get ( ) . length ) . to . equal ( 0 ) ;
114
-
115
- let ts1 = storage . save ( event1 ) ;
116
- storage . save ( event2 ) ;
117
- storage . save ( event3 ) ;
118
- storage . save ( event4 ) ;
119
- storage . save ( event5 ) ;
120
- storage . save ( event6 ) ;
121
- expect ( storage . get ( ) . length ) . to . equal ( 6 ) ;
122
-
123
- if ( recreateStorage ) {
124
- storage = storageFactory ( ) ;
125
- }
126
-
127
- storage . remove ( ts1 ) ;
128
- expect ( storage . get ( ) . length ) . to . equal ( 5 ) ;
129
-
130
- storage . clear ( ) ;
131
-
132
- expect ( storage . get ( ) . length ) . to . equal ( 0 ) ;
133
- } ) ;
134
-
135
- it ( 'should get with limit' , ( ) => {
136
- let storage = storageFactory ( 250 ) ;
137
- for ( let index : number = 0 ; index < 260 ; index ++ ) {
138
- storage . save ( { type : 'log' , reference_id : index . toString ( ) } ) ;
139
- }
140
-
141
- if ( recreateStorage ) {
142
- storage = storageFactory ( 250 ) ;
143
- }
144
-
145
- expect ( storage . get ( ) . length ) . to . equal ( 250 ) ;
146
- expect ( storage . get ( 1 ) . length ) . to . equal ( 1 ) ;
147
- } ) ;
148
-
149
- it ( 'should get the oldest events' , ( ) => {
150
- function getDate ( baseDate : Date , offset : number ) {
151
- return new Date ( baseDate . getTime ( ) + ( offset * 60000 ) ) ;
152
- }
153
-
154
- const DATE : Date = new Date ( ) ;
155
- let storage = storageFactory ( ) ;
156
- for ( let index : number = 0 ; index < 10 ; index ++ ) {
157
- storage . save ( {
158
- date : getDate ( DATE , index ) ,
159
- type : 'log' ,
160
- reference_id : index . toString ( )
161
- } ) ;
162
-
163
- expect ( storage . get ( ) . length ) . to . equal ( index + 1 ) ;
164
- }
165
-
166
- if ( recreateStorage ) {
167
- storage = storageFactory ( ) ;
168
- }
169
-
170
- let offset : number = 0 ;
171
- let events : IStorageItem [ ] = storage . get ( 2 ) ;
172
- while ( events && events . length > 0 ) {
173
- expect ( 2 ) . to . equal ( events . length ) ;
174
- for ( let ei = 0 ; ei < 2 ; ei ++ ) {
175
- expect ( getDate ( DATE , offset ++ ) ) . to . eql ( events [ ei ] . value . date ) ;
176
- storage . remove ( events [ ei ] . timestamp ) ;
177
- }
178
-
179
- events = storage . get ( 2 ) ;
180
- }
181
- } ) ;
182
-
183
- it ( 'should respect max items limit' , ( ) => {
184
- let storage = storageFactory ( 5 ) ;
185
- let timestamps = [ ] ;
186
- for ( let index : number = 0 ; index < 5 ; index ++ ) {
187
- timestamps . push ( storage . save ( { type : 'log' , reference_id : index . toString ( ) } ) ) ;
188
- }
189
-
190
- let events : IStorageItem [ ] = storage . get ( ) ;
191
- expect ( events . length ) . to . equal ( 5 ) ;
192
- expect ( events [ 0 ] . timestamp ) . to . equal ( timestamps [ 0 ] ) ;
193
- storage . save ( { type : 'log' , reference_id : '6' } ) ;
194
-
195
- if ( recreateStorage ) {
196
- storage = storageFactory ( 5 ) ;
197
- }
198
-
199
- events = storage . get ( ) ;
200
- expect ( events . length ) . to . equal ( 5 ) ;
201
- expect ( events [ 0 ] . timestamp ) . to . equal ( timestamps [ 1 ] ) ;
202
- } ) ;
203
-
204
- } ) ;
205
- }
0 commit comments