Skip to content

Commit 6ccb8b0

Browse files
committed
Merged branch '4.6'
2 parents 3194ce7 + 32778cb commit 6ccb8b0

3 files changed

Lines changed: 73 additions & 11 deletions

File tree

phpstan-baseline.neon

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6414,12 +6414,6 @@ parameters:
64146414
count: 2
64156415
path: src/lib/FieldType/Image/ImageStorage/Gateway/DoctrineStorage.php
64166416

6417-
-
6418-
message: '#^Method Ibexa\\Core\\FieldType\\Image\\ImageThumbnailProxyStrategy\:\:getThumbnail\(\) never returns null so it can be removed from the return type\.$#'
6419-
identifier: return.unusedType
6420-
count: 1
6421-
path: src/lib/FieldType/Image/ImageThumbnailProxyStrategy.php
6422-
64236417
-
64246418
message: '#^Parameter \#3 \$pad_string of function str_pad expects string, int given\.$#'
64256419
identifier: argument.type

src/lib/FieldType/Image/ImageThumbnailProxyStrategy.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,13 @@
1414
use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo;
1515
use Ibexa\Core\Repository\ProxyFactory\ProxyGeneratorInterface;
1616
use ProxyManager\Proxy\LazyLoadingInterface;
17+
use RuntimeException;
1718

1819
final class ImageThumbnailProxyStrategy implements FieldTypeBasedThumbnailStrategy
1920
{
20-
/** @var \Ibexa\Core\FieldType\Image\ImageThumbnailStrategy */
21-
private $imageThumbnailStrategy;
21+
private ImageThumbnailStrategy $imageThumbnailStrategy;
2222

23-
/** @var \Ibexa\Core\Repository\ProxyFactory\ProxyGeneratorInterface */
24-
private $proxyGenerator;
23+
private ProxyGeneratorInterface $proxyGenerator;
2524

2625
public function __construct(
2726
ImageThumbnailStrategy $imageThumbnailStrategy,
@@ -36,7 +35,7 @@ public function getFieldTypeIdentifier(): string
3635
return $this->imageThumbnailStrategy->getFieldTypeIdentifier();
3736
}
3837

39-
public function getThumbnail(Field $field, ?VersionInfo $versionInfo = null): ?Thumbnail
38+
public function getThumbnail(Field $field, ?VersionInfo $versionInfo = null): Thumbnail
4039
{
4140
$initializer = function (
4241
&$wrappedObject,
@@ -49,6 +48,15 @@ public function getThumbnail(Field $field, ?VersionInfo $versionInfo = null): ?T
4948

5049
$wrappedObject = $this->imageThumbnailStrategy->getThumbnail($field, $versionInfo);
5150

51+
if ($wrappedObject === null) {
52+
throw new RuntimeException(sprintf(
53+
'Failed to prepare thumbnail for field type "%s" (ID: %s) using "%s" strategy.',
54+
$field->getId(),
55+
$field->getFieldTypeIdentifier(),
56+
get_debug_type($this->imageThumbnailStrategy),
57+
));
58+
}
59+
5260
return true;
5361
};
5462

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
3+
/**
4+
* @copyright Copyright (C) Ibexa AS. All rights reserved.
5+
* @license For full copyright and license information view LICENSE file distributed with this source code.
6+
*/
7+
declare(strict_types=1);
8+
9+
namespace Ibexa\Tests\Bundle\IO\FieldType\Image;
10+
11+
use Ibexa\Contracts\Core\Repository\Values\Content\Field;
12+
use Ibexa\Contracts\Core\Repository\Values\Content\VersionInfo;
13+
use Ibexa\Core\FieldType\Image\ImageThumbnailProxyStrategy;
14+
use Ibexa\Core\FieldType\Image\ImageThumbnailStrategy;
15+
use Ibexa\Core\Repository\ProxyFactory\ProxyGenerator;
16+
use PHPUnit\Framework\MockObject\MockObject;
17+
use PHPUnit\Framework\TestCase;
18+
use RuntimeException;
19+
20+
final class ImageThumbnailProxyStrategyTest extends TestCase
21+
{
22+
private ImageThumbnailStrategy & MockObject $imageThumbnailStrategyMock;
23+
24+
private ImageThumbnailProxyStrategy $strategy;
25+
26+
protected function setUp(): void
27+
{
28+
$this->imageThumbnailStrategyMock = $this->createMock(ImageThumbnailStrategy::class);
29+
$proxyGenerator = new ProxyGenerator(__DIR__ . '/../../../../../var/proxy');
30+
31+
$this->strategy = new ImageThumbnailProxyStrategy(
32+
$this->imageThumbnailStrategyMock,
33+
$proxyGenerator,
34+
);
35+
}
36+
37+
public function testGetThumbnailThrowsExceptionIfWrappedObjectIsNull(): void
38+
{
39+
$field = $this->createMock(Field::class);
40+
$field->method('getId')->willReturn(123);
41+
$field->method('getFieldTypeIdentifier')->willReturn('ezimage');
42+
43+
$versionInfo = $this->createMock(VersionInfo::class);
44+
45+
$this->imageThumbnailStrategyMock
46+
->expects(self::once())
47+
->method('getThumbnail')
48+
->with($field, $versionInfo)
49+
->willReturn(null);
50+
51+
$thumbnail = $this->strategy->getThumbnail($field, $versionInfo);
52+
53+
$this->expectException(RuntimeException::class);
54+
$this->expectExceptionMessage('Failed to prepare thumbnail for field type "123" (ID: ezimage) using');
55+
56+
// Initialize proxy
57+
// @phpstan-ignore expr.resultUnused
58+
$thumbnail->mimeType;
59+
}
60+
}

0 commit comments

Comments
 (0)