You are here

public function MonitoringCoreKernelTest::testDefaultNodeTypeSensors in Monitoring 8

Tests the node count per content type sensor.

See also

\Drupal\monitoring\Plugin\monitoring\SensorPlugin\ContentEntityAggregatorSensorPlugin

File

tests/src/Kernel/MonitoringCoreKernelTest.php, line 433

Class

MonitoringCoreKernelTest
Kernel tests for the core pieces of monitoring.

Namespace

Drupal\Tests\monitoring\Kernel

Code

public function testDefaultNodeTypeSensors() {
  $this
    ->installEntitySchema('user');
  $this
    ->installEntitySchema('node');
  \Drupal::service('router.builder')
    ->rebuild();
  $type1 = NodeType::create([
    'type' => $this
      ->randomMachineName(),
  ]);
  $type1
    ->save();
  $sensor1 = SensorConfig::create(array(
    'id' => 'node_new_' . $type1
      ->id(),
    'label' => new FormattableMarkup('New @type nodes', array(
      '@type' => $type1
        ->label(),
    )),
    'description' => new FormattableMarkup('New nodes of type @type', array(
      '@type' => $type1
        ->label(),
    )),
    'plugin_id' => 'entity_aggregator',
    'value_label' => new FormattableMarkup('@type nodes', array(
      '@type' => $type1
        ->label(),
    )),
    'category' => 'Content',
    'status' => FALSE,
    'caching_time' => 600,
    'settings' => array(
      'entity_type' => 'node',
      'conditions' => array(
        array(
          'field' => 'type',
          'value' => $type1
            ->id(),
        ),
      ),
      'time_interval_field' => 'created',
      'time_interval_value' => 60 * 60 * 24,
    ),
  ));
  $sensor1
    ->save();
  $type2 = NodeType::create([
    'type' => $this
      ->randomMachineName(),
  ]);
  $type2
    ->save();
  $sensor2 = SensorConfig::create(array(
    'id' => 'node_new_' . $type2
      ->id(),
    'label' => new FormattableMarkup('New @type nodes', array(
      '@type' => $type2
        ->label(),
    )),
    'description' => new FormattableMarkup('New nodes of type @type', array(
      '@type' => $type2
        ->label(),
    )),
    'plugin_id' => 'entity_aggregator',
    'value_label' => new FormattableMarkup('@type nodes', array(
      '@type' => $type2
        ->label(),
    )),
    'category' => 'Content',
    'status' => FALSE,
    'caching_time' => 600,
    'settings' => array(
      'entity_type' => 'node',
      'conditions' => array(
        array(
          'field' => 'type',
          'value' => $type2
            ->id(),
        ),
      ),
      'time_interval_field' => 'created',
      'time_interval_value' => 60 * 60 * 24,
    ),
  ));
  $sensor2
    ->save();
  Node::create(array(
    'title' => $this
      ->randomString(),
    'type' => $type1
      ->id(),
  ))
    ->save();
  Node::create(array(
    'title' => $this
      ->randomString(),
    'type' => $type1
      ->id(),
  ))
    ->save();
  Node::create(array(
    'title' => $this
      ->randomString(),
    'type' => $type2
      ->id(),
  ))
    ->save();

  // Make sure that sensors for the new node types are available.
  monitoring_sensor_manager()
    ->resetCache();

  // Run sensor for type1.
  $result = $this
    ->runSensor('node_new_' . $type1
    ->id());
  $this
    ->assertEqual($result
    ->getValue(), 2);

  // Test for the ContentEntityAggregatorSensorPlugin custom message.
  $this
    ->assertEqual($result
    ->getMessage(), new FormattableMarkup('@count @unit in @time_interval', array(
    '@count' => $result
      ->getValue(),
    '@unit' => strtolower($result
      ->getSensorConfig()
      ->getValueLabel()),
    '@time_interval' => \Drupal::service('date.formatter')
      ->formatInterval($result
      ->getSensorConfig()
      ->getTimeIntervalValue()),
  )));

  // Run sensor for all types.
  $result = $this
    ->runSensor('node_new_all');
  $this
    ->assertEqual($result
    ->getValue(), 3);

  // Verify that hooks do not break when sensors unexpectedly do exist or
  // don't exist.
  $sensor = SensorConfig::create(array(
    'id' => 'node_new_existing',
    'label' => 'Existing sensor',
    'plugin_id' => 'entity_aggregator',
    'settings' => array(
      'entity_type' => 'node',
    ),
  ));
  $sensor
    ->save();
  $type_existing = NodeType::create([
    'type' => 'existing',
    'label' => 'Existing',
  ]);
  $type_existing
    ->save();

  // Manually delete the sensor and then the node type.
  $sensor
    ->delete();
  $type_existing
    ->delete();

  // Rename type when the target sensor already exists.
  $sensor = SensorConfig::create(array(
    'id' => 'node_new_existing',
    'label' => 'Existing sensor',
    'plugin_id' => 'entity_aggregator',
    'settings' => array(
      'entity_type' => 'node',
    ),
  ));
  $sensor
    ->save();
  $type1
    ->set('name', 'existing');
  $type1
    ->save();

  // Delete the sensor for $type2 before renaming.
  $sensor = SensorConfig::load('node_new_' . $type2
    ->id());
  $sensor
    ->delete();
  $type2
    ->set('name', 'different');
  $type2
    ->save();
}