Version 1
[yaffs-website] / web / modules / contrib / media_entity_twitter / tests / src / Kernel / ThumbnailTest.php
diff --git a/web/modules/contrib/media_entity_twitter/tests/src/Kernel/ThumbnailTest.php b/web/modules/contrib/media_entity_twitter/tests/src/Kernel/ThumbnailTest.php
new file mode 100644 (file)
index 0000000..850b78a
--- /dev/null
@@ -0,0 +1,176 @@
+<?php
+
+namespace Drupal\Tests\media_entity_twitter\Kernel;
+
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\media_entity\Entity\Media;
+use Drupal\media_entity\Entity\MediaBundle;
+use Drupal\media_entity\MediaInterface;
+use Drupal\media_entity_twitter\Plugin\MediaEntity\Type\Twitter;
+use Drupal\media_entity_twitter\TweetFetcherInterface;
+
+/**
+ * Tests SVG thumbnail generation from Twitter API responses.
+ *
+ * @group media_entity_twitter
+ */
+class ThumbnailTest extends KernelTestBase {
+
+  /**
+   * The mocked tweet fetcher.
+   *
+   * @var TweetFetcherInterface
+   */
+  protected $tweetFetcher;
+
+  /**
+   * The plugin under test.
+   *
+   * @var Twitter
+   */
+  protected $plugin;
+
+  /**
+   * A tweet media entity.
+   *
+   * @var MediaInterface
+   */
+  protected $entity;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'field',
+    'file',
+    'image',
+    'media_entity',
+    'media_entity_twitter',
+    'system',
+    'text',
+    'user',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installEntitySchema('file');
+    $this->installEntitySchema('media');
+    $this->installConfig(['media_entity_twitter', 'system']);
+
+    $this->tweetFetcher = $this->getMock(TweetFetcherInterface::class);
+    $this->container->set('media_entity_twitter.tweet_fetcher', $this->tweetFetcher);
+
+    MediaBundle::create([
+      'id' => 'tweet',
+      'type' => 'twitter',
+      'type_configuration' => [
+        'source_field' => 'tweet',
+        'use_twitter_api' => TRUE,
+        'consumer_key' => $this->randomString(),
+        'consumer_secret' => $this->randomString(),
+        'oauth_access_token' => $this->randomString(),
+        'oauth_access_token_secret' => $this->randomString(),
+      ],
+    ])->save();
+
+    FieldStorageConfig::create([
+      'field_name' => 'tweet',
+      'entity_type' => 'media',
+      'type' => 'string_long',
+    ])->save();
+
+    FieldConfig::create([
+      'field_name' => 'tweet',
+      'entity_type' => 'media',
+      'bundle' => 'tweet',
+    ])->save();
+
+    $this->entity = Media::create([
+      'bundle' => 'tweet',
+      'tweet' => 'https://twitter.com/foobar/status/12345',
+    ]);
+
+    $this->plugin = Twitter::create(
+      $this->container,
+      MediaBundle::load('tweet')->getTypeConfiguration(),
+      'twitter',
+      []
+    );
+
+    $dir = $this->container
+      ->get('config.factory')
+      ->get('media_entity_twitter.settings')
+      ->get('local_images');
+
+    file_prepare_directory($dir, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
+  }
+
+  /**
+   * Tests that an existing local image is used as the thumbnail.
+   */
+  public function testLocalImagePresent() {
+    $this->tweetFetcher
+      ->method('fetchTweet')
+      ->willReturn([
+        'extended_entities' => [
+          'media' => [
+            [
+              'media_url' => 'https://drupal.org/favicon.ico',
+            ],
+          ],
+        ],
+      ]);
+
+    $uri = 'public://twitter-thumbnails/12345.ico';
+    touch($uri);
+    $this->assertEquals($uri, $this->plugin->thumbnail($this->entity));
+  }
+
+  /**
+   * Tests that a local image is downloaded if available but not present.
+   */
+  public function testLocalImageNotPresent() {
+    $this->tweetFetcher
+      ->method('fetchTweet')
+      ->willReturn([
+        'extended_entities' => [
+          'media' => [
+            [
+              'media_url' => 'https://drupal.org/favicon.ico',
+            ],
+          ],
+        ],
+      ]);
+
+    $this->plugin->thumbnail($this->entity);
+    $this->assertFileExists('public://twitter-thumbnails/12345.ico');
+  }
+
+  /**
+   * Tests that the default thumbnail is used if no local image is available.
+   */
+  public function testNoLocalImage() {
+    $this->assertEquals(
+      $this->plugin->getDefaultThumbnail(),
+      $this->plugin->thumbnail($this->entity)
+    );
+  }
+
+  /**
+   * Tests that thumbnail is generated if enabled and local image not available.
+   */
+  public function testThumbnailGeneration() {
+    $configuration = $this->plugin->getConfiguration();
+    $configuration['generate_thumbnails'] = TRUE;
+    $this->plugin->setConfiguration($configuration);
+
+    $uri = $this->plugin->thumbnail($this->entity);
+    $this->assertFileExists($uri);
+  }
+
+}