apiKeyService = $this->createMock(ApiKeyServiceInterface::class); $roleResolver = $this->createMock(RoleResolverInterface::class); $roleResolver->method('determineRoles')->with($this->isInstanceOf(InputInterface::class))->willReturn([]); $command = new GenerateKeyCommand($this->apiKeyService, $roleResolver); $this->commandTester = CliTestUtils::testerForCommand($command); } #[Test] public function noExpirationDateIsDefinedIfNotProvided(): void { $this->apiKeyService->expects($this->once())->method('create')->with( $this->callback(fn (ApiKeyMeta $meta) => $meta->expirationDate === null), )->willReturn(ApiKey::create()); $this->commandTester->execute([]); $output = $this->commandTester->getDisplay(); self::assertStringContainsString('Generated API key: ', $output); } #[Test] public function expirationDateIsDefinedIfProvided(): void { $this->apiKeyService->expects($this->once())->method('create')->with( $this->callback(fn (ApiKeyMeta $meta) => $meta->expirationDate instanceof Chronos), )->willReturn(ApiKey::create()); $this->commandTester->execute([ '--expiration-date' => '2016-01-01', ]); } #[Test] public function nameIsDefinedIfProvided(): void { $this->apiKeyService->expects($this->once())->method('create')->with( $this->callback(fn (ApiKeyMeta $meta) => $meta->name === 'Alice'), )->willReturn(ApiKey::create()); $exitCode = $this->commandTester->execute([ '--name' => 'Alice', ]); self::assertEquals(ExitCode::EXIT_SUCCESS, $exitCode); } #[Test] public function warningIsPrintedIfProvidedNameAlreadyExists(): void { $name = 'The API key'; $this->apiKeyService->expects($this->never())->method('create'); $this->apiKeyService->expects($this->once())->method('existsWithName')->with($name)->willReturn(true); $exitCode = $this->commandTester->execute([ '--name' => $name, ]); $output = $this->commandTester->getDisplay(); self::assertEquals(ExitCode::EXIT_WARNING, $exitCode); self::assertStringContainsString('An API key with name "The API key" already exists.', $output); } }