Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / system / tests / src / FunctionalJavascript / ThemeFormSettingsTest.php
diff --git a/web/core/modules/system/tests/src/FunctionalJavascript/ThemeFormSettingsTest.php b/web/core/modules/system/tests/src/FunctionalJavascript/ThemeFormSettingsTest.php
new file mode 100644 (file)
index 0000000..8e4729f
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+namespace Drupal\Tests\system\FunctionalJavascript;
+
+use Drupal\file\Entity\File;
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+use Drupal\Tests\TestFileCreationTrait;
+
+/**
+ * Tests that theme form settings works correctly.
+ *
+ * @group system
+ */
+class ThemeFormSettingsTest extends JavascriptTestBase {
+
+  use TestFileCreationTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['file'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $admin = $this->drupalCreateUser(['administer themes']);
+    $this->drupalLogin($admin);
+  }
+
+  /**
+   * Tests that submission handler works correctly.
+   *
+   * @dataProvider providerTestFormSettingsSubmissionHandler
+   */
+  public function testFormSettingsSubmissionHandler($theme) {
+
+    \Drupal::service('theme_handler')->install([$theme]);
+
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->drupalGet("admin/appearance/settings/$theme");
+
+    // Add a new managed file.
+    $file = current($this->getTestFiles('image'));
+    $image_file_path = \Drupal::service('file_system')->realpath($file->uri);
+    $page->attachFileToField('files[custom_logo]', $image_file_path);
+    $assert_session->waitForButton('custom_logo_remove_button');
+
+    // Assert the new file is uploaded as temporary. This file should not be
+    // saved as permanent if settings are not submited.
+    $image_field = $this->xpath('//input[@name="custom_logo[fids]"]')[0];
+    $file = File::load($image_field->getValue());
+    $this->assertFalse($file->isPermanent());
+
+    $page->pressButton('Save configuration');
+    \Drupal::entityTypeManager()->getStorage('file')->resetCache();
+
+    // Assert the uploaded file is saved as permanent.
+    $image_field = $this->xpath('//input[@name="custom_logo[fids]"]')[0];
+    $file = File::load($image_field->getValue());
+    $this->assertTrue($file->isPermanent());
+  }
+
+  /**
+   * Provides test data for ::testFormSettingsSubmissionHandler().
+   */
+  public function providerTestFormSettingsSubmissionHandler() {
+    return [
+      'test theme.theme' => ['test_theme_theme'],
+      'test theme-settings.php' => ['test_theme_settings'],
+    ];
+  }
+
+}