This commit is contained in:
Noah 2026-02-03 19:57:51 -01:00 committed by GitHub
commit 2d627e0e01
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 105 additions and 1 deletions

View file

@ -38,6 +38,12 @@ class LastSeen extends Base {
InputOption::VALUE_NONE,
'shows a list of when all users were last logged in'
)
->addOption(
'exclude-disabled',
null,
InputOption::VALUE_NONE,
'exclude disabled users from the list (only works with --all)'
)
;
}
@ -68,7 +74,11 @@ class LastSeen extends Base {
return 1;
}
$this->userManager->callForAllUsers(static function (IUser $user) use ($output): void {
$excludeDisabled = $input->getOption('exclude-disabled');
$this->userManager->callForAllUsers(static function (IUser $user) use ($output, $excludeDisabled): void {
if ($excludeDisabled && !$user->isEnabled()) {
return;
}
$lastLogin = $user->getLastLogin();
if ($lastLogin === 0) {
$output->writeln($user->getUID() . ' has never logged in.');

View file

@ -92,4 +92,98 @@ class LastSeenTest extends TestCase {
self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
}
public function testAllUsersWithoutExcludeDisabled(): void {
$enabledUser = $this->getMockBuilder(IUser::class)->getMock();
$enabledUser->expects($this->once())
->method('getLastLogin')
->willReturn(time());
$enabledUser->expects($this->once())
->method('getUID')
->willReturn('enabled_user');
$enabledUser->expects($this->never())
->method('isEnabled');
$disabledUser = $this->getMockBuilder(IUser::class)->getMock();
$disabledUser->expects($this->once())
->method('getLastLogin')
->willReturn(time());
$disabledUser->expects($this->once())
->method('getUID')
->willReturn('disabled_user');
$disabledUser->expects($this->never())
->method('isEnabled');
$this->consoleInput->expects($this->once())
->method('getArgument')
->with('uid')
->willReturn(null);
$this->consoleInput->expects($this->exactly(2))
->method('getOption')
->willReturnMap([
['all', true],
['exclude-disabled', false],
]);
$this->userManager->expects($this->once())
->method('callForAllUsers')
->willReturnCallback(function ($callback) use ($enabledUser, $disabledUser) {
$callback($enabledUser);
$callback($disabledUser);
});
$this->consoleOutput->expects($this->exactly(2))
->method('writeln')
->with($this->stringContains("'s last login:"));
self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
}
public function testAllUsersWithExcludeDisabled(): void {
$enabledUser = $this->getMockBuilder(IUser::class)->getMock();
$enabledUser->expects($this->once())
->method('getLastLogin')
->willReturn(time());
$enabledUser->expects($this->once())
->method('getUID')
->willReturn('enabled_user');
$enabledUser->expects($this->once())
->method('isEnabled')
->willReturn(true);
$disabledUser = $this->getMockBuilder(IUser::class)->getMock();
$disabledUser->expects($this->never())
->method('getLastLogin');
$disabledUser->expects($this->never())
->method('getUID');
$disabledUser->expects($this->once())
->method('isEnabled')
->willReturn(false);
$this->consoleInput->expects($this->once())
->method('getArgument')
->with('uid')
->willReturn(null);
$this->consoleInput->expects($this->exactly(2))
->method('getOption')
->willReturnMap([
['all', true],
['exclude-disabled', true],
]);
$this->userManager->expects($this->once())
->method('callForAllUsers')
->willReturnCallback(function ($callback) use ($enabledUser, $disabledUser) {
$callback($enabledUser);
$callback($disabledUser);
});
$this->consoleOutput->expects($this->once())
->method('writeln')
->with($this->stringContains("enabled_user's last login:"));
self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]);
}
}