github.com/status-im/status-go@v1.1.0/protocol/messenger_status_updates_test.go (about) 1 package protocol 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/suite" 7 8 "github.com/status-im/status-go/protocol/protobuf" 9 ) 10 11 func TestMessengerStatusUpdatesSuite(t *testing.T) { 12 suite.Run(t, new(MessengerStatusUpdatesSuite)) 13 } 14 15 type MessengerStatusUpdatesSuite struct { 16 MessengerBaseTestSuite 17 } 18 19 func (s *MessengerStatusUpdatesSuite) TestNextHigherClockValueOfAutomaticStatusUpdates() { 20 21 statusUpdate1 := UserStatus{ 22 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 23 Clock: 100, 24 CustomText: "", 25 PublicKey: "pub-key1", 26 } 27 28 err := s.m.persistence.InsertStatusUpdate(statusUpdate1) 29 s.Require().NoError(err) 30 31 statusUpdate2 := UserStatus{ 32 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 33 Clock: 200, 34 CustomText: "", 35 PublicKey: "pub-key2", 36 } 37 38 err = s.m.persistence.InsertStatusUpdate(statusUpdate2) 39 s.Require().NoError(err) 40 41 statusUpdate3 := UserStatus{ 42 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 43 Clock: 300, 44 CustomText: "", 45 PublicKey: "pub-key3", 46 } 47 48 err = s.m.persistence.InsertStatusUpdate(statusUpdate3) 49 s.Require().NoError(err) 50 51 // nextClock: clock value next higher than passed clock, of status update of type StatusUpdate_AUTOMATIC 52 nextClock, err := s.m.persistence.NextHigherClockValueOfAutomaticStatusUpdates(100) 53 s.Require().NoError(err) 54 55 s.Require().Equal(nextClock, uint64(200)) 56 57 } 58 59 func (s *MessengerStatusUpdatesSuite) TestDeactivatedStatusUpdates() { 60 61 statusUpdate1 := UserStatus{ 62 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 63 Clock: 100, 64 CustomText: "", 65 PublicKey: "pub-key1", 66 } 67 68 err := s.m.persistence.InsertStatusUpdate(statusUpdate1) 69 s.Require().NoError(err) 70 71 statusUpdate2 := UserStatus{ 72 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 73 Clock: 200, 74 CustomText: "", 75 PublicKey: "pub-key2", 76 } 77 78 err = s.m.persistence.InsertStatusUpdate(statusUpdate2) 79 s.Require().NoError(err) 80 81 statusUpdate3 := UserStatus{ 82 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 83 Clock: 400, 84 CustomText: "", 85 PublicKey: "pub-key3", 86 } 87 88 err = s.m.persistence.InsertStatusUpdate(statusUpdate3) 89 s.Require().NoError(err) 90 91 statusUpdate4 := UserStatus{ 92 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 93 Clock: 400, // Adding duplicate clock value for testing 94 CustomText: "", 95 PublicKey: "pub-key4", 96 } 97 98 err = s.m.persistence.InsertStatusUpdate(statusUpdate4) 99 s.Require().NoError(err) 100 101 statusUpdate5 := UserStatus{ 102 StatusType: int(protobuf.StatusUpdate_AUTOMATIC), 103 Clock: 500, 104 CustomText: "", 105 PublicKey: "pub-key5", 106 } 107 108 err = s.m.persistence.InsertStatusUpdate(statusUpdate5) 109 s.Require().NoError(err) 110 111 // Lower limit is not included, but upper limit is included 112 // So every status update in this range (lowerClock upperClock] will be deactivated 113 deactivatedAutomaticStatusUpdates, err := s.m.persistence.DeactivatedAutomaticStatusUpdates(100, 400) 114 s.Require().NoError(err) 115 116 count := len(deactivatedAutomaticStatusUpdates) 117 s.Require().Equal(3, count) 118 119 // Status is deactivated 120 s.Require().Equal(int(protobuf.StatusUpdate_INACTIVE), deactivatedAutomaticStatusUpdates[0].StatusType) 121 122 // Lower range starts at 201 (clock + 1) 123 // (clock is bumped, so that client replaces old status update with new one) 124 s.Require().Equal(uint64(201), deactivatedAutomaticStatusUpdates[0].Clock) 125 126 //Upper rannge ends at 401 (clock + 1) 127 s.Require().Equal(uint64(401), deactivatedAutomaticStatusUpdates[count-1].Clock) 128 }