You are here

public function GoogleAnalyticsCustomDimensionsAndMetricsTest::testGoogleAnalyticsCustomDimensions in Google Analytics 4.x

Same name and namespace in other branches
  1. 8.3 tests/src/Functional/GoogleAnalyticsCustomDimensionsAndMetricsTest.php \Drupal\Tests\google_analytics\Functional\GoogleAnalyticsCustomDimensionsAndMetricsTest::testGoogleAnalyticsCustomDimensions()
  2. 8.2 tests/src/Functional/GoogleAnalyticsCustomDimensionsAndMetricsTest.php \Drupal\Tests\google_analytics\Functional\GoogleAnalyticsCustomDimensionsAndMetricsTest::testGoogleAnalyticsCustomDimensions()

Tests if custom dimensions are properly added to the page.

File

tests/src/Functional/GoogleAnalyticsCustomDimensionsAndMetricsTest.php, line 68

Class

GoogleAnalyticsCustomDimensionsAndMetricsTest
Test custom dimensions and metrics functionality of Google Analytics module.

Namespace

Drupal\Tests\google_analytics\Functional

Code

public function testGoogleAnalyticsCustomDimensions() {
  $ua_code = 'UA-123456-3';
  $this
    ->config('google_analytics.settings')
    ->set('account', $ua_code)
    ->save();
  $node = $this
    ->drupalCreateNode([
    'type' => 'article',
  ]);

  // Basic test if the feature works.
  $google_analytics_custom_dimension = [
    1 => [
      'index' => 1,
      'name' => 'bar1',
      'value' => 'Bar 1',
    ],
    2 => [
      'index' => 2,
      'name' => 'bar2',
      'value' => 'Bar 2',
    ],
    3 => [
      'index' => 3,
      'name' => 'bar2',
      'value' => 'Bar 3',
    ],
    4 => [
      'index' => 4,
      'name' => 'bar4',
      'value' => 'Bar 4',
    ],
    5 => [
      'index' => 5,
      'name' => 'bar5',
      'value' => 'Bar 5',
    ],
  ];
  $this
    ->config('google_analytics.settings')
    ->set('custom.dimension', $google_analytics_custom_dimension)
    ->save();
  $this
    ->drupalGet('');
  $custom_map = [];
  $custom_vars = [];
  foreach ($google_analytics_custom_dimension as $dimension) {
    $custom_map['custom_map']['dimension' . $dimension['index']] = $dimension['name'];
    $custom_vars[$dimension['name']] = $dimension['value'];
  }
  $this
    ->assertRaw('gtag("config", ' . Json::encode($ua_code) . ', ' . Json::encode($custom_map) . ');');
  $this
    ->assertRaw('gtag("event", "custom", ' . Json::encode($custom_vars) . ');');

  // Test whether tokens are replaced in custom dimension values.
  $site_slogan = $this
    ->randomMachineName(16);
  $this
    ->config('system.site')
    ->set('slogan', $site_slogan)
    ->save();
  $google_analytics_custom_dimension = [
    1 => [
      'index' => 1,
      'name' => 'site_slogan',
      'value' => 'Value: [site:slogan]',
    ],
    2 => [
      'index' => 2,
      'name' => 'machine_name',
      'value' => $this
        ->randomMachineName(16),
    ],
    3 => [
      'index' => 3,
      'name' => 'foo3',
      'value' => '',
    ],
    // #2300701: Custom dimensions and custom metrics not outputed on zero
    // value.
    4 => [
      'index' => 4,
      'name' => 'bar4',
      'value' => '0',
    ],
    5 => [
      'index' => 5,
      'name' => 'node_type',
      'value' => '[node:type]',
    ],
    // Test google_analytics_tokens().
    6 => [
      'index' => 6,
      'name' => 'current_user_role_names',
      'value' => '[current-user:role-names]',
    ],
    7 => [
      'index' => 7,
      'name' => 'current_user_role_ids',
      'value' => '[current-user:role-ids]',
    ],
  ];
  $this
    ->config('google_analytics.settings')
    ->set('custom.dimension', $google_analytics_custom_dimension)
    ->save();
  $this
    ->verbose('<pre>' . print_r($google_analytics_custom_dimension, TRUE) . '</pre>');

  // Test on frontpage.
  $this
    ->drupalGet('');
  $this
    ->assertRaw(Json::encode('dimension1') . ':' . Json::encode($google_analytics_custom_dimension['1']['name']));
  $this
    ->assertRaw(Json::encode($google_analytics_custom_dimension['1']['name']) . ':' . Json::encode("Value: {$site_slogan}"));
  $this
    ->assertRaw(Json::encode('dimension2') . ':' . Json::encode($google_analytics_custom_dimension['2']['name']));
  $this
    ->assertRaw(Json::encode($google_analytics_custom_dimension['2']['name']) . ':' . Json::encode($google_analytics_custom_dimension['2']['value']));
  $this
    ->assertNoRaw(Json::encode('dimension3') . ':' . Json::encode($google_analytics_custom_dimension['3']['name']));
  $this
    ->assertNoRaw(Json::encode($google_analytics_custom_dimension['3']['name']) . ':' . Json::encode(''));
  $this
    ->assertRaw(Json::encode('dimension4') . ':' . Json::encode($google_analytics_custom_dimension['4']['name']));
  $this
    ->assertRaw(Json::encode($google_analytics_custom_dimension['4']['name']) . ':' . Json::encode('0'));
  $this
    ->assertNoRaw(Json::encode('dimension5') . ':' . Json::encode($google_analytics_custom_dimension['5']['name']));
  $this
    ->assertNoRaw(Json::encode($google_analytics_custom_dimension['5']['name']) . ':' . Json::encode('article'));
  $this
    ->assertRaw(Json::encode('dimension6') . ':' . Json::encode($google_analytics_custom_dimension['6']['name']));
  $this
    ->assertRaw(Json::encode($google_analytics_custom_dimension['6']['name']) . ':' . Json::encode(implode(',', \Drupal::currentUser()
    ->getRoles())));
  $this
    ->assertRaw(Json::encode('dimension7') . ':' . Json::encode($google_analytics_custom_dimension['7']['name']));
  $this
    ->assertRaw(Json::encode($google_analytics_custom_dimension['7']['name']) . ':' . Json::encode(implode(',', array_keys(\Drupal::currentUser()
    ->getRoles()))));

  // Test on a node.
  $this
    ->drupalGet('node/' . $node
    ->id());
  $this
    ->assertText($node
    ->getTitle());
  $this
    ->assertRaw(Json::encode('dimension5') . ':' . Json::encode($google_analytics_custom_dimension['5']['name']));
  $this
    ->assertRaw(Json::encode($google_analytics_custom_dimension['5']['name']) . ':' . Json::encode('article'));
}