function UpdateTestController::updateTest

Same name in other branches
  1. 9 core/modules/update/tests/modules/update_test/src/Controller/UpdateTestController.php \Drupal\update_test\Controller\UpdateTestController::updateTest()
  2. 8.9.x core/modules/update/tests/modules/update_test/src/Controller/UpdateTestController.php \Drupal\update_test\Controller\UpdateTestController::updateTest()
  3. 10 core/modules/update/tests/modules/update_test/src/Controller/UpdateTestController.php \Drupal\update_test\Controller\UpdateTestController::updateTest()

Page callback: Prints mock XML for the Update Manager module.

The specific XML file to print depends on two things: the project we're trying to fetch data for, and the desired "availability scenario" for that project which we're trying to test. Before attempting to fetch this data (by checking for updates on the available updates report), callers need to define the 'update_test_xml_map' variable as an array, keyed by project name, indicating which availability scenario to use for that project.

Parameters

string $project_name: The project short name the update manager is trying to fetch data for (the fetch URLs are of the form: [base_url]/[project_name]/[core_version]).

string $version: The version of Drupal core.

Return value

\Symfony\Component\HttpFoundation\BinaryFileResponse|Response A BinaryFileResponse object containing the content of the XML release file for the specified project if one is available; a Response object with no content otherwise.

1 string reference to 'UpdateTestController::updateTest'
update_test.routing.yml in core/modules/update/tests/modules/update_test/update_test.routing.yml
core/modules/update/tests/modules/update_test/update_test.routing.yml

File

core/modules/update/tests/modules/update_test/src/Controller/UpdateTestController.php, line 51

Class

UpdateTestController
Provides different routes of the update_test module.

Namespace

Drupal\update_test\Controller

Code

public function updateTest($project_name, $version) {
    $xml_map = $this->config('update_test.settings')
        ->get('xml_map');
    if (isset($xml_map[$project_name])) {
        $availability_scenario = $xml_map[$project_name];
    }
    elseif (isset($xml_map['#all'])) {
        $availability_scenario = $xml_map['#all'];
    }
    else {
        // The test didn't specify a project nor '#all' (for all extensions on the
        // system). So, we default to a file we know won't exist, so at least
        // we'll get an empty xml response instead of a bunch of Drupal page
        // output.
        $availability_scenario = '#broken#';
    }
    $file = __DIR__ . "/../../../../fixtures/release-history/{$project_name}.{$availability_scenario}.xml";
    $headers = [
        'Content-Type' => 'text/xml; charset=utf-8',
    ];
    if (!is_file($file)) {
        // Return an empty response.
        return new Response('', 200, $headers);
    }
    return new BinaryFileResponse($file, 200, $headers);
}

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