@@ -221,6 +221,116 @@ describe('from/dynamodb.js', () => {
221221 . done ( done ) ;
222222 } ) ;
223223
224+ it ( 'should prefer approximate timestamp if flag set' , ( done ) => {
225+ const events = toDynamodbRecords ( [
226+ {
227+ timestamp : 1572832690 ,
228+ keys : {
229+ pk : '1' ,
230+ sk : 'thing' ,
231+ } ,
232+ newImage : {
233+ pk : '1' ,
234+ sk : 'thing' ,
235+ discriminator : 'thing' ,
236+ name : 'n1' ,
237+ timestamp : 1572832690001 ,
238+ // insert in the current region will not have the awsregion field
239+ } ,
240+ } ,
241+ // dynamodb stream emits an extra update event as it adorns the 'aws:rep' global table metadata
242+ // so this extra event should be skipped
243+ {
244+ timestamp : 1572832690 ,
245+ keys : {
246+ pk : '1' ,
247+ sk : 'thing' ,
248+ } ,
249+ newImage : {
250+ pk : '1' ,
251+ sk : 'thing' ,
252+ discriminator : 'thing' ,
253+ name : 'n1' ,
254+ awsregion : 'us-west-2' ,
255+ } ,
256+ oldImage : {
257+ pk : '1' ,
258+ sk : 'thing' ,
259+ discriminator : 'thing' ,
260+ name : 'n1' ,
261+ // as mentioned above there was no awsregion field on the insert event
262+ } ,
263+ } ,
264+ ] ) ;
265+
266+ fromDynamodb ( events , { preferApproximateTimestamp : true } )
267+ . collect ( )
268+ . tap ( ( collected ) => {
269+ // console.log(JSON.stringify(collected, null, 2));
270+
271+ expect ( collected . length ) . to . equal ( 1 ) ;
272+ expect ( collected [ 0 ] ) . to . deep . equal ( {
273+ record : {
274+ eventID : '0' ,
275+ eventName : 'INSERT' ,
276+ eventSource : 'aws:dynamodb' ,
277+ awsRegion : 'us-west-2' ,
278+ dynamodb : {
279+ ApproximateCreationDateTime : 1572832690 ,
280+ Keys : {
281+ pk : {
282+ S : '1' ,
283+ } ,
284+ sk : {
285+ S : 'thing' ,
286+ } ,
287+ } ,
288+ NewImage : {
289+ pk : {
290+ S : '1' ,
291+ } ,
292+ sk : {
293+ S : 'thing' ,
294+ } ,
295+ discriminator : {
296+ S : 'thing' ,
297+ } ,
298+ name : {
299+ S : 'n1' ,
300+ } ,
301+ timestamp : {
302+ N : '1572832690001' ,
303+ } ,
304+ } ,
305+ OldImage : undefined ,
306+ SequenceNumber : '0' ,
307+ StreamViewType : 'NEW_AND_OLD_IMAGES' ,
308+ } ,
309+ } ,
310+ event : {
311+ id : '0' ,
312+ type : 'thing-created' ,
313+ partitionKey : '1' ,
314+ timestamp : 1572832690000 ,
315+ tags : {
316+ region : 'us-west-2' ,
317+ } ,
318+ raw : {
319+ new : {
320+ pk : '1' ,
321+ sk : 'thing' ,
322+ discriminator : 'thing' ,
323+ name : 'n1' ,
324+ timestamp : 1572832690001 ,
325+ } ,
326+ old : undefined ,
327+ } ,
328+ } ,
329+ } ) ;
330+ } )
331+ . done ( done ) ;
332+ } ) ;
333+
224334 it ( 'should parse MODIFY record' , ( done ) => {
225335 const events = toDynamodbRecords ( [
226336 {
0 commit comments