@@ -47,6 +47,24 @@ public function testGetFindAll(): void {
4747 $ this ->assertEquals ('user2 ' , $ offsetResults [0 ]->getUserId ());
4848 }
4949
50+ public function testFindAllExcludesBackups (): void {
51+ $ this ->insertSampleStatuses ();
52+
53+ $ backup = new UserStatus ();
54+ $ backup ->setUserId ('_backupuser ' );
55+ $ backup ->setStatus ('dnd ' );
56+ $ backup ->setStatusTimestamp (5000 );
57+ $ backup ->setIsUserDefined (true );
58+ $ backup ->setIsBackup (true );
59+ $ this ->mapper ->insert ($ backup );
60+
61+ $ allResults = $ this ->mapper ->findAll ();
62+ $ this ->assertCount (3 , $ allResults );
63+
64+ $ userIds = array_map (fn ($ s ) => $ s ->getUserId (), $ allResults );
65+ $ this ->assertNotContains ('_backupuser ' , $ userIds );
66+ }
67+
5068 public function testFindAllRecent (): void {
5169 $ this ->insertSampleStatuses ();
5270
@@ -56,6 +74,26 @@ public function testFindAllRecent(): void {
5674 $ this ->assertEquals ('user1 ' , $ allResults [1 ]->getUserId ());
5775 }
5876
77+ public function testFindAllRecentExcludesBackups (): void {
78+ $ this ->insertSampleStatuses ();
79+
80+ $ backup = new UserStatus ();
81+ $ backup ->setUserId ('_backupuser ' );
82+ $ backup ->setStatus ('dnd ' );
83+ $ backup ->setStatusTimestamp (7000 );
84+ $ backup ->setStatusMessageTimestamp (7000 );
85+ $ backup ->setIsUserDefined (true );
86+ $ backup ->setIsBackup (true );
87+ $ backup ->setCustomMessage ('Backed up status ' );
88+ $ this ->mapper ->insert ($ backup );
89+
90+ $ allResults = $ this ->mapper ->findAllRecent (10 , 0 );
91+ $ this ->assertCount (2 , $ allResults );
92+
93+ $ userIds = array_map (fn ($ s ) => $ s ->getUserId (), $ allResults );
94+ $ this ->assertNotContains ('_backupuser ' , $ userIds );
95+ }
96+
5997 public function testGetFind (): void {
6098 $ this ->insertSampleStatuses ();
6199
@@ -190,6 +228,43 @@ public function testClearOlderThanClearAt(): void {
190228 $ this ->mapper ->findByUserId ('user1 ' );
191229 }
192230
231+ public function testClearOlderThanClearAtPreservesBackups (): void {
232+ $ backup = new UserStatus ();
233+ $ backup ->setUserId ('_user1 ' );
234+ $ backup ->setStatus ('dnd ' );
235+ $ backup ->setStatusTimestamp (5000 );
236+ $ backup ->setIsUserDefined (true );
237+ $ backup ->setIsBackup (true );
238+ $ backup ->setClearAt (50000 );
239+ $ this ->mapper ->insert ($ backup );
240+
241+ $ this ->mapper ->clearOlderThanClearAt (55000 );
242+
243+ // Backup should survive cleanup despite having expired clear_at
244+ $ backupStatus = $ this ->mapper ->findByUserId ('user1 ' , true );
245+ $ this ->assertEquals ('_user1 ' , $ backupStatus ->getUserId ());
246+ $ this ->assertEquals ('dnd ' , $ backupStatus ->getStatus ());
247+ $ this ->assertTrue ($ backupStatus ->getIsBackup ());
248+ }
249+
250+ public function testClearStatusesOlderThanPreservesBackups (): void {
251+ $ backup = new UserStatus ();
252+ $ backup ->setUserId ('_user1 ' );
253+ $ backup ->setStatus ('online ' );
254+ $ backup ->setStatusTimestamp (1000 );
255+ $ backup ->setIsUserDefined (false );
256+ $ backup ->setIsBackup (true );
257+ $ this ->mapper ->insert ($ backup );
258+
259+ $ this ->mapper ->clearStatusesOlderThan (5000 , 8000 );
260+
261+ // Backup should survive cleanup despite old timestamp
262+ $ backupStatus = $ this ->mapper ->findByUserId ('user1 ' , true );
263+ $ this ->assertEquals ('online ' , $ backupStatus ->getStatus ());
264+ $ this ->assertFalse ($ backupStatus ->getIsUserDefined ());
265+ $ this ->assertEquals (1000 , $ backupStatus ->getStatusTimestamp ());
266+ }
267+
193268 private function insertSampleStatuses (): void {
194269 $ userStatus1 = new UserStatus ();
195270 $ userStatus1 ->setUserId ('admin ' );
0 commit comments