Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Issue forks
drupal-2974156
Commits
5706a723
Commit
5706a723
authored
Aug 24, 2021
by
MegaChriz
Browse files
Added test in which an entity gets resaved in an implementation of hook_entity_update().
parent
b0f50910
Changes
2
Hide whitespace changes
Inline
Side-by-side
core/modules/editor/tests/modules/editor_test.module
View file @
5706a723
...
...
@@ -5,9 +5,45 @@
* Helper module for the Text Editor tests.
*/
use
Drupal\Core\Entity\EntityInterface
;
use
Drupal\node\NodeInterface
;
use
Drupal\filter\FilterFormatInterface
;
use
Drupal\file\FileInterface
;
/**
* Implements hook_entity_update().
*
* @see \Drupal\Tests\editor\Kernel\EntityUpdateTest
*/
function
editor_test_entity_update
(
EntityInterface
$entity
)
{
// Only act on nodes.
if
(
!
$entity
instanceof
NodeInterface
)
{
return
;
}
// Avoid infinite loop by only going through our post save logic once.
if
(
!
empty
(
$entity
->
editor_test_updating
))
{
return
;
}
// Set flag for whether or not the entity needs to be resaved.
$needs_update
=
FALSE
;
// Perform our post save logic.
if
(
$entity
->
title
->
value
==
'test updated'
)
{
// Change the node title.
$entity
->
title
->
value
=
'test updated 2'
;
$needs_update
=
TRUE
;
}
if
(
$needs_update
)
{
// Set flag on entity that our logic was already executed.
$entity
->
editor_test_updating
=
TRUE
;
// And resave entity.
$entity
->
save
();
}
}
/**
* Implements hook_editor_js_settings_alter().
*/
...
...
core/modules/editor/tests/src/Kernel/EntityUpdateTest.php
0 → 100644
View file @
5706a723
<?php
namespace
Drupal\Tests\editor\Kernel
;
use
Drupal\KernelTests\Core\Entity\EntityKernelTestBase
;
use
Drupal\node\Entity\NodeType
;
use
Drupal\node\Entity\Node
;
/**
* Tests updating an entity.
*
* @group editor
*/
class
EntityUpdateTest
extends
EntityKernelTestBase
{
/**
* Modules to enable.
*
* @var array
*/
protected
static
$modules
=
[
'editor'
,
'editor_test'
,
'node'
];
/**
* {@inheritdoc}
*/
protected
function
setUp
():
void
{
parent
::
setUp
();
$this
->
installSchema
(
'node'
,
[
'node_access'
]);
$this
->
installConfig
([
'node'
]);
// Create a node type for testing.
$type
=
NodeType
::
create
([
'type'
=>
'page'
,
'name'
=>
'page'
]);
$type
->
save
();
// Set editor_test module weight to be lower than editor module's weight so
// that editor_test_entity_update() is called before editor_entity_update().
$extension_config
=
\
Drupal
::
configFactory
()
->
get
(
'core.extension'
);
$editor_module_weight
=
$extension_config
->
get
(
'module.editor'
);
module_set_weight
(
'editor_test'
,
$editor_module_weight
-
1
);
}
/**
* Tests updating an existing entity.
*
* @see editor_test_entity_update()
*/
public
function
testEntityUpdate
()
{
// Create a node.
$node
=
Node
::
create
([
'type'
=>
'page'
,
'title'
=>
'test'
,
]);
$node
->
save
();
// Update the node.
// What happens is the following:
// 1. \Drupal\Core\Entity\EntityStorageBase::doPostSave() gets called.
// 2. editor_test_entity_update() gets called.
// 3. A resave of the updated entity gets triggered (second save call).
// 4. \Drupal\Core\Entity\EntityStorageBase::doPostSave() gets called.
// 5. editor_test_entity_update() gets called.
// 6. editor_entity_update() gets called (caused by the second save call).
// 7. editor_entity_update() gets called (caused by the first save call).
$node
->
title
->
value
=
'test updated'
;
$node
->
save
();
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment