Mercurial > hg > isophonics-drupal-site
comparison core/modules/statistics/tests/src/Functional/StatisticsAdminTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\statistics\Functional; | |
4 | |
5 use Drupal\Tests\BrowserTestBase; | |
6 use Drupal\Tests\Traits\Core\CronRunTrait; | |
7 | |
8 /** | |
9 * Tests the statistics admin. | |
10 * | |
11 * @group statistics | |
12 */ | |
13 class StatisticsAdminTest extends BrowserTestBase { | |
14 | |
15 use CronRunTrait; | |
16 | |
17 /** | |
18 * Modules to enable. | |
19 * | |
20 * @var array | |
21 */ | |
22 public static $modules = ['node', 'statistics']; | |
23 | |
24 /** | |
25 * A user that has permission to administer statistics. | |
26 * | |
27 * @var \Drupal\user\UserInterface | |
28 */ | |
29 protected $privilegedUser; | |
30 | |
31 /** | |
32 * A page node for which to check content statistics. | |
33 * | |
34 * @var \Drupal\node\NodeInterface | |
35 */ | |
36 protected $testNode; | |
37 | |
38 /** | |
39 * The Guzzle HTTP client. | |
40 * | |
41 * @var \GuzzleHttp\Client; | |
42 */ | |
43 protected $client; | |
44 | |
45 protected function setUp() { | |
46 parent::setUp(); | |
47 | |
48 // Set the max age to 0 to simplify testing. | |
49 $this->config('statistics.settings')->set('display_max_age', 0)->save(); | |
50 | |
51 // Create Basic page node type. | |
52 if ($this->profile != 'standard') { | |
53 $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']); | |
54 } | |
55 $this->privilegedUser = $this->drupalCreateUser(['administer statistics', 'view post access counter', 'create page content']); | |
56 $this->drupalLogin($this->privilegedUser); | |
57 $this->testNode = $this->drupalCreateNode(['type' => 'page', 'uid' => $this->privilegedUser->id()]); | |
58 $this->client = \Drupal::httpClient(); | |
59 } | |
60 | |
61 /** | |
62 * Verifies that the statistics settings page works. | |
63 */ | |
64 public function testStatisticsSettings() { | |
65 $config = $this->config('statistics.settings'); | |
66 $this->assertFalse($config->get('count_content_views'), 'Count content view log is disabled by default.'); | |
67 | |
68 // Enable counter on content view. | |
69 $edit['statistics_count_content_views'] = 1; | |
70 $this->drupalPostForm('admin/config/system/statistics', $edit, t('Save configuration')); | |
71 $config = $this->config('statistics.settings'); | |
72 $this->assertTrue($config->get('count_content_views'), 'Count content view log is enabled.'); | |
73 | |
74 // Hit the node. | |
75 $this->drupalGet('node/' . $this->testNode->id()); | |
76 // Manually calling statistics.php, simulating ajax behavior. | |
77 $nid = $this->testNode->id(); | |
78 $post = ['nid' => $nid]; | |
79 global $base_url; | |
80 $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics') . '/statistics.php'; | |
81 $this->client->post($stats_path, ['form_params' => $post]); | |
82 | |
83 // Hit the node again (the counter is incremented after the hit, so | |
84 // "1 view" will actually be shown when the node is hit the second time). | |
85 $this->drupalGet('node/' . $this->testNode->id()); | |
86 $this->client->post($stats_path, ['form_params' => $post]); | |
87 $this->assertText('1 view', 'Node is viewed once.'); | |
88 | |
89 $this->drupalGet('node/' . $this->testNode->id()); | |
90 $this->client->post($stats_path, ['form_params' => $post]); | |
91 $this->assertText('2 views', 'Node is viewed 2 times.'); | |
92 | |
93 // Increase the max age to test that nodes are no longer immediately | |
94 // updated, visit the node once more to populate the cache. | |
95 $this->config('statistics.settings')->set('display_max_age', 3600)->save(); | |
96 $this->drupalGet('node/' . $this->testNode->id()); | |
97 $this->assertText('3 views', 'Node is viewed 3 times.'); | |
98 | |
99 $this->client->post($stats_path, ['form_params' => $post]); | |
100 $this->drupalGet('node/' . $this->testNode->id()); | |
101 $this->assertText('3 views', 'Views counter was not updated.'); | |
102 } | |
103 | |
104 /** | |
105 * Tests that when a node is deleted, the node counter is deleted too. | |
106 */ | |
107 public function testDeleteNode() { | |
108 $this->config('statistics.settings')->set('count_content_views', 1)->save(); | |
109 | |
110 $this->drupalGet('node/' . $this->testNode->id()); | |
111 // Manually calling statistics.php, simulating ajax behavior. | |
112 $nid = $this->testNode->id(); | |
113 $post = ['nid' => $nid]; | |
114 global $base_url; | |
115 $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics') . '/statistics.php'; | |
116 $this->client->post($stats_path, ['form_params' => $post]); | |
117 | |
118 $result = db_select('node_counter', 'n') | |
119 ->fields('n', ['nid']) | |
120 ->condition('n.nid', $this->testNode->id()) | |
121 ->execute() | |
122 ->fetchAssoc(); | |
123 $this->assertEqual($result['nid'], $this->testNode->id(), 'Verifying that the node counter is incremented.'); | |
124 | |
125 $this->testNode->delete(); | |
126 | |
127 $result = db_select('node_counter', 'n') | |
128 ->fields('n', ['nid']) | |
129 ->condition('n.nid', $this->testNode->id()) | |
130 ->execute() | |
131 ->fetchAssoc(); | |
132 $this->assertFalse($result, 'Verifying that the node counter is deleted.'); | |
133 } | |
134 | |
135 /** | |
136 * Tests that cron clears day counts and expired access logs. | |
137 */ | |
138 public function testExpiredLogs() { | |
139 $this->config('statistics.settings') | |
140 ->set('count_content_views', 1) | |
141 ->save(); | |
142 \Drupal::state()->set('statistics.day_timestamp', 8640000); | |
143 | |
144 $this->drupalGet('node/' . $this->testNode->id()); | |
145 // Manually calling statistics.php, simulating ajax behavior. | |
146 $nid = $this->testNode->id(); | |
147 $post = ['nid' => $nid]; | |
148 global $base_url; | |
149 $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics') . '/statistics.php'; | |
150 $this->client->post($stats_path, ['form_params' => $post]); | |
151 $this->drupalGet('node/' . $this->testNode->id()); | |
152 $this->client->post($stats_path, ['form_params' => $post]); | |
153 $this->assertText('1 view', 'Node is viewed once.'); | |
154 | |
155 // statistics_cron() will subtract | |
156 // statistics.settings:accesslog.max_lifetime config from REQUEST_TIME in | |
157 // the delete query, so wait two secs here to make sure the access log will | |
158 // be flushed for the node just hit. | |
159 sleep(2); | |
160 $this->cronRun(); | |
161 | |
162 $this->drupalGet('admin/reports/pages'); | |
163 $this->assertNoText('node/' . $this->testNode->id(), 'No hit URL found.'); | |
164 | |
165 $result = db_select('node_counter', 'nc') | |
166 ->fields('nc', ['daycount']) | |
167 ->condition('nid', $this->testNode->id(), '=') | |
168 ->execute() | |
169 ->fetchField(); | |
170 $this->assertFalse($result, 'Daycounter is zero.'); | |
171 } | |
172 | |
173 } |