Skip to content

Commit

Permalink
feat: add missing tests for MediaUrlLoader
Browse files Browse the repository at this point in the history
  • Loading branch information
tinect committed Dec 2, 2023
1 parent 3cad4fa commit 2e59956
Show file tree
Hide file tree
Showing 3 changed files with 238 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/Controller/Api/TestController.php
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ private function getSampleMedia(string $testFile): MediaEntity
private function getMediaById(string $fileName, Context $context): ?MediaEntity
{
$criteria = new Criteria();
//we use the fileName filter to add backward compatibility
// we use the fileName filter to add backward compatibility
$criteria->addFilter(new EqualsFilter('fileName', $fileName));

/** @var MediaCollection $entities */
Expand Down
2 changes: 1 addition & 1 deletion src/Core/Media/MediaUrlLoader.php
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ private function map(iterable $entities): array
}

if (!$thumbnail->has('width')) {
//TODO: load it! it might be empty due to PartialDataLoading, maybe subscribe to partial.thumbnail.loaded
// TODO: load it! it might be empty due to PartialDataLoading, maybe subscribe to partial.thumbnail.loaded
continue;
}

Expand Down
236 changes: 236 additions & 0 deletions tests/unit/Core/Media/MediaUrlLoaderTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,236 @@
<?php declare(strict_types=1);

namespace Frosh\ThumbnailProcessor\Tests\Unit\Core\Media;

use Frosh\ThumbnailProcessor\Core\Media\MediaUrlGenerator;
use Frosh\ThumbnailProcessor\Core\Media\MediaUrlLoader;
use PHPUnit\Framework\TestCase;
use Shopware\Core\Framework\DataAbstractionLayer\PartialEntity;
use Shopware\Core\Framework\Uuid\Uuid;

class MediaUrlLoaderTest extends TestCase
{
public function testLoaded() {
$id = Uuid::randomHex();

$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::once())
->method('generate')
->willReturn([$id => 'https://example.com/a0/image.jpg']);

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => $id,
'path' => 'a0/image.txt',
'private' => false,
]);

static::assertFalse($entity->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertTrue($entity->has('url'));
static::assertSame('https://example.com/a0/image.jpg', $entity->get('url'));
}

public function testLoadedWithMissingPrivate() {
$id = Uuid::randomHex();

$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::never())
->method('generate')
->willReturn([$id => 'https://example.com/a0/image.jpg']);

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => $id,
'path' => 'a0/image.txt',
]);

static::assertFalse($entity->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertFalse($entity->has('url'));
}

public function testLoadedWithMissingUrlResult() {
$id = Uuid::randomHex();

$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::once())
->method('generate')
->willReturn([]);

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => $id,
'path' => 'a0/image.txt',
'private' => false,
]);

static::assertFalse($entity->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertFalse($entity->has('url'));
}

public function testLoadedWithMissingPathResult() {
$id = Uuid::randomHex();

$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::never())
->method('generate');

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => $id,
'private' => false,
]);

static::assertFalse($entity->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertFalse($entity->has('url'));
}

public function testLoadedWithThumbnailHavingUrls() {
$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::once())
->method('generate')
->willReturn([
'1' => 'https://example.com/a0/image.jpg?width=100',
'2' => 'https://example.com/a0/thumbnailimage.jpg?width=100',
]);

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => '1',
'path' => 'a0/image.txt',
'private' => false,
'width' => 100,
'thumbnails' => [
(new PartialEntity())->assign([
'id' => '2',
'path' => 'a0/thumbnailimage.jpg',
'width' => 100,
]),
],
]);

static::assertFalse($entity->has('url'));
static::assertFalse($entity->get('thumbnails')[0]->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertTrue($entity->has('url'));
static::assertTrue($entity->get('thumbnails')[0]->has('url'));
static::assertSame('https://example.com/a0/thumbnailimage.jpg?width=100', $entity->get('thumbnails')[0]->get('url'));
}

public function testLoadedWithThumbnailHavingNoUrlsWithMissingWidth() {
$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::once())
->method('generate')
->willReturn([
'1' => 'https://example.com/a0/image.jpg?width=100',
]);

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => '1',
'path' => 'a0/image.txt',
'private' => false,
'thumbnails' => [
(new PartialEntity())->assign([
'id' => '2',
'path' => 'a0/thumbnailimage.jpg',
]),
],
]);

static::assertFalse($entity->has('url'));
static::assertFalse($entity->get('thumbnails')[0]->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertTrue($entity->has('url'));
static::assertFalse($entity->get('thumbnails')[0]->has('url'));
}

public function testLoadedWithThumbnailHavingNoUrl() {
$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::once())
->method('generate')
->willReturn([
'1' => 'https://example.com/a0/image.jpg',
]);

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => '1',
'path' => 'a0/image.txt',
'private' => false,
'width' => 100,
'thumbnails' => [
(new PartialEntity())->assign([
'id' => '2',
]),
],
]);

static::assertFalse($entity->has('url'));
static::assertFalse($entity->get('thumbnails')[0]->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertTrue($entity->has('url'));
static::assertFalse($entity->get('thumbnails')[0]->has('url'));
}

/**
* @dataProvider provideInvalidThumbnailData
*/
public function testLoadedWithNotIterableThumbnail(mixed $thumbnail) {
$mediaUrlGenerator = $this->createMock(MediaUrlGenerator::class);
$mediaUrlGenerator->expects(static::once())
->method('generate')
->willReturn([
'1' => 'https://example.com/a0/image.jpg',
]);

$mediaUrlLoader = new MediaUrlLoader($mediaUrlGenerator);
$entity = new PartialEntity();
$entity->assign([
'id' => '1',
'path' => 'a0/image.txt',
'private' => false,
'width' => 100,
'thumbnails' => $thumbnail,
]);

static::assertFalse($entity->has('url'));

$mediaUrlLoader->loaded([$entity]);

static::assertTrue($entity->has('url'));
}

public function provideInvalidThumbnailData(): iterable
{
yield [[]];
yield [[null]];
yield [''];
yield [['']];
yield [new PartialEntity()];
}
}

0 comments on commit 2e59956

Please sign in to comment.