You are here

private function ParserTest::weatherDownloadForecast in Weather 8

Same name and namespace in other branches
  1. 2.0.x tests/src/Functional/ParserTest.php \Drupal\Tests\weather\Functional\ParserTest::weatherDownloadForecast()

Downloads a new forecast from yr.no.

Parameters

string $geoid: The GeoID for which the forecasts should be downloaded.

Return value

bool TRUE on success, FALSE on failure.

Throws

\ReflectionException

1 call to ParserTest::weatherDownloadForecast()
ParserTest::weatherGetWeather in tests/src/Functional/ParserTest.php
Returns a weather object for the specified GeoID.

File

tests/src/Functional/ParserTest.php, line 346

Class

ParserTest
Tests parsing of XML weather forecasts.

Namespace

Drupal\Tests\weather\Functional

Code

private function weatherDownloadForecast($geoid) {

  // Do not download anything if the variable
  // 'weather_time_for_testing' is set.
  // In this case, we are in testing mode and only load defined
  // forecasts to get always the same results.
  $config = \Drupal::configFactory()
    ->getEditable('weather.settings');
  $time = $config
    ->get('weather_time_for_testing');
  if ($time !== \Drupal::time()
    ->getRequestTime()) {
    $path = dirname((new ReflectionClass(static::class))
      ->getFileName()) . '/data/' . $geoid . '.xml';
    if (is_readable($path)) {
      $xml = file_get_contents($path);
    }
    else {
      $xml = '';
    }
    return $this
      ->weatherParseForecast($xml, $geoid);
  }

  // Specify timeout in seconds.
  $timeout = 10;
  $url = $this
    ->weatherGetLinkForGeoId($geoid, 'yr');
  $response = $this
    ->drupalGet($url, [
    'timeout' => $timeout,
  ]);

  // Extract XML data from the received forecast.
  if (!isset($response->error)) {
    return $this
      ->weatherParseForecast($response->data, $geoid);
  }
  else {

    // Make an entry about this error into the watchdog table.
    \Drupal::logger('weather')
      ->error($response->error);

    // Get the current user.
    $user = \Drupal::currentUser();

    // Check for permission.
    $user
      ->hasPermission('administer site configuration');

    // Show a message to users with administration priviledges.
    if ($user
      ->hasPermission('administer custom weather block') or $user
      ->hasPermission('administer site configuration')) {
      \Drupal::messenger()
        ->addMessage(t('Download of forecast failed: @error', [
        '@error' => $response->error,
      ]), 'error');
    }
  }
}