timeFactory = $this->createMock(ITimeFactory::class); $this->calDavBackend = $this->createMock(CalDavBackend::class); $this->cardDavBackend = $this->createMock(CardDavBackend::class); $this->config = $this->createMock(IConfig::class); $this->logger = $this->createMock(LoggerInterface::class); $this->backgroundJob = new PruneOutdatedSyncTokensJob($this->timeFactory, $this->calDavBackend, $this->cardDavBackend, $this->config, $this->logger); } /** * @dataProvider dataForTestRun */ public function testRun(string $configToKeep, string $configRetentionDays, int $actualLimit, int $retentionDays, int $deletedCalendarSyncTokens, int $deletedAddressBookSyncTokens): void { $this->config->expects($this->exactly(2)) ->method('getAppValue') ->with(Application::APP_ID, self::anything(), self::anything()) ->willReturnCallback(function ($app, $key) use ($configToKeep, $configRetentionDays) { switch ($key) { case 'totalNumberOfSyncTokensToKeep': return $configToKeep; case 'syncTokensRetentionDays': return $configRetentionDays; default: throw new InvalidArgumentException(); } }); $this->calDavBackend->expects($this->once()) ->method('pruneOutdatedSyncTokens') ->with($actualLimit) ->willReturn($deletedCalendarSyncTokens); $this->cardDavBackend->expects($this->once()) ->method('pruneOutdatedSyncTokens') ->with($actualLimit, $retentionDays) ->willReturn($deletedAddressBookSyncTokens); $this->logger->expects($this->once()) ->method('info') ->with('Pruned {calendarSyncTokensNumber} calendar sync tokens and {addressBooksSyncTokensNumber} address book sync tokens', [ 'calendarSyncTokensNumber' => $deletedCalendarSyncTokens, 'addressBooksSyncTokensNumber' => $deletedAddressBookSyncTokens ]); $this->backgroundJob->run(null); } public function dataForTestRun(): array { return [ ['100', '2', 100, 7 * 24 * 3600, 2, 3], ['100', '14', 100, 14 * 24 * 3600, 2, 3], ['0', '60', 1, 60 * 24 * 3600, 0, 0] ]; } }