View source
<?php
namespace Drupal\statistics\Tests;
use Drupal\simpletest\WebTestBase;
class StatisticsAdminTest extends WebTestBase {
public static $modules = array(
'node',
'statistics',
);
protected $privilegedUser;
protected $testNode;
protected $client;
protected function setUp() {
parent::setUp();
$this
->config('statistics.settings')
->set('display_max_age', 0)
->save();
if ($this->profile != 'standard') {
$this
->drupalCreateContentType(array(
'type' => 'page',
'name' => 'Basic page',
));
}
$this->privilegedUser = $this
->drupalCreateUser(array(
'administer statistics',
'view post access counter',
'create page content',
));
$this
->drupalLogin($this->privilegedUser);
$this->testNode = $this
->drupalCreateNode(array(
'type' => 'page',
'uid' => $this->privilegedUser
->id(),
));
$this->client = \Drupal::service('http_client_factory')
->fromOptions([
'config/curl' => [
CURLOPT_TIMEOUT => 10,
],
]);
}
function testStatisticsSettings() {
$config = $this
->config('statistics.settings');
$this
->assertFalse($config
->get('count_content_views'), 'Count content view log is disabled by default.');
$edit['statistics_count_content_views'] = 1;
$this
->drupalPostForm('admin/config/system/statistics', $edit, t('Save configuration'));
$config = $this
->config('statistics.settings');
$this
->assertTrue($config
->get('count_content_views'), 'Count content view log is enabled.');
$this
->drupalGet('node/' . $this->testNode
->id());
$nid = $this->testNode
->id();
$post = array(
'nid' => $nid,
);
global $base_url;
$stats_path = $base_url . '/' . drupal_get_path('module', 'statistics') . '/statistics.php';
$this->client
->post($stats_path, array(
'form_params' => $post,
));
$this
->drupalGet('node/' . $this->testNode
->id());
$this->client
->post($stats_path, array(
'form_params' => $post,
));
$this
->assertText('1 view', 'Node is viewed once.');
$this
->drupalGet('node/' . $this->testNode
->id());
$this->client
->post($stats_path, array(
'form_params' => $post,
));
$this
->assertText('2 views', 'Node is viewed 2 times.');
$this
->config('statistics.settings')
->set('display_max_age', 3600)
->save();
$this
->drupalGet('node/' . $this->testNode
->id());
$this
->assertText('3 views', 'Node is viewed 3 times.');
$this->client
->post($stats_path, array(
'form_params' => $post,
));
$this
->drupalGet('node/' . $this->testNode
->id());
$this
->assertText('3 views', 'Views counter was not updated.');
}
function testDeleteNode() {
$this
->config('statistics.settings')
->set('count_content_views', 1)
->save();
$this
->drupalGet('node/' . $this->testNode
->id());
$nid = $this->testNode
->id();
$post = array(
'nid' => $nid,
);
global $base_url;
$stats_path = $base_url . '/' . drupal_get_path('module', 'statistics') . '/statistics.php';
$this->client
->post($stats_path, array(
'form_params' => $post,
));
$result = db_select('node_counter', 'n')
->fields('n', array(
'nid',
))
->condition('n.nid', $this->testNode
->id())
->execute()
->fetchAssoc();
$this
->assertEqual($result['nid'], $this->testNode
->id(), 'Verifying that the node counter is incremented.');
$this->testNode
->delete();
$result = db_select('node_counter', 'n')
->fields('n', array(
'nid',
))
->condition('n.nid', $this->testNode
->id())
->execute()
->fetchAssoc();
$this
->assertFalse($result, 'Verifying that the node counter is deleted.');
}
function testExpiredLogs() {
$this
->config('statistics.settings')
->set('count_content_views', 1)
->save();
\Drupal::state()
->set('statistics.day_timestamp', 8640000);
$this
->drupalGet('node/' . $this->testNode
->id());
$nid = $this->testNode
->id();
$post = array(
'nid' => $nid,
);
global $base_url;
$stats_path = $base_url . '/' . drupal_get_path('module', 'statistics') . '/statistics.php';
$this->client
->post($stats_path, array(
'form_params' => $post,
));
$this
->drupalGet('node/' . $this->testNode
->id());
$this->client
->post($stats_path, array(
'form_params' => $post,
));
$this
->assertText('1 view', 'Node is viewed once.');
sleep(2);
$this
->cronRun();
$this
->drupalGet('admin/reports/pages');
$this
->assertNoText('node/' . $this->testNode
->id(), 'No hit URL found.');
$result = db_select('node_counter', 'nc')
->fields('nc', array(
'daycount',
))
->condition('nid', $this->testNode
->id(), '=')
->execute()
->fetchField();
$this
->assertFalse($result, 'Daycounter is zero.');
}
}