Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 4 additions & 15 deletions core/Command/Preview/Cleanup.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ protected function configure(): void {
}

protected function execute(InputInterface $input, OutputInterface $output): int {
if ($this->deletePreviewFromPreviewTable($output) !== 0) {
if ($this->deletePreviewFromFileCacheTable($output) !== 0) {
return 1;
}

return $this->deletePreviewFromFileCacheTable($output);
return $this->deletePreviewFromPreviewTable($output);
}

/**
Expand Down Expand Up @@ -75,9 +75,8 @@ private function deletePreviewFromFileCacheTable(OutputInterface $output): int {
$previewFolder = $appDataFolder->get('preview');

} catch (NotFoundException $e) {
$this->logger->error("Previews can't be removed: appdata folder can't be found", ['exception' => $e]);
$output->writeln("Previews can't be removed: preview folder isn't deletable");
return 1;
$this->logger->info("Legacy previews can't be removed: appdata folder can't be found", ['exception' => $e]);
return 0;
}

if (!$previewFolder->isDeletable()) {
Expand All @@ -100,16 +99,6 @@ private function deletePreviewFromFileCacheTable(OutputInterface $output): int {
return 1;
}

try {
$appDataFolder->newFolder('preview');
$this->logger->debug('Preview folder recreated');
$output->writeln('Preview folder recreated', OutputInterface::VERBOSITY_VERBOSE);
} catch (NotPermittedException $e) {
$output->writeln("Preview folder was deleted, but you don't have the permission to create preview folder");
$this->logger->error("Preview folder was deleted, but you don't have the permission to create preview folder", ['exception' => $e]);
return 1;
}

$output->writeln('Previews removed');
return 0;
}
Expand Down
5 changes: 3 additions & 2 deletions lib/private/Preview/PreviewMigrationService.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,9 @@ public function migrateFileId(int $fileId, bool $flatPath, ?array $entries = nul
->where($qb->expr()->eq('fileid', $qb->createNamedParameter($fileId)))
->setMaxResults(1);

$result = $qb->executeQuery();
$result = $result->fetchAssociative();
$cursor = $qb->executeQuery();
$result = $cursor->fetchAssociative();
$cursor->closeCursor();

if ($result !== false) {
$oldFileIdsToDelete = [];
Expand Down
4 changes: 2 additions & 2 deletions lib/public/Migration/Attributes/IndexMigrationAttribute.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@
use OCP\AppFramework\Attribute\Consumable;

/**
* generic class related to migration attribute about index changes
* Generic class related to migration attribute about index changes
*/
#[Consumable(since: '30.0.0')]
class IndexMigrationAttribute extends MigrationAttribute {
/**
* @param string $table name of the database table
* @param IndexType|null $type type of the index
* @param string $description description of the migration
* @param array $notes notes abour the migration/index
* @param array $notes notes about the migration/index
* @since 30.0.0
*/
public function __construct(
Expand Down
57 changes: 6 additions & 51 deletions tests/Core/Command/Preview/CleanupTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ public function testCleanup(): void {

$appDataFolder = $this->createMock(Folder::class);
$appDataFolder->expects($this->once())->method('get')->with('preview')->willReturn($previewFolder);
$appDataFolder->expects($this->once())->method('newFolder')->with('preview');

$this->rootFolder->expects($this->once())
->method('getAppDataDirectoryName')
Expand All @@ -65,22 +64,19 @@ public function testCleanup(): void {
->with('appdata_some_id')
->willReturn($appDataFolder);

$this->output->expects($this->exactly(3))->method('writeln')
$this->output->expects($this->exactly(2))->method('writeln')
->with(self::callback(function (string $message): bool {
static $i = 0;
return match (++$i) {
1 => $message === 'Preview folder deleted',
2 => $message === 'Preview folder recreated',
3 => $message === 'Previews removed'
2 => $message === 'Previews removed'
};
}));

$this->assertEquals(0, $this->repair->run($this->input, $this->output));
}

public function testCleanupWhenNotDeletable(): void {
$this->previewService->expects($this->once())->method('deleteAll');

$previewFolder = $this->createMock(Folder::class);
$previewFolder->expects($this->once())
->method('isDeletable')
Expand All @@ -91,7 +87,6 @@ public function testCleanupWhenNotDeletable(): void {

$appDataFolder = $this->createMock(Folder::class);
$appDataFolder->expects($this->once())->method('get')->with('preview')->willReturn($previewFolder);
$appDataFolder->expects($this->never())->method('newFolder')->with('preview');

$this->rootFolder->expects($this->once())
->method('getAppDataDirectoryName')
Expand All @@ -110,8 +105,6 @@ public function testCleanupWhenNotDeletable(): void {

#[\PHPUnit\Framework\Attributes\DataProvider('dataForTestCleanupWithDeleteException')]
public function testCleanupWithDeleteException(string $exceptionClass, string $errorMessage): void {
$this->previewService->expects($this->once())->method('deleteAll');

$previewFolder = $this->createMock(Folder::class);
$previewFolder->expects($this->once())
->method('isDeletable')
Expand All @@ -123,7 +116,6 @@ public function testCleanupWithDeleteException(string $exceptionClass, string $e

$appDataFolder = $this->createMock(Folder::class);
$appDataFolder->expects($this->once())->method('get')->with('preview')->willReturn($previewFolder);
$appDataFolder->expects($this->never())->method('newFolder')->with('preview');

$this->rootFolder->expects($this->once())
->method('getAppDataDirectoryName')
Expand All @@ -147,53 +139,16 @@ public static function dataForTestCleanupWithDeleteException(): array {
];
}

public function testCleanupWithCreateException(): void {
$this->previewService->expects($this->once())->method('deleteAll');

$previewFolder = $this->createMock(Folder::class);
$previewFolder->expects($this->once())
->method('isDeletable')
->willReturn(true);

$previewFolder->expects($this->once())
->method('delete');

$appDataFolder = $this->createMock(Folder::class);
$appDataFolder->expects($this->once())->method('get')->with('preview')->willReturn($previewFolder);
$appDataFolder->expects($this->once())->method('newFolder')->with('preview')->willThrowException(new NotPermittedException());

$this->rootFolder->expects($this->once())
->method('getAppDataDirectoryName')
->willReturn('appdata_some_id');

$this->rootFolder->expects($this->once())
->method('get')
->with('appdata_some_id')
->willReturn($appDataFolder);

$this->output->expects($this->exactly(2))->method('writeln')
->with(self::callback(function (string $message): bool {
static $i = 0;
return match (++$i) {
1 => $message === 'Preview folder deleted',
2 => $message === "Preview folder was deleted, but you don't have the permission to create preview folder",
};
}));

$this->logger->expects($this->once())->method('error')->with("Preview folder was deleted, but you don't have the permission to create preview folder");

$this->assertEquals(1, $this->repair->run($this->input, $this->output));
}

public function testCleanupWithPreviewServiceException(): void {
$this->rootFolder->method('getAppDataDirectoryName')
->willThrowException(new NotFoundException());

$this->previewService->expects($this->once())->method('deleteAll')
->willThrowException(new NotPermittedException('abc'));

$this->logger->expects($this->once())->method('info')->with("Legacy previews can't be removed: appdata folder can't be found");
$this->logger->expects($this->once())->method('error')->with("Previews can't be removed: exception occurred: abc");

$this->rootFolder->expects($this->never())
->method('get');

$this->assertEquals(1, $this->repair->run($this->input, $this->output));
}
}