Update DropFile to handle object versioning

This commit is contained in:
2024-09-02 16:24:23 +02:00
parent b6edbb3eed
commit 3d49c959e0
42 changed files with 857 additions and 539 deletions

View File

@@ -14,19 +14,37 @@ namespace AsyncUpload\Driver\OpenstackObjectStore;
use Chill\DocStoreBundle\AsyncUpload\Driver\OpenstackObjectStore\TempUrlOpenstackGenerator;
use Chill\DocStoreBundle\AsyncUpload\SignedUrl;
use Chill\DocStoreBundle\AsyncUpload\SignedUrlPost;
use PHPUnit\Framework\TestCase;
use Psr\Log\NullLogger;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Clock\MockClock;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\Multipart\FormDataPart;
use Symfony\Contracts\HttpClient\Exception\HttpExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
/**
* @internal
*
* @coversNothing
*/
class TempUrlOpenstackGeneratorTest extends TestCase
class TempUrlOpenstackGeneratorTest extends KernelTestCase
{
private ParameterBagInterface $parameterBag;
private HttpClientInterface $client;
private const TESTING_OBJECT_NAME_PREFIX = 'test-prefix-o0o008wk404gcos40k8s4s4c44cgwwos4k4o8k/';
private const TESTING_OBJECT_NAME = 'object-name-4fI0iAtq';
private function setUpIntegration(): void
{
self::bootKernel();
$this->parameterBag = self::getContainer()->get(ParameterBagInterface::class);
$this->client = self::getContainer()->get(HttpClientInterface::class);
}
/**
* @dataProvider dataProviderGenerate
*/
@@ -175,4 +193,62 @@ class TempUrlOpenstackGeneratorTest extends TestCase
];
}
}
/**
* @group openstack-integration
*/
public function testGeneratePostIntegration(): void
{
$this->setUpIntegration();
$generator = new TempUrlOpenstackGenerator(new NullLogger(), new EventDispatcher(), new MockClock(), $this->parameterBag);
$signedUrl = $generator->generatePost(object_name: self::TESTING_OBJECT_NAME_PREFIX);
$formData = new FormDataPart([
'redirect', $signedUrl->redirect,
'max_file_size' => (string) $signedUrl->max_file_size,
'max_file_count' => (string) $signedUrl->max_file_count,
'expires' => (string) $signedUrl->expires->getTimestamp(),
'signature' => $signedUrl->signature,
self::TESTING_OBJECT_NAME => DataPart::fromPath(
__DIR__.'/file-to-upload.txt',
self::TESTING_OBJECT_NAME
),
]);
$response = $this->client
->request(
'POST',
$signedUrl->url,
[
'body' => $formData->bodyToString(),
'headers' => $formData->getPreparedHeaders()->toArray(),
]
);
self::assertEquals(201, $response->getStatusCode());
}
/**
* @group openstack-integration
*
* @depends testGeneratePostIntegration
*/
public function testGenerateGetIntegration(): void
{
$this->setUpIntegration();
$generator = new TempUrlOpenstackGenerator(new NullLogger(), new EventDispatcher(), new MockClock(), $this->parameterBag);
$signedUrl = $generator->generate('GET', self::TESTING_OBJECT_NAME_PREFIX.self::TESTING_OBJECT_NAME);
$response = $this->client->request('GET', $signedUrl->url);
self::assertEquals(200, $response->getStatusCode());
try {
$content = $response->getContent();
self::assertEquals(file_get_contents(__DIR__.'/file-to-upload.txt'), $content);
} catch (HttpExceptionInterface $exception) {
$this->fail('could not retrieve file content: '.$exception->getMessage());
}
}
}