diff --git a/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldType/ChangedTestItem.php b/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldType/ChangedTestItem.php index 1425588..2eb55b1 100644 --- a/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldType/ChangedTestItem.php +++ b/core/modules/system/tests/modules/entity_test/src/Plugin/Field/FieldType/ChangedTestItem.php @@ -22,6 +22,13 @@ class ChangedTestItem extends ChangedItem { /** + * Seconds sleep after ::postSave() call. + * + * @var int + */ + public static $sleepPostSave = 0; + + /** * {@inheritdoc} */ public function preSave() { @@ -36,4 +43,13 @@ public function preSave() { } } + /** + * {@inheritdoc} + */ + public function postSave($update) { + parent::postSave($update); + + sleep(static::$sleepPostSave); + } + } diff --git a/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityChangedTest.php b/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityChangedTest.php index 66e1abb..d8119ba 100644 --- a/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityChangedTest.php +++ b/core/tests/Drupal/KernelTests/Core/Entity/ContentEntityChangedTest.php @@ -4,6 +4,7 @@ use Drupal\entity_test\Entity\EntityTestMulChanged; use Drupal\entity_test\Entity\EntityTestMulRevChanged; +use Drupal\entity_test\Plugin\Field\FieldType\ChangedTestItem; use Drupal\language\Entity\ConfigurableLanguage; /** @@ -125,7 +126,10 @@ public function testChanged() { // Update a non-translatable field to make sure that the changed timestamp // is updated for all translations. + ChangedTestItem::$sleepPostSave = 2; $entity->set('not_translatable', $this->randomString())->save(); + $this->assertGreaterThanOrEqual(4, time() - $entity->getChangedTime(), 'Sleep mode is on.'); + ChangedTestItem::$sleepPostSave = 0; $this->assertTrue( $entity->getChangedTime() > $changed_en, @@ -137,7 +141,10 @@ public function testChanged() { 'Changed time of the German translation did change.' ); - $this->assertEquals($entity->getChangedTime(), $german->getChangedTime(), 'When editing a non-translatable field the updated changed time is equal across all translations.'); + // We can't assert equality here, while instances of ChangedTestItem use the + // current timestamp every time. As a result, we can fail when a millisecond + // leads to a different value in 1 second. + $this->assertLessThanOrEqual(1, $german->getChangedTime() - $entity->getChangedTime(), 'When editing a non-translatable field the updated changed time is equal across all translations.'); $changed_en = $entity->getChangedTime(); $changed_de = $german->getChangedTime();