function StatisticsLoggingTest::testLogging

Same name in other branches
  1. 8.9.x core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php \Drupal\Tests\statistics\Functional\StatisticsLoggingTest::testLogging()
  2. 10 core/modules/statistics/tests/src/Functional/StatisticsLoggingTest.php \Drupal\Tests\statistics\Functional\StatisticsLoggingTest::testLogging()
  3. 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 110

Class

StatisticsLoggingTest
Tests request logging for cached and uncached pages.

Namespace

Drupal\Tests\statistics\Functional

Code

public function testLogging() {
    $path = 'node/' . $this->node
        ->id();
    $module_path = $this->getModulePath('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();
    // Statistics library JS should not be present.
    $this->assertSession()
        ->responseNotMatches($expected_library);
    $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();
    // Statistics library JS should not be present.
    $this->assertSession()
        ->responseNotMatches($expected_library);
    $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->assertSession()
        ->responseMatches($expected_library);
    $this->assertSame($settings['statistics']['data']['nid'], $this->node
        ->id(), '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->assertSession()
        ->responseMatches($expected_library);
    $this->assertSame($settings['statistics']['data']['nid'], $this->node
        ->id(), '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->assertSame(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->assertFalse($result);
}

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