UnversionedAssetTest.php

Same filename and directory in other branches
  1. 10 core/tests/Drupal/FunctionalTests/Asset/UnversionedAssetTest.php

Namespace

Drupal\FunctionalTests\Asset

File

core/tests/Drupal/FunctionalTests/Asset/UnversionedAssetTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\FunctionalTests\Asset;

use Drupal\Tests\BrowserTestBase;

/**
 * Tests asset aggregation.
 *
 * @group asset
 */
class UnversionedAssetTest extends BrowserTestBase {
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'stark';
    
    /**
     * The file assets path settings value.
     */
    protected $fileAssetsPath;
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'system',
        'unversioned_assets_test',
    ];
    
    /**
     * Tests that unversioned assets cause a new filename when changed.
     */
    public function testUnversionedAssets() : void {
        $this->fileAssetsPath = $this->publicFilesDirectory;
        file_put_contents('public://test.css', '.original-content{display:none;}');
        // Test aggregation with a custom file_assets_path.
        $this->config('system.performance')
            ->set('css', [
            'preprocess' => TRUE,
            'gzip' => TRUE,
        ])
            ->save();
        $this->config('system.performance')
            ->set('js', [
            'preprocess' => TRUE,
            'gzip' => TRUE,
        ])
            ->save();
        // Ensure that the library discovery cache is empty before the page is
        // requested and that updated asset URLs are rendered.
        \Drupal::service('cache.data')->deleteAll();
        \Drupal::service('cache.page')->deleteAll();
        $this->drupalGet('<front>');
        $session = $this->getSession();
        $page = $session->getPage();
        $style_elements = $page->findAll('xpath', '//link[@href and @rel="stylesheet"]');
        $this->assertNotEmpty($style_elements);
        $href = NULL;
        foreach ($style_elements as $element) {
            $href = $element->getAttribute('href');
            $url = $this->getAbsoluteUrl($href);
            // Not every script or style on a page is aggregated.
            if (!str_contains($url, $this->fileAssetsPath)) {
                continue;
            }
            $session = $this->getSession();
            $session->visit($url);
            $this->assertSession()
                ->statusCodeEquals(200);
            $aggregate = $session = $session->getPage()
                ->getContent();
            $this->assertStringContainsString('original-content', $aggregate);
            $this->assertStringNotContainsString('extra-stuff', $aggregate);
        }
        $file = file_get_contents('public://test.css') . '.extra-stuff{display:none;}';
        file_put_contents('public://test.css', $file);
        // Clear the library discovery and page caches again so that new URLs are
        // generated.
        \Drupal::service('cache.data')->deleteAll();
        \Drupal::service('cache.page')->deleteAll();
        $this->drupalGet('<front>');
        $session = $this->getSession();
        $page = $session->getPage();
        $style_elements = $page->findAll('xpath', '//link[@href and @rel="stylesheet"]');
        $this->assertNotEmpty($style_elements);
        foreach ($style_elements as $element) {
            $new_href = $element->getAttribute('href');
            $this->assertNotSame($new_href, $href);
            $url = $this->getAbsoluteUrl($new_href);
            // Not every script or style on a page is aggregated.
            if (!str_contains($url, $this->fileAssetsPath)) {
                continue;
            }
            $session = $this->getSession();
            $session->visit($url);
            $this->assertSession()
                ->statusCodeEquals(200);
            $aggregate = $session = $session->getPage()
                ->getContent();
            $this->assertStringContainsString('original-content', $aggregate);
            $this->assertStringContainsString('extra-stuff', $aggregate);
        }
    }

}

Classes

Title Deprecated Summary
UnversionedAssetTest Tests asset aggregation.

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