createMock(DatabaseAnonymizer::class); $anonymizer->expects(self::never())->method('anonymizeAll'); $tester = new CommandTester($this->createCommand($anonymizer, 'prod')); $tester->execute([]); self::assertSame(Command::FAILURE, $tester->getStatusCode()); self::assertStringContainsString('disabled in the prod environment', $tester->getDisplay()); } public function testCommandDelegatesOutsideProdEnvironment(): void { $anonymizer = $this->createMock(DatabaseAnonymizer::class); $anonymizer->expects(self::once()) ->method('anonymizeAll') ->willReturn([ 'users' => 1, 'newsletterConsents' => 2, 'newsletterOptInRequests' => 3, 'bookingEditDrafts' => 4, ]); $tester = new CommandTester($this->createCommand($anonymizer, 'dev')); $tester->execute([]); self::assertSame(Command::SUCCESS, $tester->getStatusCode()); self::assertStringContainsString( 'Anonymized 1 users, 2 newsletter consents, 3 newsletter opt-in requests, and 4 booking drafts.', $this->normalizeConsoleOutput($tester->getDisplay()), ); } private function createCommand(DatabaseAnonymizer $anonymizer, string $environment): DbAnonymizeCommand { return new DbAnonymizeCommand( $anonymizer, $this->createMock(LoggerInterface::class), $environment, ); } private function normalizeConsoleOutput(string $output): string { return trim((string) preg_replace('/\s+/', ' ', $output)); } }