diff --git a/core/modules/user/src/Tests/UserFieldsTest.php b/core/modules/user/src/Tests/UserFieldsTest.php new file mode 100644 index 0000000..f605c15 --- /dev/null +++ b/core/modules/user/src/Tests/UserFieldsTest.php @@ -0,0 +1,55 @@ +installEntitySchema('user'); + + // Setup a test theme that prints the user's mail field. + \Drupal::service('theme_handler')->install(array('user_test_theme')); + \Drupal::theme()->setActiveTheme(\Drupal::service('theme.initialization')->initTheme('user_test_theme')); + // Clear the theme registry. + $this->container->set('theme.registry', NULL); + } + + /** + * Tests account's available fields. + */ + function testUserFields() { + // Create the user to test the user fields. + $user = User::create([ + 'name' => 'foobar', + 'mail' => 'foobar@example.com', + ]); + $build = user_view($user); + $output = drupal_render($build); + $this->setRawContent($output); + $userEmail = $user->getEmail(); + $this->assertText($userEmail, 'User\'s mail field is found in the twig template'); + } +} diff --git a/core/modules/user/tests/themes/user_test_theme/user.html.twig b/core/modules/user/tests/themes/user_test_theme/user.html.twig new file mode 100644 index 0000000..717aa87 --- /dev/null +++ b/core/modules/user/tests/themes/user_test_theme/user.html.twig @@ -0,0 +1,33 @@ +{# +/** + * @file + * Default theme implementation to present all user data. + * + * This template is used when viewing a registered user's page, + * e.g., example.com/user/123. 123 being the user's ID. + * + * Available variables: + * - content: A list of content items. Use 'content' to print all content, or + * print a subset such as 'content.field_example'. + * - Field variables: For each field attached to the user a corresponding + * variable is defined; e.g., account.field_example has a variable + * 'field_example' defined. When needing to access a field's raw values, + * developers/themers are strongly encouraged to use these variables. + * Otherwise they will have to explicitly specify the desired field language, + * e.g. account.field_example.en, thus overriding any language negotiation + * rule that was previously applied. + * - attributes: HTML attributes for the container element. + * + * @see template_preprocess_user() + * + * @ingroup themeable + */ +#} + + {% if content %} + {{- content -}} + {% endif %} + {% if user %} +

{{- user.mail.value -}}

+ {% endif %} + diff --git a/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml b/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml new file mode 100644 index 0000000..817d265 --- /dev/null +++ b/core/modules/user/tests/themes/user_test_theme/user_test_theme.info.yml @@ -0,0 +1,11 @@ +name: 'User Test theme' +type: theme +description: 'Theme for testing the available fields in user twig template' +version: VERSION +core: 8.x +stylesheets-remove: + - system.module.css +regions: + content: Content + left: Left + right: Right diff --git a/core/modules/user/user.module b/core/modules/user/user.module index e722fb2..1aebc44 100644 --- a/core/modules/user/user.module +++ b/core/modules/user/user.module @@ -1501,7 +1501,7 @@ function user_logout() { * - attributes: HTML attributes for the containing element. */ function template_preprocess_user(&$variables) { - $variables['account'] = $variables['elements']['#user']; + $variables['user'] = $variables['elements']['#user']; // Helpful $content variable for templates. foreach (Element::children($variables['elements']) as $key) { $variables['content'][$key] = $variables['elements'][$key];