Chris@16
|
1 <?php
|
Chris@16
|
2
|
Chris@16
|
3 namespace Drupal\Tests\statistics\FunctionalJavascript;
|
Chris@16
|
4
|
Chris@16
|
5 use Drupal\Core\Session\AccountInterface;
|
Chris@17
|
6 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
|
Chris@16
|
7 use Drupal\language\Entity\ConfigurableLanguage;
|
Chris@16
|
8 use Drupal\user\Entity\Role;
|
Chris@16
|
9
|
Chris@16
|
10 /**
|
Chris@16
|
11 * Tests that statistics works.
|
Chris@16
|
12 *
|
Chris@16
|
13 * @group system
|
Chris@16
|
14 */
|
Chris@17
|
15 class StatisticsLoggingTest extends WebDriverTestBase {
|
Chris@16
|
16
|
Chris@16
|
17 /**
|
Chris@16
|
18 * {@inheritdoc}
|
Chris@16
|
19 */
|
Chris@16
|
20 public static $modules = ['node', 'statistics', 'language'];
|
Chris@16
|
21
|
Chris@16
|
22 /**
|
Chris@16
|
23 * Node for tests.
|
Chris@16
|
24 *
|
Chris@16
|
25 * @var \Drupal\node\Entity\Node
|
Chris@16
|
26 */
|
Chris@16
|
27 protected $node;
|
Chris@16
|
28
|
Chris@16
|
29 /**
|
Chris@16
|
30 * {@inheritdoc}
|
Chris@16
|
31 */
|
Chris@16
|
32 protected function setUp() {
|
Chris@16
|
33 parent::setUp();
|
Chris@16
|
34
|
Chris@16
|
35 $this->config('statistics.settings')
|
Chris@16
|
36 ->set('count_content_views', 1)
|
Chris@16
|
37 ->save();
|
Chris@16
|
38
|
Chris@16
|
39 Role::load(AccountInterface::ANONYMOUS_ROLE)
|
Chris@16
|
40 ->grantPermission('view post access counter')
|
Chris@16
|
41 ->save();
|
Chris@16
|
42
|
Chris@16
|
43 // Add another language to enable multilingual path processor.
|
Chris@16
|
44 ConfigurableLanguage::create(['id' => 'xx'])->save();
|
Chris@16
|
45 $this->config('language.negotiation')->set('url.prefixes.en', 'en')->save();
|
Chris@16
|
46
|
Chris@16
|
47 $this->drupalCreateContentType(['type' => 'page', 'name' => 'Basic page']);
|
Chris@16
|
48 $this->node = $this->drupalCreateNode();
|
Chris@16
|
49 }
|
Chris@16
|
50
|
Chris@16
|
51 /**
|
Chris@16
|
52 * Tests that statistics works with different addressing variants.
|
Chris@16
|
53 */
|
Chris@16
|
54 public function testLoggingPage() {
|
Chris@16
|
55 // At the first request, the page does not contain statistics counter.
|
Chris@16
|
56 $this->assertNull($this->getStatisticsCounter('node/1'));
|
Chris@16
|
57 $this->assertSame(1, $this->getStatisticsCounter('node/1'));
|
Chris@16
|
58 $this->assertSame(2, $this->getStatisticsCounter('en/node/1'));
|
Chris@16
|
59 $this->assertSame(3, $this->getStatisticsCounter('en/node/1'));
|
Chris@16
|
60 $this->assertSame(4, $this->getStatisticsCounter('index.php/node/1'));
|
Chris@16
|
61 $this->assertSame(5, $this->getStatisticsCounter('index.php/node/1'));
|
Chris@16
|
62 $this->assertSame(6, $this->getStatisticsCounter('index.php/en/node/1'));
|
Chris@16
|
63 $this->assertSame(7, $this->getStatisticsCounter('index.php/en/node/1'));
|
Chris@16
|
64 }
|
Chris@16
|
65
|
Chris@16
|
66 /**
|
Chris@16
|
67 * Gets counter of views by path.
|
Chris@16
|
68 *
|
Chris@16
|
69 * @param string $path
|
Chris@16
|
70 * A path to node.
|
Chris@16
|
71 *
|
Chris@16
|
72 * @return int|null
|
Chris@16
|
73 * A counter of views. Returns NULL if the page does not contain statistics.
|
Chris@16
|
74 */
|
Chris@16
|
75 protected function getStatisticsCounter($path) {
|
Chris@16
|
76 $this->drupalGet($path);
|
Chris@16
|
77 // Wait while statistics module send ajax request.
|
Chris@16
|
78 $this->assertSession()->assertWaitOnAjaxRequest();
|
Chris@16
|
79 // Resaving the node to call the hook_node_links_alter(), which is used to
|
Chris@16
|
80 // update information on the page. See statistics_node_links_alter().
|
Chris@16
|
81 $this->node->save();
|
Chris@16
|
82
|
Chris@16
|
83 $field_counter = $this->getSession()->getPage()->find('css', '.statistics-counter');
|
Chris@16
|
84 return $field_counter ? (int) explode(' ', $field_counter->getText())[0] : NULL;
|
Chris@16
|
85 }
|
Chris@16
|
86
|
Chris@16
|
87 }
|