Commit 4f035573 authored by alexpott's avatar alexpott

Issue #1987890 by Mile23, disasm, undertext, pwolanin: Convert...

Issue #1987890 by Mile23, disasm, undertext, pwolanin: Convert update_test_mock_page() to a new style controller
parent 98377d57
......@@ -39,13 +39,13 @@ abstract class UpdateTestBase extends WebTestBase {
* (optional) A string containing the URL to fetch update data from.
* Defaults to 'update-test'.
*
* @see update_test_mock_page()
* @see Drupal\update_test\Controller\UpdateTestController::updateTest()
*/
protected function refreshUpdateStatus($xml_map, $url = 'update-test') {
// Tell the Update Manager module to fetch from the URL provided by
// update_test module.
$this->config('update.settings')->set('fetch.url', _url($url, array('absolute' => TRUE)))->save();
// Save the map for update_test_mock_page() to use.
// Save the map for UpdateTestController::updateTest() to use.
$this->config('update_test.settings')->set('xml_map', $xml_map)->save();
// Manually check the update status.
$this->drupalGet('admin/reports/updates/check');
......
......@@ -6,13 +6,15 @@
*/
namespace Drupal\update_test\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
/**
* Provides different routes of the update_test module.
*/
class UpdateTestController {
class UpdateTestController extends ControllerBase {
/**
* Displays an Error 503 (Service unavailable) page.
......@@ -29,10 +31,51 @@ public function updateError() {
}
/**
* @todo Remove update_test_mock_page().
* 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.
*
* @param 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]).
* @param string $version
* The version of Drupal core.
*
* @return 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.
*/
public function updateTest($project_name, $version) {
return update_test_mock_page($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 (for example, the webroot has other modules and
// themes installed but they're disabled by the version of the site
// running the test. 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#';
}
$path = drupal_get_path('module', 'update_test');
$file = "$path/$project_name.$availability_scenario.xml";
$headers = array('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);
}
}
......@@ -57,56 +57,6 @@ function update_test_update_status_alter(&$projects) {
}
}
/**
* 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.
*
* @param $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]).
*
* @return 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.
*
* @see update_test_menu()
*
* @deprecated \Drupal\update_test\Controller\UpdateTestController::updateTest()
*/
function update_test_mock_page($project_name) {
$xml_map = \Drupal::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 (for example, the webroot has other modules and
// themes installed but they're disabled by the version of the site
// running the test. 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#';
}
$path = drupal_get_path('module', 'update_test');
$file = "$path/$project_name.$availability_scenario.xml";
$headers = array('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);
}
/**
* Implements hook_filetransfer_info().
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment