3 namespace Drupal\media_entity_slideshow\Tests;
5 use Drupal\Core\Language\Language;
6 use Drupal\file\Entity\File;
7 use Drupal\media\Entity\Media;
8 use Drupal\simpletest\WebTestBase;
11 * Tests for media entity slideshow.
13 * @group media_entity_slideshow
15 class MediaEntitySlideshowTest extends WebTestBase {
22 public static $modules = [
23 'media_entity_slideshow_test',
28 * The slideshow media bundle.
30 * @var \Drupal\media\MediaTypeInterface
32 protected $slideshowMediaBundle;
35 * The image media bundle.
37 * @var \Drupal\media\MediaTypeInterface
39 protected $imageMediaBundle;
42 * A collection of media entities, to be used in our test.
44 * @var \Drupal\media\MediaInterface[]
46 protected $mediaImageCollection;
51 public function setUp() {
53 $bundle_storage = $this->container->get('entity_type.manager')->getStorage('media_type');
54 $this->slideshowMediaBundle = $bundle_storage->load('slideshow_bundle');
55 $this->imageMediaBundle = $bundle_storage->load('image_bundle');
56 $adminUser = $this->drupalCreateUser([
64 $this->drupalLogin($adminUser);
66 $this->mediaImageCollection = $this->createMediaImageCollection();
70 * Tests media entity slideshow.
72 public function testMediaEntitySlideshow() {
74 // If we have a bundle already the schema is correct.
75 $this->assertTrue((bool) $this->slideshowMediaBundle, 'The media bundle from default configuration has been created in the database.');
77 // Test the creation of a media entity of the slidehsow bundle.
78 $this->drupalGet('media/add/' . $this->slideshowMediaBundle->id());
80 'name[0][value]' => 'My first slideshow',
81 'field_slides[0][target_id]' => $this->mediaImageCollection[0]->label() . ' (' . $this->mediaImageCollection[0]->id() . ')',
83 $this->drupalPostForm(NULL, $edit, t('Save'));
84 $this->assertText('Slideshow bundle My first slideshow has been created', 'Slideshow media entity was correctly created.');
85 $slideshow_id = $this->container->get('entity.query')
87 ->condition('bundle', 'slideshow_bundle')
88 ->sort('created', 'DESC')
90 $slideshow = $this->loadMedia(reset($slideshow_id));
92 // Add one more slide to it.
93 $this->drupalGet('media/' . $slideshow->id() . '/edit');
95 'field_slides[0][target_id]' => $this->mediaImageCollection[0]->label() . ' (' . $this->mediaImageCollection[0]->id() . ')',
96 'field_slides[1][target_id]' => $this->mediaImageCollection[1]->label() . ' (' . $this->mediaImageCollection[1]->id() . ')',
98 $this->drupalPostForm(NULL, $edit, t('Save'));
99 $this->assertResponse(200, 'Form submitted correctly');
100 $slideshow = $this->loadMedia($slideshow->id());
101 $this->assertEqual($slideshow->field_slides->count(), 2, 'A new slide was correctly added to the slideshow.');
103 // Test removing one of the slides.
104 $this->drupalGet('media/' . $slideshow->id() . '/edit');
106 'field_slides[0][target_id]' => $this->mediaImageCollection[0]->label() . ' (' . $this->mediaImageCollection[0]->id() . ')',
107 'field_slides[1][target_id]' => '',
109 $this->drupalPostForm(NULL, $edit, t('Save'));
110 $this->assertResponse(200, 'Form submitted correctly');
111 $slideshow = $this->loadMedia($slideshow->id());
112 $this->assertEqual($slideshow->field_slides->count(), 1, 'The deletion of one slide worked properly.');
114 // Delete the slideshow entirely.
115 $this->drupalGet('/media/' . $slideshow->id() . '/delete');
116 $this->drupalPostForm(NULL, [], t('Delete'));
117 $this->assertResponse(200, 'Form submitted correctly');
118 $this->assertText('The media My first slideshow has been deleted', 'The slideshow was correctly deleted.');
122 * Creates an array of media images to be used in testing.
125 * (optional) The number of items to create. Defaults to 3.
127 * @return \Drupal\media\MediaInterface[]
128 * An indexed array of fully-loaded media objects of bundle image.
130 private function createMediaImageCollection($count = 3) {
132 for ($i = 1; $i <= $count; $i++) {
133 $media = Media::create([
134 'bundle' => $this->imageMediaBundle->id(),
135 'name' => 'Image media ' . $i,
137 'langcode' => Language::LANGCODE_DEFAULT,
140 $image = $this->getTestFile('image');
141 $media->field_imagefield->target_id = $image->id();
143 $collection[] = $media;
149 * Load the specified media from the storage.
152 * The media identifier.
154 * @return \Drupal\Core\Entity\EntityInterface
155 * The loaded media entity.
157 protected function loadMedia($id) {
158 /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
159 $storage = $this->container->get('entity_type.manager')->getStorage('media');
160 return $storage->loadUnchanged($id);
164 * Retrieves a sample file of the specified type.
166 * @return \Drupal\file\FileInterface
167 * A file object recently created and saved.
169 protected function getTestFile($type_name, $size = NULL) {
170 $file = current($this->drupalGetTestFiles($type_name, $size));
171 $file->filesize = filesize($file->uri);
172 /** @var \Drupal\file\FileInterface $file */
173 $file = File::create((array) $file);
174 $file->setPermanent();