@@ -716,6 +716,7 @@ describe('Amplitude', function() {
716716 assert . isTrue ( '$add' in events [ i ] . user_properties ) ;
717717 assert . deepEqual ( events [ i ] . user_properties [ '$add' ] , { 'photoCount' : 1 } ) ;
718718 assert . equal ( events [ i ] . event_id , i + 1 ) ;
719+ assert . equal ( events [ i ] . sequence_number , i + 1 ) ;
719720 }
720721
721722 // send response and check that remove events works properly
@@ -746,6 +747,7 @@ describe('Amplitude', function() {
746747 for ( var i = 0 ; i < 3 ; i ++ ) {
747748 assert . equal ( events [ i ] . event_type , 'test' ) ;
748749 assert . equal ( events [ i ] . event_id , i + 1 ) ;
750+ assert . equal ( events [ i ] . sequence_number , i + 1 ) ;
749751 }
750752
751753 // send response and check that remove events works properly
@@ -773,14 +775,16 @@ describe('Amplitude', function() {
773775 var events = JSON . parse ( querystring . parse ( server . requests [ 0 ] . requestBody ) . e ) ;
774776 assert . lengthOf ( events , 2 ) ;
775777
776- // if identify and event have same timestamp, identify comes first
777- assert . equal ( events [ 0 ] . event_type , '$identify ' ) ;
778+ // event should come before identify - maintain order using sequence number
779+ assert . equal ( events [ 0 ] . event_type , 'test ' ) ;
778780 assert . equal ( events [ 0 ] . event_id , 1 ) ;
779- assert . isTrue ( '$add' in events [ 0 ] . user_properties ) ;
780- assert . deepEqual ( events [ 0 ] . user_properties [ '$add' ] , { 'photoCount' : 1 } ) ;
781- assert . equal ( events [ 1 ] . event_type , 'test ' ) ;
781+ assert . deepEqual ( events [ 0 ] . user_properties , { } ) ;
782+ assert . equal ( events [ 0 ] . sequence_number , 1 ) ;
783+ assert . equal ( events [ 1 ] . event_type , '$identify ' ) ;
782784 assert . equal ( events [ 1 ] . event_id , 1 ) ;
783- assert . deepEqual ( events [ 1 ] . user_properties , { } ) ;
785+ assert . isTrue ( '$add' in events [ 1 ] . user_properties ) ;
786+ assert . deepEqual ( events [ 1 ] . user_properties [ '$add' ] , { 'photoCount' : 1 } ) ;
787+ assert . equal ( events [ 1 ] . sequence_number , 2 ) ;
784788
785789 // send response and check that remove events works properly
786790 server . respondWith ( 'success' ) ;
@@ -819,18 +823,72 @@ describe('Amplitude', function() {
819823 // verify the correct coalescing
820824 assert . equal ( events [ 0 ] . event_type , 'test1' ) ;
821825 assert . deepEqual ( events [ 0 ] . user_properties , { } ) ;
826+ assert . equal ( events [ 0 ] . sequence_number , 1 ) ;
822827 assert . equal ( events [ 1 ] . event_type , '$identify' ) ;
823828 assert . isTrue ( '$add' in events [ 1 ] . user_properties ) ;
824829 assert . deepEqual ( events [ 1 ] . user_properties [ '$add' ] , { 'photoCount' : 1 } ) ;
830+ assert . equal ( events [ 1 ] . sequence_number , 2 ) ;
825831 assert . equal ( events [ 2 ] . event_type , 'test2' ) ;
826832 assert . deepEqual ( events [ 2 ] . user_properties , { } ) ;
833+ assert . equal ( events [ 2 ] . sequence_number , 3 ) ;
827834 assert . equal ( events [ 3 ] . event_type , 'test3' ) ;
828835 assert . deepEqual ( events [ 3 ] . user_properties , { } ) ;
829- assert . equal ( events [ 4 ] . event_type , '$identify' ) ;
830- assert . isTrue ( '$add' in events [ 4 ] . user_properties ) ;
831- assert . deepEqual ( events [ 4 ] . user_properties [ '$add' ] , { 'photoCount' : 2 } ) ;
832- assert . equal ( events [ 5 ] . event_type , 'test4' ) ;
833- assert . deepEqual ( events [ 5 ] . user_properties , { } ) ;
836+ assert . equal ( events [ 3 ] . sequence_number , 4 ) ;
837+ assert . equal ( events [ 4 ] . event_type , 'test4' ) ;
838+ assert . deepEqual ( events [ 4 ] . user_properties , { } ) ;
839+ assert . equal ( events [ 4 ] . sequence_number , 5 ) ;
840+ assert . equal ( events [ 5 ] . event_type , '$identify' ) ;
841+ assert . isTrue ( '$add' in events [ 5 ] . user_properties ) ;
842+ assert . deepEqual ( events [ 5 ] . user_properties [ '$add' ] , { 'photoCount' : 2 } ) ;
843+ assert . equal ( events [ 5 ] . sequence_number , 6 ) ;
844+
845+ // send response and check that remove events works properly
846+ server . respondWith ( 'success' ) ;
847+ server . respond ( ) ;
848+ assert . equal ( amplitude . _unsentCount ( ) , 0 ) ;
849+ assert . lengthOf ( amplitude . _unsentEvents , 0 ) ;
850+ assert . lengthOf ( amplitude . _unsentIdentifys , 0 ) ;
851+ } ) ;
852+
853+ it ( 'should merged events supporting backwards compatability' , function ( ) {
854+ // events logged before v2.5.0 won't have sequence number, should get priority
855+ amplitude . init ( apiKey , null , { batchEvents : true , eventUploadThreshold : 3 } ) ;
856+ assert . equal ( amplitude . _unsentCount ( ) , 0 ) ;
857+
858+ amplitude . identify ( new Identify ( ) . add ( 'photoCount' , 1 ) ) ;
859+ amplitude . logEvent ( 'test' ) ;
860+ delete amplitude . _unsentEvents [ 0 ] . sequence_number ; // delete sequence number to simulate old event
861+ amplitude . _sequenceNumber = 1 ; // reset sequence number
862+ amplitude . identify ( new Identify ( ) . add ( 'photoCount' , 2 ) ) ;
863+
864+ // verify some internal counters
865+ assert . equal ( amplitude . _eventId , 1 ) ;
866+ assert . equal ( amplitude . _identifyId , 2 ) ;
867+ assert . equal ( amplitude . _unsentCount ( ) , 3 ) ;
868+ assert . lengthOf ( amplitude . _unsentEvents , 1 ) ;
869+ assert . lengthOf ( amplitude . _unsentIdentifys , 2 ) ;
870+
871+ assert . lengthOf ( server . requests , 1 ) ;
872+ var events = JSON . parse ( querystring . parse ( server . requests [ 0 ] . requestBody ) . e ) ;
873+ assert . lengthOf ( events , 3 ) ;
874+
875+ // event should come before identify - prioritize events with no sequence number
876+ assert . equal ( events [ 0 ] . event_type , 'test' ) ;
877+ assert . equal ( events [ 0 ] . event_id , 1 ) ;
878+ assert . deepEqual ( events [ 0 ] . user_properties , { } ) ;
879+ assert . isFalse ( 'sequence_number' in events [ 0 ] ) ;
880+
881+ assert . equal ( events [ 1 ] . event_type , '$identify' ) ;
882+ assert . equal ( events [ 1 ] . event_id , 1 ) ;
883+ assert . isTrue ( '$add' in events [ 1 ] . user_properties ) ;
884+ assert . deepEqual ( events [ 1 ] . user_properties [ '$add' ] , { 'photoCount' : 1 } ) ;
885+ assert . equal ( events [ 1 ] . sequence_number , 1 ) ;
886+
887+ assert . equal ( events [ 2 ] . event_type , '$identify' ) ;
888+ assert . equal ( events [ 2 ] . event_id , 2 ) ;
889+ assert . isTrue ( '$add' in events [ 2 ] . user_properties ) ;
890+ assert . deepEqual ( events [ 2 ] . user_properties [ '$add' ] , { 'photoCount' : 2 } ) ;
891+ assert . equal ( events [ 2 ] . sequence_number , 2 ) ;
834892
835893 // send response and check that remove events works properly
836894 server . respondWith ( 'success' ) ;
0 commit comments