Drupal modules for browsing and managing Fedora-based digital repositories.
 
 
 
 

98 lines
3.2 KiB

<?php
namespace Drupal\Tests\islandora\Functional;
/**
* Tests the links for image fields with the islandora_image field formatter.
*
* @group islandora
* @coversDefaultClass \Drupal\islandora\Plugin\Field\FieldFormatter\IslandoraImageFormatter
*/
class IslandoraImageFormatterTest extends IslandoraFunctionalTestBase {
/**
* @covers \Drupal\islandora\Plugin\Field\FieldFormatter\IslandoraImageFormatter::viewElements
*/
public function testIslandoraImageFormatter() {
// Log in.
$account = $this->drupalCreateUser([
'bypass node access',
'view media',
'create media',
]);
$this->drupalLogin($account);
// Create an image media type.
$testImageMediaType = $this->createMediaType('image', ['id' => 'test_image_media_type']);
$testImageMediaType->save();
$this->createEntityReferenceField('media', $testImageMediaType->id(), 'field_media_of', 'Media Of', 'node', 'default', [], 2);
// Set the display mode to use the islandora_image formatter.
// Also, only show the image on display to remove clutter.
$display_options = [
'type' => 'islandora_image',
'settings' => [
'image_style' => '',
'image_link' => 'content',
'image_loading' => [
'attribute' => 'eager',
],
],
];
$display = $this->container->get('entity_display.repository')->getViewDisplay('media', $testImageMediaType->id(), 'default');
$display->setComponent('field_media_image', $display_options)
->removeComponent('created')
->removeComponent('uid')
->removeComponent('thumbnail')
->save();
// Make a node.
$node = $this->container->get('entity_type.manager')->getStorage('node')->create([
'type' => $this->testType->id(),
'title' => 'Test Node',
]);
$node->save();
// Make a image for the Media.
$file = $this->container->get('entity_type.manager')->getStorage('file')->create([
'uid' => $account->id(),
'uri' => "public://test.jpeg",
'filename' => "test.jpeg",
'filemime' => "image/jpeg",
]);
$file->setPermanent();
$file->save();
// Make the media, and associate it with the image and node.
$media = $this->container->get('entity_type.manager')->getStorage('media')->create([
'bundle' => $testImageMediaType->id(),
'name' => 'Media',
'field_media_image' =>
[
'target_id' => $file->id(),
'alt' => 'Some Alt',
'title' => 'Some Title',
],
'field_media_of' => ['target_id' => $node->id()],
]);
$media->save();
// View the media.
$this->drupalGet("media/1");
// Assert that the image is rendered into html as a link pointing
// to the Node, not the Media (that's what the islandora_image
// formatter does).
$elements = $this->xpath(
'//a[@href=:path]/img[@src=:url and @alt=:alt and @title=:title]',
[
':path' => $node->toUrl()->toString(),
':url' => $file->createFileUrl(),
':alt' => 'Some Alt',
':title' => 'Some Title',
]
);
$this->assertEquals(count($elements), 1, 'Image linked to content formatter displaying points to Node and not Media.');
}
}