View source
<?php
namespace Drupal\Tests\statistics\Functional;
use Drupal\Core\Database\Database;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\Traits\Core\CronRunTrait;
class StatisticsAdminTest extends BrowserTestBase {
use CronRunTrait;
protected static $modules = [
'node',
'statistics',
];
protected $defaultTheme = 'stark';
protected $privilegedUser;
protected $testNode;
protected $client;
protected function setUp() : void {
parent::setUp();
$this
->config('statistics.settings')
->set('display_max_age', 0)
->save();
if ($this->profile != 'standard') {
$this
->drupalCreateContentType([
'type' => 'page',
'name' => 'Basic page',
]);
}
$this->privilegedUser = $this
->drupalCreateUser([
'administer statistics',
'view post access counter',
'create page content',
]);
$this
->drupalLogin($this->privilegedUser);
$this->testNode = $this
->drupalCreateNode([
'type' => 'page',
'uid' => $this->privilegedUser
->id(),
]);
$this->client = \Drupal::httpClient();
}
public function testStatisticsSettings() {
$config = $this
->config('statistics.settings');
$this
->assertEmpty($config
->get('count_content_views'), 'Count content view log is disabled by default.');
$edit['statistics_count_content_views'] = 1;
$this
->drupalGet('admin/config/system/statistics');
$this
->submitForm($edit, 'Save configuration');
$config = $this
->config('statistics.settings');
$this
->assertNotEmpty($config
->get('count_content_views'), 'Count content view log is enabled.');
$this
->drupalGet('node/' . $this->testNode
->id());
$nid = $this->testNode
->id();
$post = [
'nid' => $nid,
];
global $base_url;
$stats_path = $base_url . '/' . $this
->getModulePath('statistics') . '/statistics.php';
$this->client
->post($stats_path, [
'form_params' => $post,
]);
$this
->drupalGet('node/' . $this->testNode
->id());
$this->client
->post($stats_path, [
'form_params' => $post,
]);
$this
->assertSession()
->pageTextContains('1 view');
$this
->drupalGet('node/' . $this->testNode
->id());
$this->client
->post($stats_path, [
'form_params' => $post,
]);
$this
->assertSession()
->pageTextContains('2 views');
$this
->config('statistics.settings')
->set('display_max_age', 3600)
->save();
$this
->drupalGet('node/' . $this->testNode
->id());
$this
->assertSession()
->pageTextContains('3 views');
$this->client
->post($stats_path, [
'form_params' => $post,
]);
$this
->drupalGet('node/' . $this->testNode
->id());
$this
->assertSession()
->pageTextContains('3 views');
}
public function testDeleteNode() {
$this
->config('statistics.settings')
->set('count_content_views', 1)
->save();
$this
->drupalGet('node/' . $this->testNode
->id());
$nid = $this->testNode
->id();
$post = [
'nid' => $nid,
];
global $base_url;
$stats_path = $base_url . '/' . $this
->getModulePath('statistics') . '/statistics.php';
$this->client
->post($stats_path, [
'form_params' => $post,
]);
$connection = Database::getConnection();
$result = $connection
->select('node_counter', 'n')
->fields('n', [
'nid',
])
->condition('n.nid', $this->testNode
->id())
->execute()
->fetchAssoc();
$this
->assertEquals($result['nid'], $this->testNode
->id(), 'Verifying that the node counter is incremented.');
$this->testNode
->delete();
$result = $connection
->select('node_counter', 'n')
->fields('n', [
'nid',
])
->condition('n.nid', $this->testNode
->id())
->execute()
->fetchAssoc();
$this
->assertFalse($result, 'Verifying that the node counter is deleted.');
}
public 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 = [
'nid' => $nid,
];
global $base_url;
$stats_path = $base_url . '/' . $this
->getModulePath('statistics') . '/statistics.php';
$this->client
->post($stats_path, [
'form_params' => $post,
]);
$this
->drupalGet('node/' . $this->testNode
->id());
$this->client
->post($stats_path, [
'form_params' => $post,
]);
$this
->assertSession()
->pageTextContains('1 view');
sleep(2);
$this
->cronRun();
$this
->drupalGet('admin/reports/pages');
$this
->assertSession()
->pageTextNotContains('node/' . $this->testNode
->id());
$result = Database::getConnection()
->select('node_counter', 'nc')
->fields('nc', [
'daycount',
])
->condition('nid', $this->testNode
->id(), '=')
->execute()
->fetchField();
$this
->assertEmpty($result, 'Daycount is zero.');
}
}