createStub(Query::class); $query->method('execute')->willReturn($result); $qb = $this->createStub(QueryBuilder::class); $qb->method('delete')->willReturnSelf(); $qb->method('where')->willReturnSelf(); $qb->method('setParameter')->willReturnSelf(); $qb->method('getQuery')->willReturn($query); return $qb; } public function testExecuteDefault(): void { $em = $this->createStub(EntityManagerInterface::class); $em->method('createQueryBuilder')->willReturn($this->createQueryBuilderStub(5)); $command = new PurgeEmailTrackingCommand($em); $tester = new CommandTester($command); $tester->execute([]); $this->assertSame(0, $tester->getStatusCode()); $this->assertStringContainsString('10 enregistrement(s) supprime(s) au total', $tester->getDisplay()); } public function testExecuteCustomDays(): void { $em = $this->createStub(EntityManagerInterface::class); $em->method('createQueryBuilder')->willReturn($this->createQueryBuilderStub(0)); $command = new PurgeEmailTrackingCommand($em); $tester = new CommandTester($command); $tester->execute(['--days' => '30']); $this->assertSame(0, $tester->getStatusCode()); $this->assertStringContainsString('Purge EmailTracking (> 30 jours)', $tester->getDisplay()); $this->assertStringContainsString('0 enregistrement(s) supprime(s) au total', $tester->getDisplay()); } }