@@ -111,6 +111,116 @@ describe('from/dynamodb.js', () => {
111111 . done ( done ) ;
112112 } ) ;
113113
114+ it ( 'should prefer image timestamp if present' , ( done ) => {
115+ const events = toDynamodbRecords ( [
116+ {
117+ timestamp : 1572832690 ,
118+ keys : {
119+ pk : '1' ,
120+ sk : 'thing' ,
121+ } ,
122+ newImage : {
123+ pk : '1' ,
124+ sk : 'thing' ,
125+ discriminator : 'thing' ,
126+ name : 'n1' ,
127+ timestamp : 1572832690001 ,
128+ // insert in the current region will not have the awsregion field
129+ } ,
130+ } ,
131+ // dynamodb stream emits an extra update event as it adorns the 'aws:rep' global table metadata
132+ // so this extra event should be skipped
133+ {
134+ timestamp : 1572832690 ,
135+ keys : {
136+ pk : '1' ,
137+ sk : 'thing' ,
138+ } ,
139+ newImage : {
140+ pk : '1' ,
141+ sk : 'thing' ,
142+ discriminator : 'thing' ,
143+ name : 'n1' ,
144+ awsregion : 'us-west-2' ,
145+ } ,
146+ oldImage : {
147+ pk : '1' ,
148+ sk : 'thing' ,
149+ discriminator : 'thing' ,
150+ name : 'n1' ,
151+ // as mentioned above there was no awsregion field on the insert event
152+ } ,
153+ } ,
154+ ] ) ;
155+
156+ fromDynamodb ( events )
157+ . collect ( )
158+ . tap ( ( collected ) => {
159+ // console.log(JSON.stringify(collected, null, 2));
160+
161+ expect ( collected . length ) . to . equal ( 1 ) ;
162+ expect ( collected [ 0 ] ) . to . deep . equal ( {
163+ record : {
164+ eventID : '0' ,
165+ eventName : 'INSERT' ,
166+ eventSource : 'aws:dynamodb' ,
167+ awsRegion : 'us-west-2' ,
168+ dynamodb : {
169+ ApproximateCreationDateTime : 1572832690 ,
170+ Keys : {
171+ pk : {
172+ S : '1' ,
173+ } ,
174+ sk : {
175+ S : 'thing' ,
176+ } ,
177+ } ,
178+ NewImage : {
179+ pk : {
180+ S : '1' ,
181+ } ,
182+ sk : {
183+ S : 'thing' ,
184+ } ,
185+ discriminator : {
186+ S : 'thing' ,
187+ } ,
188+ name : {
189+ S : 'n1' ,
190+ } ,
191+ timestamp : {
192+ N : '1572832690001' ,
193+ } ,
194+ } ,
195+ OldImage : undefined ,
196+ SequenceNumber : '0' ,
197+ StreamViewType : 'NEW_AND_OLD_IMAGES' ,
198+ } ,
199+ } ,
200+ event : {
201+ id : '0' ,
202+ type : 'thing-created' ,
203+ partitionKey : '1' ,
204+ timestamp : 1572832690001 ,
205+ tags : {
206+ region : 'us-west-2' ,
207+ } ,
208+ raw : {
209+ new : {
210+ pk : '1' ,
211+ sk : 'thing' ,
212+ discriminator : 'thing' ,
213+ name : 'n1' ,
214+ timestamp : 1572832690001 ,
215+ } ,
216+ old : undefined ,
217+ } ,
218+ } ,
219+ } ) ;
220+ } )
221+ . done ( done ) ;
222+ } ) ;
223+
114224 it ( 'should parse MODIFY record' , ( done ) => {
115225 const events = toDynamodbRecords ( [
116226 {
0 commit comments