@ -94,4 +94,37 @@ class FilesMetadataManagerTest extends TestCase {
$this->assertEquals($file->getId(), $retrieved->getFileId());
$this->assertEquals('yes', $retrieved->getString('istest'));
}
public function testDropMetadataForFilesChunking(): void {
$connection = $this->createMock(IDBConnection::class);
$qb = $this->createMock(\OCP\DB\QueryBuilder\IQueryBuilder::class);
$expr = $this->createMock(\OCP\DB\QueryBuilder\IExpressionBuilder::class);
$connection->method('getQueryBuilder')->willReturn($qb);
$qb->method('expr')->willReturn($expr);
$qb->method('delete')->willReturnSelf();
$qb->method('where')->willReturnSelf();
$qb->method('hintShardKey')->willReturnSelf();
$fileIds = range(1, \OCP\DB\QueryBuilder\IQueryBuilder::MAX_IN_PARAMETERS * 2 + 1);
$expectedChunks = array_chunk($fileIds, \OCP\DB\QueryBuilder\IQueryBuilder::MAX_IN_PARAMETERS);
$boundChunks = [];
$qb->expects($this->exactly(count($expectedChunks)))
->method('createNamedParameter')
->willReturnCallback(function (array $chunk, $type) use (& $boundChunks): string {
$this->assertSame(\OCP\DB\QueryBuilder\IQueryBuilder::PARAM_INT_ARRAY, $type);
$boundChunks[] = $chunk;
return ':param';
});
$qb->expects($this->exactly(count($expectedChunks)))
->method('executeStatement')
->willReturn(1);
$service = new MetadataRequestService($connection, $this->logger);
$service->dropMetadataForFiles(123, $fileIds);
$this->assertSame($expectedChunks, $boundChunks);
}
}