prophesize(TempUrlGeneratorInterface::class); $generator->generate(Argument::in(['GET', 'POST']), Argument::type('string'), Argument::any()) ->will(fn (array $args): SignedUrl => new SignedUrl($args[0], 'https://object.store.example/container/'.$args[1], new \DateTimeImmutable('1 hours'))); $urlGenerator = $this->prophesize(UrlGeneratorInterface::class); $urlGenerator->generate('async_upload.generate_url', Argument::type('array')) ->willReturn('url'); $this->asyncUploadExtension = new AsyncUploadExtension( $generator->reveal(), $urlGenerator->reveal() ); } /** * @dataProvider dataProviderStoredObject */ public function testComputeSignedUrl(StoredObject|string $storedObject): void { $actual = $this->asyncUploadExtension->computeSignedUrl($storedObject); self::assertStringContainsString('https://object.store.example/container', $actual); self::assertStringContainsString(is_string($storedObject) ? $storedObject : $storedObject->getFilename(), $actual); } /** * @dataProvider dataProviderStoredObject */ public function testComputeGenerateUrl(StoredObject|string $storedObject): void { $actual = $this->asyncUploadExtension->computeGenerateUrl($storedObject); self::assertEquals('url', $actual); } public function dataProviderStoredObject(): iterable { yield [(new StoredObject())->setFilename('blabla')]; yield ['blabla']; } }