View source
<?php
namespace Drupal\statistics\Tests;
use Drupal\simpletest\WebTestBase;
class StatisticsLoggingTest extends WebTestBase {
public static $modules = array(
'node',
'statistics',
'block',
'locale',
);
protected $authUser;
protected $language;
protected $client;
protected function setUp() {
parent::setUp();
if ($this->profile != 'standard') {
$this
->drupalCreateContentType(array(
'type' => 'page',
'name' => 'Basic page',
));
}
$this->authUser = $this
->drupalCreateUser(array(
'access content',
'create page content',
'edit own page content',
'administer languages',
'access administration pages',
));
$this->node = $this
->drupalCreateNode(array(
'title' => $this
->randomMachineName(255),
'uid' => $this->authUser
->id(),
));
$this
->drupalLogin($this->authUser);
$this->language = array(
'predefined_langcode' => 'custom',
'langcode' => 'xx',
'label' => $this
->randomMachineName(16),
'direction' => 'ltr',
);
$this
->drupalPostForm('admin/config/regional/language/add', $this->language, t('Add custom language'));
$this
->drupalPostForm('admin/config/regional/language/detection', array(
'language_interface[enabled][language-url]' => 1,
), t('Save settings'));
$this
->drupalLogout();
$this
->config('statistics.settings')
->set('count_content_views', 1)
->save();
db_truncate('node_counter');
$this->client = \Drupal::service('http_client_factory')
->fromOptions([
'config/curl' => [
CURLOPT_TIMEOUT => 10,
],
]);
}
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';
$this
->drupalGet('node');
$settings = $this
->getDrupalSettings();
$this
->assertNoPattern($expected_library, 'Statistics library JS not found on node page.');
$this
->assertFalse(isset($settings['statistics']), 'Statistics settings not found on node page.');
$this
->drupalGet('node/9999');
$settings = $this
->getDrupalSettings();
$this
->assertNoPattern($expected_library, 'Statistics library JS not found on non-existent node page.');
$this
->assertFalse(isset($settings['statistics']), 'Statistics settings not found on node page.');
$this
->drupalGet($path);
$settings = $this
->getDrupalSettings();
$this
->assertPattern($expected_library, 'Found statistics library JS on node page.');
$this
->assertIdentical($this->node
->id(), $settings['statistics']['data']['nid'], 'Found statistics settings on node page.');
$this
->drupalGet($this->language['langcode'] . '/' . $path);
$settings = $this
->getDrupalSettings();
$this
->assertPattern($expected_library, 'Found statistics library JS on a valid node page in a non-default language.');
$this
->assertIdentical($this->node
->id(), $settings['statistics']['data']['nid'], 'Found statistics settings on valid node page in a non-default language.');
global $base_root;
$post = array(
'nid' => $this->node
->id(),
);
$this->client
->post($base_root . $stats_path, array(
'form_params' => $post,
));
$node_counter = statistics_get($this->node
->id());
$this
->assertIdentical($node_counter['totalcount'], '1');
}
}