RequirementsTest.php

Same filename in this branch
  1. 10 core/modules/mysql/tests/src/Functional/RequirementsTest.php
  2. 10 core/modules/system/tests/src/Kernel/Module/RequirementsTest.php
Same filename and directory in other branches
  1. 9 core/modules/mysql/tests/src/Functional/RequirementsTest.php
  2. 9 core/modules/system/tests/src/Kernel/Module/RequirementsTest.php
  3. 11.x core/modules/file/tests/src/Kernel/RequirementsTest.php
  4. 11.x core/modules/mysql/tests/src/Functional/RequirementsTest.php
  5. 11.x core/modules/system/tests/src/Kernel/Module/RequirementsTest.php

Namespace

Drupal\Tests\file\Kernel

File

core/modules/file/tests/src/Kernel/RequirementsTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\file\Kernel;

use Drupal\KernelTests\KernelTestBase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;

/**
 * Tests the file requirements.
 *
 * @group file
 */
class RequirementsTest extends KernelTestBase {
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'file',
  ];
  
  /**
   * Tests the file upload requirements.
   */
  public function testUploadRequirements() : void {
    if (\extension_loaded('uploadprogress')) {
      $this->markTestSkipped('We are testing only when the uploadprogress extension is not loaded.');
    }
    /** @var \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler */
    $moduleHandler = $this->container
      ->get('module_handler');
    $moduleHandler->loadInclude('file', 'install');
    // Test unspecified server software.
    $this->setServerSoftware(NULL);
    $requirements = \file_requirements('runtime');
    $this->assertNotEmpty($requirements);
    $this->assertEquals('Upload progress', (string) $requirements['file_progress']['title']);
    $this->assertEquals('Not enabled', (string) $requirements['file_progress']['value']);
    $this->assertEquals('Your server is not capable of displaying file upload progress. File upload progress requires an Apache server running PHP with mod_php or Nginx with PHP-FPM.', (string) $requirements['file_progress']['description']);
    // Test Apache + mod_php.
    $this->setServerSoftware('Apache mod_php');
    $requirements = \file_requirements('runtime');
    $this->assertNotEmpty($requirements);
    $this->assertEquals('Not enabled', (string) $requirements['file_progress']['value']);
    $this->assertEquals('Your server is capable of displaying file upload progress, but does not have the required libraries. It is recommended to install the <a href="http://pecl.php.net/package/uploadprogress">PECL uploadprogress library</a>.', (string) $requirements['file_progress']['description']);
    // Test Apache + mod_fastcgi.
    $this->setServerSoftware('Apache mod_fastcgi');
    $requirements = \file_requirements('runtime');
    $this->assertNotEmpty($requirements);
    $this->assertEquals('Not enabled', (string) $requirements['file_progress']['value']);
    $this->assertEquals('Your server is not capable of displaying file upload progress. File upload progress requires PHP be run with mod_php or PHP-FPM and not as FastCGI.', (string) $requirements['file_progress']['description']);
    // Test Nginx.
    $this->setServerSoftware('Nginx');
    $requirements = \file_requirements('runtime');
    $this->assertNotEmpty($requirements);
    $this->assertEquals('Not enabled', (string) $requirements['file_progress']['value']);
    $this->assertEquals('Your server is capable of displaying file upload progress, but does not have the required libraries. It is recommended to install the <a href="http://pecl.php.net/package/uploadprogress">PECL uploadprogress library</a>.', (string) $requirements['file_progress']['description']);
  }
  
  /**
   * Sets the server software attribute in the request.
   */
  private function setServerSoftware(?string $software) : void {
    $request = new Request();
    $request->setSession(new Session(new MockArraySessionStorage()));
    if (is_string($software)) {
      $request->server
        ->set('SERVER_SOFTWARE', $software);
    }
    $requestStack = new RequestStack();
    $requestStack->push($request);
    $this->container
      ->set('request_stack', $requestStack);
  }

}

Classes

Title Deprecated Summary
RequirementsTest Tests the file requirements.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.