diff --git a/core/modules/serialization/lib/Drupal/serialization/Tests/Entity/UserNormalizationTest.php b/core/modules/serialization/lib/Drupal/serialization/Tests/Entity/UserNormalizationTest.php
new file mode 100644
index 0000000..98f135a
--- /dev/null
+++ b/core/modules/serialization/lib/Drupal/serialization/Tests/Entity/UserNormalizationTest.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\serialization\Tests\Entity\UserNormalizationTest.
+ */
+
+namespace Drupal\serialization\Tests\Entity;
+
+use Drupal\serialization\Tests\NormalizerTestBase;
+
+class UserNormalizationTest extends NormalizerTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('user');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'User Normalize Test',
+      'description' => 'Test that user entities can be normalized.',
+      'group' => 'Serialization',
+    );
+  }
+
+  public function setUp() {
+    parent::setUp();
+
+    $this->installSchema('system', array('sequences'));
+    $this->installSchema('user', array('users'));
+  }
+
+  /**
+   * Tests that users can be normalized.
+   */
+  public function testNormalize() {
+    $user = entity_create('user', array('name' => $this->randomName()));
+    $user->save();
+    $normalized = $this->serializer->normalize($user, 'json');
+
+    $expected = array(
+      'uid' => array(
+        array('value' => $user->get('uid')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'uuid' => array(
+        array('value' => $user->get('uuid')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'langcode' => array(
+        array('value' => $user->get('langcode')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'preferred_langcode' => array(
+        array('value' => $user->get('preferred_langcode')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'preferred_admin_langcode' => array(
+        array('value' => $user->get('preferred_admin_langcode')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'name' => array(
+        array('value' => $user->get('name')->offsetGet(0)->get('value')->getValue()),
+      ),
+      // The serialization module doesn't do any access checking, so the
+      // password field is exposed if the calling function does not run access
+      // checks before calling serialize.
+      'pass' => array(
+        array('value' => $user->get('pass')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'mail' => array(
+        array('value' => $user->get('mail')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'signature' => array(
+        array('value' => $user->get('signature')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'signature_format' => array(
+        array('value' => $user->get('signature_format')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'theme' => array(
+        array('value' => $user->get('theme')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'timezone' => array(
+        array('value' => $user->get('timezone')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'status' => array(
+        array('value' => $user->get('status')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'created' => array(
+        array('value' => $user->get('created')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'access' => array(
+        array('value' => $user->get('access')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'login' => array(
+        array('value' => $user->get('login')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'init' => array(
+        array('value' => $user->get('init')->offsetGet(0)->get('value')->getValue()),
+      ),
+      'roles' => array(
+        array('value' => $user->get('roles')->offsetGet(0)->get('value')->getValue()),
+      ),
+    );
+
+    $this->assertEqual($expected, $normalized, 'User entity is normalized correctly.');
+  }
+}
