function StatisticsLoggingTest::testLogging
Same name in other branches
- 9 core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php \Drupal\Tests\statistics\Functional\StatisticsLoggingTest::testLogging()
- 10 core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php \Drupal\Tests\statistics\Functional\StatisticsLoggingTest::testLogging()
- 11.x core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php \Drupal\Tests\statistics\Functional\StatisticsLoggingTest::testLogging()
Verifies node hit counter logging and script placement.
File
-
core/
modules/ statistics/ tests/ src/ Functional/ StatisticsLoggingTest.php, line 98
Class
- StatisticsLoggingTest
- Tests request logging for cached and uncached pages.
Namespace
Drupal\Tests\statistics\FunctionalCode
public function testLogging() {
$path = 'node/' . $this->node
->id();
$module_path = drupal_get_path('module', 'statistics');
$stats_path = base_path() . $module_path . '/statistics.php';
$lib_path = base_path() . $module_path . '/statistics.js';
$expected_library = '/<script src=".*?' . preg_quote($lib_path, '/.') . '.*?">/is';
// Verify that logging scripts are not found on a non-node page.
$this->drupalGet('node');
$settings = $this->getDrupalSettings();
$this->assertSession()
->responseNotMatches($expected_library, 'Statistics library JS not found on node page.');
$this->assertFalse(isset($settings['statistics']), 'Statistics settings not found on node page.');
// Verify that logging scripts are not found on a non-existent node page.
$this->drupalGet('node/9999');
$settings = $this->getDrupalSettings();
$this->assertSession()
->responseNotMatches($expected_library, 'Statistics library JS not found on non-existent node page.');
$this->assertFalse(isset($settings['statistics']), 'Statistics settings not found on node page.');
// Verify that logging scripts are found on a valid node page.
$this->drupalGet($path);
$settings = $this->getDrupalSettings();
$this->assertPattern($expected_library);
$this->assertIdentical($this->node
->id(), $settings['statistics']['data']['nid'], 'Found statistics settings on node page.');
// Verify the same when loading the site in a non-default language.
$this->drupalGet($this->language['langcode'] . '/' . $path);
$settings = $this->getDrupalSettings();
$this->assertPattern($expected_library);
$this->assertIdentical($this->node
->id(), $settings['statistics']['data']['nid'], 'Found statistics settings on valid node page in a non-default language.');
// Manually call statistics.php to simulate ajax data collection behavior.
global $base_root;
$post = [
'nid' => $this->node
->id(),
];
$this->client
->post($base_root . $stats_path, [
'form_params' => $post,
]);
$node_counter = \Drupal::service('statistics.storage.node')->fetchView($this->node
->id());
$this->assertIdentical(1, $node_counter->getTotalCount());
// Try fetching statistics for an invalid node ID and verify it returns
// FALSE.
$node_id = 1000000;
$node = Node::load($node_id);
$this->assertNull($node);
// This is a test specifically for the deprecated statistics_get() function
// and so should remain unconverted until that function is removed.
$result = \Drupal::service('statistics.storage.node')->fetchView($node_id);
$this->assertIdentical($result, FALSE);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.