Skip to content

Commit 3c7329e

Browse files
fix(next): add event action on entity translation delete (#780)
1 parent debfc08 commit 3c7329e

File tree

3 files changed

+56
-13
lines changed

3 files changed

+56
-13
lines changed

modules/next/next.module

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,11 @@ function next_entity_predelete(EntityInterface $entity) {
8787
$event = EntityActionEvent::createFromEntity($entity, EntityActionEventInterface::DELETE_ACTION);
8888
\Drupal::service('next.entity_action_event_dispatcher')->addEvent($event);
8989
}
90+
91+
/**
92+
* Implements hook_entity_translation_delete().
93+
*/
94+
function next_entity_translation_delete(EntityInterface $translation) {
95+
$event = EntityActionEvent::createFromEntity($translation, EntityActionEventInterface::DELETE_ACTION);
96+
\Drupal::service('next.entity_action_event_dispatcher')->addEvent($event);
97+
}

modules/next/tests/src/Kernel/Event/EntityActionEventTest.php

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Drupal\Tests\next\Kernel\Event;
44

55
use Drupal\KernelTests\KernelTestBase;
6+
use Drupal\language\Entity\ConfigurableLanguage;
67
use Drupal\node\Entity\NodeType;
78
use Drupal\Tests\node\Traits\NodeCreationTrait;
89
use Symfony\Component\HttpFoundation\Request;
@@ -28,6 +29,8 @@ class EntityActionEventTest extends KernelTestBase {
2829
'system',
2930
'user',
3031
'dblog',
32+
'content_translation',
33+
'language',
3134
];
3235

3336
/**
@@ -38,7 +41,7 @@ protected function setUp(): void {
3841

3942
$this->installEntitySchema('node');
4043
$this->installEntitySchema('user');
41-
$this->installConfig(['filter', 'next', 'system', 'user']);
44+
$this->installConfig(['filter', 'next', 'system', 'user', 'language']);
4245
$this->installSchema('dblog', ['watchdog']);
4346
$this->installSchema('node', ['node_access']);
4447
$this->installSchema('user', ['users_data']);
@@ -49,36 +52,55 @@ protected function setUp(): void {
4952
'label' => 'Page',
5053
]);
5154
$page_type->save();
55+
56+
// Set up multilingual.
57+
ConfigurableLanguage::createFromLangcode('nl')->save();
5258
}
5359

5460
/**
5561
* Test entity action events.
5662
*/
57-
public function testEntityActionEvents() {
58-
$page = $this->createNode(['type' => 'page', 'title' => 'A page']);
63+
public function testEntityActionEvents(): void {
64+
$title = 'A page';
65+
$translated_title = 'Translation';
66+
$page = $this->createNode(['type' => 'page', 'title' => $title]);
67+
$page->addTranslation('nl', ['title' => $translated_title]);
5968

6069
// Insert.
6170
$page->save();
6271
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
63-
$this->assertLogMessage("insert");
72+
$this->assertLogMessage($title, 'insert');
6473

6574
// Update.
6675
$page->set('title', 'A page updated')->save();
6776
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
68-
$this->assertLogMessage("update");
77+
$this->assertLogMessage($title, 'update');
78+
79+
// Delete translation.
80+
$page->removeTranslation('nl');
81+
$page->save();
82+
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
83+
$this->assertLogMessage($translated_title, 'delete');
84+
85+
// Delete.
86+
$page->delete();
87+
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
88+
$this->assertLogMessage('A page updated', 'delete');
6989
}
7090

7191
/**
7292
* Helper to assert log.
7393
*
94+
* @param string $label
95+
* The label of the entity.
7496
* @param string $action
7597
* The action to perform.
7698
*/
77-
protected function assertLogMessage(string $action) {
78-
$message = "Event @event dispatched for entity @label and action @action.";
99+
protected function assertLogMessage(string $label, string $action): void {
100+
$message = 'Event @event dispatched for entity @label and action @action.';
79101
$variables = [
80102
'@event' => 'next.entity.action',
81-
'@label' => 'A page',
103+
'@label' => $label,
82104
'@action' => $action,
83105
];
84106

modules/next/tests/src/Kernel/Event/EntityRevalidatedEventTest.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Drupal\dblog\Controller\DbLogController;
66
use Drupal\KernelTests\KernelTestBase;
7+
use Drupal\language\Entity\ConfigurableLanguage;
78
use Drupal\next\Entity\NextEntityTypeConfig;
89
use Drupal\node\Entity\NodeType;
910
use Drupal\Tests\node\Traits\NodeCreationTrait;
@@ -30,6 +31,8 @@ class EntityRevalidatedEventTest extends KernelTestBase {
3031
'system',
3132
'user',
3233
'dblog',
34+
'content_translation',
35+
'language',
3336
];
3437

3538
/**
@@ -46,6 +49,9 @@ protected function setUp(): void {
4649
$this->installSchema('node', ['node_access']);
4750
$this->installSchema('user', ['users_data']);
4851

52+
// Set up multilingual.
53+
ConfigurableLanguage::createFromLangcode('nl')->save();
54+
4955
NodeType::create(['type' => 'page', 'name' => 'Page'])->save();
5056

5157
// Create entity type config.
@@ -71,24 +77,31 @@ protected function setUp(): void {
7177
*/
7278
public function testEntityRevalidatedEvents() {
7379
$page = $this->createNode(['type' => 'page', 'title' => 'A page']);
80+
$page->addTranslation('nl', ['title' => 'Translation']);
7481

7582
// Insert.
7683
$page->save();
7784
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
78-
$this->assertLogsContains("Entity A page, action insert, revalidated 0.");
85+
$this->assertLogsContains('Entity A page, action insert, revalidated 0.');
7986

8087
// Update.
8188
$page->set('title', 'A page updated')->save();
8289
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
83-
$this->assertLogsContains("Entity A page updated, action update, revalidated 0.");
90+
$this->assertLogsContains('Entity A page updated, action update, revalidated 0.');
91+
92+
// Delete translation.
93+
$page->removeTranslation('nl');
94+
$page->save();
95+
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
96+
$this->assertLogsContains('Entity Translation, action delete, revalidated 0.');
8497

8598
// Delete.
8699
$page->delete();
87100
$this->container->get('kernel')->terminate(Request::create('/'), new Response());
88-
$this->assertLogsContains("Entity A page updated, action delete, revalidated 0.");
101+
$this->assertLogsContains('Entity A page updated, action delete, revalidated 0.');
89102
// As hook_entity_predelete is used to perform revalidate
90103
// before delete action then it's ideal to check log after revalidate.
91-
$this->assertLogsContains("Event next.entity.action dispatched for entity A page updated and action delete.");
104+
$this->assertLogsContains('Event next.entity.action dispatched for entity A page updated and action delete.');
92105
}
93106

94107
/**
@@ -97,7 +110,7 @@ public function testEntityRevalidatedEvents() {
97110
* @param string $message
98111
* The message to assert in the logs.
99112
*/
100-
protected function assertLogsContains(string $message) {
113+
protected function assertLogsContains(string $message): void {
101114
$logs = $this->container->get('database')
102115
->select('watchdog', 'wd')
103116
->fields('wd', ['message', 'variables'])

0 commit comments

Comments
 (0)