hn-8.x-1.x-dev/tests/src/Kernel/ImageItemNormalizerTest.php
tests/src/Kernel/ImageItemNormalizerTest.php
<?php
namespace Drupal\Tests\hn\Kernel;
use Drupal\entity_test\Entity\EntityTest;
use Drupal\image\Entity\ImageStyle;
use Drupal\Tests\image\Kernel\ImageItemTest;
/**
* Tests for the ImageItemNormalizer.
*
* @group hn_image
*/
class ImageItemNormalizerTest extends ImageItemTest {
public static $modules = ['hn_image', 'serialization'];
/**
* Test a normal image item, without and with image styles.
*/
public function testImageItem() {
// Create a test entity with the image field set.
$entity = EntityTest::create();
$entity->set('image_test', [
'target_id' => $this->image->id(),
'alt' => $this->randomMachineName(),
'title' => $this->randomMachineName(),
]);
$entity->set('name', $this->randomMachineName());
$entity->save();
$entity = EntityTest::load($entity->id());
/** @var \Drupal\file\Plugin\Field\FieldType\FileFieldItemList $image_item_list */
$image_item_list = $entity->get('image_test');
/** @var \Drupal\image\Plugin\Field\FieldType\ImageItem $image_item */
$image_item = $image_item_list->get(0);
/** @var \Drupal\hn_image\Normalizer\ImageItemNormalizer $normalizer */
$normalizer = $this->container->get('serializer.normalizer.hn_image.image_item');
$this->assertFalse($normalizer->supportsNormalization($image_item_list));
$this->assertFalse($normalizer->supportsDenormalization($image_item_list->getValue(), $image_item_list));
$this->assertFalse($normalizer->supportsDenormalization($image_item->getValue(), $image_item));
$this->assertTrue($normalizer->supportsNormalization($image_item));
$normalizer->setSerializer($this->container->get('serializer'));
$normalized = $normalizer->normalize($image_item);
$this->assertEquals((string) $this->image->url(), $normalized['url']);
$this->assertEmpty($normalized['image_styles']);
// Create two image styles.
// @see \Drupal\Tests\image\Kernel\ImageStyleIntegrationTest
/** @var \Drupal\image\ImageStyleInterface $style */
$style = ImageStyle::create(['name' => 'unchanged_style']);
$style->save();
/** @var \Drupal\image\ImageStyleInterface $crop_style */
$resize_width = rand(1, 1000);
$resize_height = rand(1, 1000);
$effect_manager = $this->container->get('plugin.manager.image.effect');
$resize_effect = $effect_manager->createInstance('image_crop', [
'data' => [
'width' => $resize_width,
'height' => $resize_height,
],
]);
$crop_style = ImageStyle::create(['name' => 'crop_style']);
$crop_style->getEffects()->set($this->randomMachineName(), $resize_effect);
$crop_style->save();
$normalized = $normalizer->normalize($image_item);
$this->assertEquals((string) $this->image->url(), $normalized['url']);
$this->assertEquals([
'unchanged_style' => [
'url' => $style->buildUrl($this->image->getFileUri()),
'width' => '88',
'height' => '100',
],
'crop_style' => [
'url' => $crop_style->buildUrl($this->image->getFileUri()),
'width' => $resize_width,
'height' => $resize_height,
],
], $normalized['image_styles']);
}
/**
* Don't execute, because otherwise it's parent runs.
*/
public function testImageItemMalformed() {
$this->markTestSkipped();
}
}
