function ConfigSchemaTest::testSchemaData

Tests metadata applied to configuration objects.

File

drupal/core/modules/config/lib/Drupal/config/Tests/ConfigSchemaTest.php, line 161
Contains \Drupal\config\Tests\ConfigSchemaTest.

Class

ConfigSchemaTest
Tests schema for configuration objects.

Namespace

Drupal\config\Tests

Code

function testSchemaData() {

  // Try some simple properties.
  $meta = config_typed()
    ->get('system.site');
  $property = $meta
    ->get('name');
  $this
    ->assertTrue(is_a($property, 'Drupal\\Core\\TypedData\\Type\\String'), 'Got the right wrapper fo the site name property.');
  $this
    ->assertEqual($property
    ->getType(), 'label', 'Got the right string type for site name data.');
  $this
    ->assertEqual($property
    ->getValue(), 'Drupal', 'Got the right string value for site name data.');
  $property = $meta
    ->get('page')
    ->get('front');
  $this
    ->assertTrue(is_a($property, 'Drupal\\Core\\TypedData\\Type\\String'), 'Got the right wrapper fo the page.front property.');
  $this
    ->assertEqual($property
    ->getType(), 'path', 'Got the right type for page.front data (undefined).');
  $this
    ->assertEqual($property
    ->getValue(), 'user', 'Got the right value for page.front data.');

  // Check nested array of properties.
  $list = $meta
    ->get('page');
  $this
    ->assertEqual(count($list), 3, 'Got a list with the right number of properties for site page data');
  $this
    ->assertTrue(isset($list['front']) && isset($list['403']) && isset($list['404']), 'Got a list with the right properties for site page data.');
  $this
    ->assertEqual($list['front']
    ->getValue(), 'user', 'Got the right value for page.front data from the list.');

  // And test some ComplexDataInterface methods.
  $properties = $list
    ->getProperties();
  $this
    ->assertTrue(count($properties) == 3 && $properties['front'] == $list['front'], 'Got the right properties for site page.');
  $values = $list
    ->getPropertyValues();
  $this
    ->assertTrue(count($values) == 3 && $values['front'] == 'user', 'Got the right property values for site page.');

  // Now let's try something more complex, with nested objects.
  $wrapper = config_typed()
    ->get('image.style.large');
  $effects = $wrapper
    ->get('effects');

  // The function is_array() doesn't work with ArrayAccess, so we use count().
  $this
    ->assertTrue(count($effects) == 1, 'Got an array with effects for image.style.large data');
  $ieid = key($effects
    ->getValue());
  $effect = $effects[$ieid];
  $this
    ->assertTrue(count($effect['data']) && $effect['name']
    ->getValue() == 'image_scale', 'Got data for the image scale effect from metadata.');
  $this
    ->assertEqual($effect['data']['width']
    ->getType(), 'integer', 'Got the right type for the scale effect width.');
  $this
    ->assertEqual($effect['data']['width']
    ->getValue(), 480, 'Got the right value for the scale effect width.');

  // Finally update some object using a configuration wrapper.
  $new_slogan = 'Site slogan for testing configuration metadata';
  $wrapper = config_typed()
    ->get('system.site');
  $wrapper
    ->set('slogan', $new_slogan);
  $site_slogan = $wrapper
    ->get('slogan');
  $this
    ->assertEqual($site_slogan
    ->getValue(), $new_slogan, 'Successfully updated the contained configuration data');
}