groupManager = $this->createMock(IGroupManager::class);
$this->userManager = $this->createMock(IUserManager::class);
$this->command = new AddUser($this->userManager, $this->groupManager);
$this->output = $this->createMock(OutputInterface::class);
}
protected function configureInput(array|string $returnGroup, array|string $returnUser): void {
$this->input = $this->createMock(InputInterface::class);
$this->input->method('getArgument')
->willReturnCallback(function ($arg) use ($returnGroup, $returnUser) {
if ($arg === 'group') {
return $returnGroup;
}
if ($arg === 'user') {
return $returnUser;
}
throw new \Exception();
});
}
public function testNoGroup(): void {
$this->configureInput('myGroup', 'myUser');
$this->groupManager->method('get')
->with('myGroup')
->willReturn(null);
$this->output->expects($this->once())
->method('writeln')
->with('group not found');
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
}
public function testNoUser(): void {
$this->configureInput('myGroup', 'myUser');
$group = $this->createMock(IGroup::class);
$this->groupManager->method('get')
->with('myGroup')
->willReturn($group);
$this->userManager->method('get')
->with('myUser')
->willReturn(null);
$this->output->expects($this->once())
->method('writeln')
->with('user myUser not found');
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
}
public function testAdd(): void {
$this->configureInput('myGroup', 'myUser');
$group = $this->createMock(IGroup::class);
$this->groupManager->method('get')
->with('myGroup')
->willReturn($group);
$user = $this->createMock(IUser::class);
$this->userManager->method('get')
->with('myUser')
->willReturn($user);
$group->expects($this->once())
->method('addUser')
->with($user);
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
}
public function testAddMultiple(): void {
$this->configureInput('myGroup', ['myUser', 'myOtherUser']);
$group = $this->createMock(IGroup::class);
$this->groupManager->method('get')
->with('myGroup')
->willReturn($group);
$user1 = $this->createMock(IUser::class);
$user2 = $this->createMock(IUser::class);
$this->userManager->method('get')
->willReturnMap([
['myUser', $user1],
['myOtherUser', $user2],
]);
$group->expects($this->exactly(2))
->method('addUser')
->with($this->callback(static fn (IUser $user): bool => in_array($user, [$user1, $user2], true)));
$this->output->expects($this->exactly(2))
->method('writeln')
->with($this->callback(static fn (string $message): bool => in_array($message,
[
'user myUser added',
'user myOtherUser added',
], true)));
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
}
public function testAddMultiplePartialSuccess(): void {
$this->configureInput('myGroup', ['myUser', 'myOtherUser']);
$group = $this->createMock(IGroup::class);
$this->groupManager->method('get')
->with('myGroup')
->willReturn($group);
$user = $this->createMock(IUser::class);
$this->userManager->method('get')
->willReturnMap([
['myUser', $user],
['myOtherUser', null],
]);
$group->expects($this->once())
->method('addUser')
->with($user);
$this->output->expects($this->exactly(3))
->method('writeln')
->with($this->callback(static fn (string $message): bool => in_array($message,
[
'user myUser added',
'user myOtherUser not found',
'Some users were not found, all others where added to the group.',
], true)));
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]);
}
}