1616use OCP \ICacheFactory ;
1717use OCP \IConfig ;
1818use OCP \IUser ;
19+ use OCP \IUserManager ;
1920use Psr \Log \LoggerInterface ;
2021use Test \TestCase ;
2122
@@ -579,7 +580,7 @@ public function testCountUsersTwoBackends(): void {
579580 }
580581
581582 public function testCountUsersOnlyDisabled (): void {
582- $ manager = \OC :: $ server -> getUserManager ( );
583+ $ manager = \OCP \Server:: get (IUserManager::class );
583584 // count other users in the db before adding our own
584585 $ countBefore = $ manager ->countDisabledUsers ();
585586
@@ -604,7 +605,7 @@ public function testCountUsersOnlyDisabled(): void {
604605 }
605606
606607 public function testCountUsersOnlySeen (): void {
607- $ manager = \OC :: $ server -> getUserManager ( );
608+ $ manager = \OCP \Server:: get (IUserManager::class );
608609 // count other users in the db before adding our own
609610 $ countBefore = $ manager ->countSeenUsers ();
610611
@@ -630,7 +631,7 @@ public function testCountUsersOnlySeen(): void {
630631 }
631632
632633 public function testCallForSeenUsers (): void {
633- $ manager = \OC :: $ server -> getUserManager ( );
634+ $ manager = \OCP \Server:: get (IUserManager::class );
634635 // count other users in the db before adding our own
635636 $ count = 0 ;
636637 $ function = function (IUser $ user ) use (&$ count ) {
@@ -663,6 +664,66 @@ public function testCallForSeenUsers(): void {
663664 $ user4 ->delete ();
664665 }
665666
667+ /**
668+ * @runInSeparateProcess
669+ * @preserveGlobalState disabled
670+ */
671+ public function testRecentlyActive (): void {
672+ $ config = \OCP \Server::get (IConfig::class);
673+ $ manager = \OCP \Server::get (IUserManager::class);
674+
675+ // Create some users
676+ $ now = (string )time ();
677+ $ user1 = $ manager ->createUser ('test_active_1 ' , 'test_active_1 ' );
678+ $ config ->setUserValue ('test_active_1 ' , 'login ' , 'lastLogin ' , $ now );
679+ $ user1 ->setDisplayName ('test active 1 ' );
680+ $ user1->
setSystemEMailAddress (
'[email protected] ' );
681+
682+ $ user2 = $ manager ->createUser ('TEST_ACTIVE_2_FRED ' , 'TEST_ACTIVE_2 ' );
683+ $ config ->setUserValue ('TEST_ACTIVE_2_FRED ' , 'login ' , 'lastLogin ' , $ now );
684+ $ user2 ->setDisplayName ('TEST ACTIVE 2 UPPER ' );
685+ $ user2->
setSystemEMailAddress (
'[email protected] ' );
686+
687+ $ user3 = $ manager ->createUser ('test_active_3 ' , 'test_active_3 ' );
688+ $ config ->setUserValue ('test_active_3 ' , 'login ' , 'lastLogin ' , $ now + 1 );
689+ $ user3 ->setDisplayName ('test active 3 ' );
690+
691+ $ user4 = $ manager ->createUser ('test_active_4 ' , 'test_active_4 ' );
692+ $ config ->setUserValue ('test_active_4 ' , 'login ' , 'lastLogin ' , $ now );
693+ $ user4 ->setDisplayName ('Test Active 4 ' );
694+
695+ $ user5 = $ manager ->createUser ('test_inactive_1 ' , 'test_inactive_1 ' );
696+ $ user5 ->setDisplayName ('Test Inactive 1 ' );
697+ $ user2->
setSystemEMailAddress (
'[email protected] ' );
698+
699+ // Search recently active
700+ // - No search, case-insensitive order
701+ $ users = $ manager ->getLastLoggedInUsers (4 );
702+ $ this ->assertEquals (['test_active_3 ' , 'test_active_1 ' , 'TEST_ACTIVE_2_FRED ' , 'test_active_4 ' ], $ users );
703+ // - Search, case-insensitive order
704+ $ users = $ manager ->getLastLoggedInUsers (search: 'act ' );
705+ $ this ->assertEquals (['test_active_3 ' , 'test_active_1 ' , 'TEST_ACTIVE_2_FRED ' , 'test_active_4 ' ], $ users );
706+ // - No search with offset
707+ $ users = $ manager ->getLastLoggedInUsers (2 , 2 );
708+ $ this ->assertEquals (['TEST_ACTIVE_2_FRED ' , 'test_active_4 ' ], $ users );
709+ // - Case insensitive search (email)
710+ $ users = $ manager ->getLastLoggedInUsers (search: 'active.com ' );
711+ $ this ->assertEquals (['test_active_1 ' , 'TEST_ACTIVE_2_FRED ' ], $ users );
712+ // - Case insensitive search (display name)
713+ $ users = $ manager ->getLastLoggedInUsers (search: 'upper ' );
714+ $ this ->assertEquals (['TEST_ACTIVE_2_FRED ' ], $ users );
715+ // - Case insensitive search (uid)
716+ $ users = $ manager ->getLastLoggedInUsers (search: 'fred ' );
717+ $ this ->assertEquals (['TEST_ACTIVE_2_FRED ' ], $ users );
718+
719+ // Delete users and config keys
720+ $ user1 ->delete ();
721+ $ user2 ->delete ();
722+ $ user3 ->delete ();
723+ $ user4 ->delete ();
724+ $ user5 ->delete ();
725+ }
726+
666727 public function testDeleteUser (): void {
667728 $ config = $ this ->getMockBuilder (AllConfig::class)
668729 ->disableOriginalConstructor ()
0 commit comments