function ContentTranslationConcurrencyTest::testConcurrentTranslationAddition

Same name and namespace in other branches
  1. 11.x core/modules/content_translation/tests/src/Kernel/ContentTranslationConcurrencyTest.php \Drupal\Tests\content_translation\Kernel\ContentTranslationConcurrencyTest::testConcurrentTranslationAddition()

Tests that adding a translation that already exists redirects gracefully.

File

core/modules/content_translation/tests/src/Kernel/ContentTranslationConcurrencyTest.php, line 50

Class

ContentTranslationConcurrencyTest
Tests concurrency in the content translation controller.

Namespace

Drupal\Tests\content_translation\Kernel

Code

public function testConcurrentTranslationAddition() : void {
  $language_manager = $this->container
    ->get('language_manager');
  $source_lang = $language_manager->getLanguage('en');
  $target_lang = $language_manager->getLanguage('fr');
  $entity = EntityTestMul::create([
    'name' => 'English Entity',
    'type' => 'test',
    'langcode' => 'en',
  ]);
  $entity->save();
  $entity->addTranslation('fr', [
    'name' => 'French Entity',
  ])
    ->save();
  $controller = ContentTranslationController::create($this->container);
  $route_match = new RouteMatch('entity.entity_test_mul.content_translation_add', new Route('/entity-test-mul/{entity_test_mul}/translations/add/{source}/{target}'), [
    'entity_test_mul' => $entity,
  ], [
    'entity_test_mul' => $entity->id(),
  ]);
  $response = $controller->add($source_lang, $target_lang, $route_match, 'entity_test_mul');
  $this->assertInstanceOf(RedirectResponse::class, $response);
  $expected = $entity->toUrl('edit-form')
    ->toString();
  $this->assertStringContainsString($expected, $response->getTargetUrl());
  /** @var \Drupal\Core\Messenger\MessengerInterface $messenger */
  $messenger = $this->container
    ->get('messenger');
  $errors = $messenger->messagesByType('error');
  $this->assertCount(1, $errors);
  $actual_message = (string) reset($errors);
  $this->assertEquals('A translation already exists for French.', $actual_message);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.