Project

General

Profile

Bug #103051 » FalTestCommand.php

Lars Peter Søndergaard, 2024-02-05 14:12

 
<?php

namespace Foo\Foobar\Command;

use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use TYPO3\CMS\Core\Core\Environment;
use TYPO3\CMS\Core\Resource\DuplicationBehavior;
use TYPO3\CMS\Core\Resource\Folder;
use TYPO3\CMS\Core\Resource\ResourceFactory;

#[AsCommand(
name: 'fal:test',
description: 'Test command for FAL',
)]
class FalTestCommand extends Command
{
protected ResourceFactory $resourceFactory;

public function injectResourceFactory(
ResourceFactory $resourceFactory,
): void {
$this->resourceFactory = $resourceFactory;
}


public function execute(InputInterface $input, OutputInterface $output): int
{
$localFile = $this->prepareTestLocalFile();
$folder = $this->prepareTestFolder();
$storage = $folder->getStorage();

// add file ($folder->addFile doesn't have "removeOriginal" argument, but it's basically the same)
$file = $storage->addFile($localFile, $folder, '', DuplicationBehavior::RENAME, false);


$path = $file->getForLocalProcessing(false);
unlink($path); // Assume deletion via FTP or similar.


// using this API updates "missing" property.
$storage->getFile($file->getIdentifier());


// try to add file. Should result in error if EXT:webhook is installed.
$storage->addFile($localFile, $folder, '', DuplicationBehavior::RENAME, false);

return 0;
}

protected function prepareTestLocalFile(): string
{
$transient = Environment::getVarPath() . '/transient/';
$transient .= 'fal-test-file.txt';
file_put_contents($transient, 'some test content');
return $transient;
}

protected function prepareTestFolder(): Folder
{
$storage = $this->resourceFactory->getStorageObject(1);
if ($storage->hasFolder('/test-folder')) {
$folder = $storage->getFolder('/test-folder');
} else {
$folder = $storage->createFolder('test-folder');
}
return $folder;
}
}
    (1-1/1)