Updating Media dependent modules to versions compatible with core Media.
[yaffs-website] / web / modules / contrib / media_entity_slideshow / src / Tests / MediaEntitySlideshowTest.php
diff --git a/web/modules/contrib/media_entity_slideshow/src/Tests/MediaEntitySlideshowTest.php b/web/modules/contrib/media_entity_slideshow/src/Tests/MediaEntitySlideshowTest.php
new file mode 100644 (file)
index 0000000..279b5d7
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+
+namespace Drupal\media_entity_slideshow\Tests;
+
+use Drupal\Core\Language\Language;
+use Drupal\file\Entity\File;
+use Drupal\media\Entity\Media;
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests for media entity slideshow.
+ *
+ * @group media_entity_slideshow
+ */
+class MediaEntitySlideshowTest extends WebTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'media_entity_slideshow_test',
+    'node',
+  ];
+
+  /**
+   * The slideshow media bundle.
+   *
+   * @var \Drupal\media\MediaTypeInterface
+   */
+  protected $slideshowMediaBundle;
+
+  /**
+   * The image media bundle.
+   *
+   * @var \Drupal\media\MediaTypeInterface
+   */
+  protected $imageMediaBundle;
+
+  /**
+   * A collection of media entities, to be used in our test.
+   *
+   * @var \Drupal\media\MediaInterface[]
+   */
+  protected $mediaImageCollection;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $bundle_storage = $this->container->get('entity_type.manager')->getStorage('media_type');
+    $this->slideshowMediaBundle = $bundle_storage->load('slideshow_bundle');
+    $this->imageMediaBundle = $bundle_storage->load('image_bundle');
+    $adminUser = $this->drupalCreateUser([
+      'view media',
+      'create media',
+      'update media',
+      'update any media',
+      'delete media',
+      'delete any media',
+    ]);
+    $this->drupalLogin($adminUser);
+
+    $this->mediaImageCollection = $this->createMediaImageCollection();
+  }
+
+  /**
+   * Tests media entity slideshow.
+   */
+  public function testMediaEntitySlideshow() {
+
+    // If we have a bundle already the schema is correct.
+    $this->assertTrue((bool) $this->slideshowMediaBundle, 'The media bundle from default configuration has been created in the database.');
+
+    // Test the creation of a media entity of the slidehsow bundle.
+    $this->drupalGet('media/add/' . $this->slideshowMediaBundle->id());
+    $edit = [
+      'name[0][value]' => 'My first slideshow',
+      'field_slides[0][target_id]' => $this->mediaImageCollection[0]->label() . ' (' . $this->mediaImageCollection[0]->id() . ')',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertText('Slideshow bundle My first slideshow has been created', 'Slideshow media entity was correctly created.');
+    $slideshow_id = $this->container->get('entity.query')
+      ->get('media')
+      ->condition('bundle', 'slideshow_bundle')
+      ->sort('created', 'DESC')
+      ->execute();
+    $slideshow = $this->loadMedia(reset($slideshow_id));
+
+    // Add one more slide to it.
+    $this->drupalGet('media/' . $slideshow->id() . '/edit');
+    $edit = [
+      'field_slides[0][target_id]' => $this->mediaImageCollection[0]->label() . ' (' . $this->mediaImageCollection[0]->id() . ')',
+      'field_slides[1][target_id]' => $this->mediaImageCollection[1]->label() . ' (' . $this->mediaImageCollection[1]->id() . ')',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertResponse(200, 'Form submitted correctly');
+    $slideshow = $this->loadMedia($slideshow->id());
+    $this->assertEqual($slideshow->field_slides->count(), 2, 'A new slide was correctly added to the slideshow.');
+
+    // Test removing one of the slides.
+    $this->drupalGet('media/' . $slideshow->id() . '/edit');
+    $edit = [
+      'field_slides[0][target_id]' => $this->mediaImageCollection[0]->label() . ' (' . $this->mediaImageCollection[0]->id() . ')',
+      'field_slides[1][target_id]' => '',
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+    $this->assertResponse(200, 'Form submitted correctly');
+    $slideshow = $this->loadMedia($slideshow->id());
+    $this->assertEqual($slideshow->field_slides->count(), 1, 'The deletion of one slide worked properly.');
+
+    // Delete the slideshow entirely.
+    $this->drupalGet('/media/' . $slideshow->id() . '/delete');
+    $this->drupalPostForm(NULL, [], t('Delete'));
+    $this->assertResponse(200, 'Form submitted correctly');
+    $this->assertText('The media My first slideshow has been deleted', 'The slideshow was correctly deleted.');
+  }
+
+  /**
+   * Creates an array of media images to be used in testing.
+   *
+   * @param int $count
+   *   (optional) The number of items to create. Defaults to 3.
+   *
+   * @return \Drupal\media\MediaInterface[]
+   *   An indexed array of fully-loaded media objects of bundle image.
+   */
+  private function createMediaImageCollection($count = 3) {
+    $collection = [];
+    for ($i = 1; $i <= $count; $i++) {
+      $media = Media::create([
+        'bundle' => $this->imageMediaBundle->id(),
+        'name' => 'Image media ' . $i,
+        'uid' => '1',
+        'langcode' => Language::LANGCODE_DEFAULT,
+        'status' => TRUE,
+      ]);
+      $image = $this->getTestFile('image');
+      $media->field_imagefield->target_id = $image->id();
+      $media->save();
+      $collection[] = $media;
+    }
+    return $collection;
+  }
+
+  /**
+   * Load the specified media from the storage.
+   *
+   * @param int $id
+   *   The media identifier.
+   *
+   * @return \Drupal\Core\Entity\EntityInterface
+   *   The loaded media entity.
+   */
+  protected function loadMedia($id) {
+    /** @var \Drupal\Core\Entity\ContentEntityStorageInterface $storage */
+    $storage = $this->container->get('entity_type.manager')->getStorage('media');
+    return $storage->loadUnchanged($id);
+  }
+
+  /**
+   * Retrieves a sample file of the specified type.
+   *
+   * @return \Drupal\file\FileInterface
+   *   A file object recently created and saved.
+   */
+  protected function getTestFile($type_name, $size = NULL) {
+    $file = current($this->drupalGetTestFiles($type_name, $size));
+    $file->filesize = filesize($file->uri);
+    /** @var \Drupal\file\FileInterface $file */
+    $file = File::create((array) $file);
+    $file->setPermanent();
+    $file->save();
+    return $file;
+  }
+
+}