annotate core/modules/statistics/tests/src/FunctionalJavascript/StatisticsLoggingTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }