Version 1
[yaffs-website] / web / modules / contrib / video_embed_field / tests / src / Functional / FormatterConfigurationTest.php
diff --git a/web/modules/contrib/video_embed_field/tests/src/Functional/FormatterConfigurationTest.php b/web/modules/contrib/video_embed_field/tests/src/Functional/FormatterConfigurationTest.php
new file mode 100644 (file)
index 0000000..985c005
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+
+namespace Drupal\Tests\video_embed_field\Functional;
+
+use Drupal\Tests\BrowserTestBase;
+use Drupal\video_embed_field\Plugin\Field\FieldFormatter\Thumbnail;
+
+/**
+ * Tests the field formatter configuration forms.
+ *
+ * @group video_embed_field
+ */
+class FormatterConfigurationTest extends BrowserTestBase {
+
+  use AdminUserTrait;
+  use EntityDisplaySetupTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = [
+    'video_embed_field',
+    'node',
+    'field_ui',
+    'colorbox',
+  ];
+
+  /**
+   * The URL to the manage display interface.
+   *
+   * @var string
+   */
+  protected $manageDisplay;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->drupalLogin($this->createAdminUser());
+    $this->setupEntityDisplays();
+    $this->manageDisplay = 'admin/structure/types/manage/test_content_type_name/display/teaser';
+  }
+
+  /**
+   * Test the formatter configuration forms.
+   */
+  public function testVideoConfirmationForm() {
+    // Test the settings form and summaries for the video formatter.
+    $this->setFormatter('video_embed_field_video');
+    $this->assertSession()->pageTextContains('Embedded Video (Responsive, autoplaying).');
+    $this->updateFormatterSettings([
+      'autoplay' => FALSE,
+      'responsive' => FALSE,
+      'width' => 100,
+      'height' => 100,
+    ]);
+    $this->assertSession()->pageTextContains('Embedded Video (100x100).');
+
+    // Test the image formatter.
+    $this->setFormatter('video_embed_field_thumbnail');
+    $this->assertSession()->pageTextContains('Video thumbnail (no image style).');
+    $this->updateFormatterSettings([
+      'image_style' => 'thumbnail',
+      'link_image_to' => Thumbnail::LINK_CONTENT,
+    ]);
+    $this->assertSession()->pageTextContains('Video thumbnail (thumbnail, linked to content).');
+    $this->updateFormatterSettings([
+      'image_style' => 'medium',
+      'link_image_to' => Thumbnail::LINK_PROVIDER,
+    ]);
+    $this->assertSession()->pageTextContains('Video thumbnail (medium, linked to provider).');
+
+    $this->setFormatter('video_embed_field_colorbox');
+    $this->assertSession()->pageTextContains('Thumbnail that launches a modal window.');
+    $this->assertSession()->pageTextContains('Embedded Video (Responsive, autoplaying).');
+    $this->assertSession()->pageTextContains('Video thumbnail (medium, linked to provider).');
+    $this->updateFormatterSettings([
+      'autoplay' => FALSE,
+      'responsive' => FALSE,
+      'width' => 100,
+      'height' => 100,
+      'image_style' => 'medium',
+      'link_image_to' => Thumbnail::LINK_PROVIDER,
+    ]);
+    $this->assertSession()->pageTextContains('Thumbnail that launches a modal window.');
+    $this->assertSession()->pageTextContains('Embedded Video (100x100).');
+    $this->assertSession()->pageTextContains('Video thumbnail (medium, linked to provider).');
+  }
+
+  /**
+   * Set the field formatter for the test field.
+   *
+   * @param string $formatter
+   *   The field formatter ID to use.
+   */
+  protected function setFormatter($formatter) {
+    $this->drupalGet($this->manageDisplay);
+    $this->find('input[name="refresh_rows"]')->setValue($this->fieldName);
+    $this->submitForm([
+      'fields[' . $this->fieldName . '][type]' => $formatter,
+      'fields[' . $this->fieldName . '][region]' => 'content',
+    ], t('Refresh'));
+    $this->submitForm([], t('Save'));
+  }
+
+  /**
+   * Update the settings for the current formatter.
+   *
+   * @param array $settings
+   *   The settings to update the foramtter with.
+   */
+  protected function updateFormatterSettings($settings) {
+    $edit = [];
+    foreach ($settings as $key => $value) {
+      $edit["fields[{$this->fieldName}][settings_edit_form][settings][$key]"] = $value;
+    }
+    $this->drupalGet($this->manageDisplay);
+    $this->find('input[name="' . $this->fieldName . '_settings_edit"]')->click();
+    $this->submitForm($edit, $this->fieldName . '_plugin_settings_update');
+    $this->submitForm([], t('Save'));
+  }
+
+  /**
+   * Find an element based on a CSS selector.
+   *
+   * @param string $css_selector
+   *   A css selector to find an element for.
+   *
+   * @return \Behat\Mink\Element\NodeElement|null
+   *   The found element or null.
+   */
+  protected function find($css_selector) {
+    return $this->getSession()->getPage()->find('css', $css_selector);
+  }
+
+}