Skip to content
Snippets Groups Projects
Verified Commit 5738144a authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3130751 by stefanos.petrakis, Medha Kumari, larowlan, alexpott, jungle:...

Issue #3130751 by stefanos.petrakis, Medha Kumari, larowlan, alexpott, jungle: Fix LanguageNegotiationContentEntity::getLangcode() errors thrown
parent c1437df0
No related branches found
No related tags found
29 merge requests!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!4289Issue #1344552 by marcingy, Niklas Fiekas, Ravi.J, aleevas, Eduardo Morales...,!4114Issue #2707291: Disable body-level scrolling when a dialog is open as a modal,!4100Issue #3249600: Add support for PHP 8.1 Enums as allowed values for list_* data types,!3630Issue #2815301 by Chi, DanielVeza, kostyashupenko, smustgrave: Allow to create...,!3600Issue #3344629: Passing null to parameter #1 ($haystack) of type string is deprecated,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1591Issue #3199697: Add JSON:API Translation experimental module,!1484Exposed filters get values from URL when Ajax is on,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!1162Issue #3100350: Unable to save '/' root path alias,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!957Added throwing of InvalidPluginDefinitionException from getDefinition().,!925Issue #2339235: Remove taxonomy hard dependency on node module,!877Issue #2708101: Default value for link text is not saved,!872Draft: Issue #3221319: Race condition when creating menu links and editing content deletes menu links,!844Resolve #3036010 "Updaters",!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493,!485Sets the autocomplete attribute for username/password input field on login form.,!30Issue #3182188: Updates composer usage to point at ./vendor/bin/composer
......@@ -90,6 +90,10 @@ public static function create(ContainerInterface $container, array $configuratio
* {@inheritdoc}
*/
public function getLangcode(Request $request = NULL) {
if ($request === NULL || $this->languageManager === NULL) {
return NULL;
}
$langcode = $request->query->get(static::QUERY_PARAMETER);
$language_enabled = array_key_exists($langcode, $this->languageManager->getLanguages());
......
<?php
namespace Drupal\Tests\language\Unit\Plugin\LanguageNegotiation;
use Symfony\Component\HttpFoundation\Request;
use Drupal\Core\Cache\Context\CacheContextsManager;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\Language\LanguageInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\language\ConfigurableLanguageManagerInterface;
use Drupal\Tests\UnitTestCase;
use Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationContentEntity;
/**
* Tests the LanguageNegotiationContentEntity plugin class.
*
* @group language
* @coversDefaultClass \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationContentEntity
* @see \Drupal\language\Plugin\LanguageNegotiation\LanguageNegotiationContentEntity
*/
class LanguageNegotiationContentEntityTest extends UnitTestCase {
/**
* An array of mock LanguageInterface objects.
*
* @var \Drupal\Core\Language\LanguageInterface
*/
protected array $languages;
/**
* A mock LanguageManager object.
*
* @var \Drupal\language\ConfigurableLanguageManagerInterface
*/
protected $languageManager;
/**
* A mock object implementing the AccountInterface.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $user;
/**
* {@inheritdoc}
*/
protected function setUp(): void {
// Set up some languages to be used by the language-based path processor.
$language_de = $this->createMock(LanguageInterface::class);
$language_de->expects($this->any())
->method('getId')
->will($this->returnValue('de'));
$language_en = $this->createMock(LanguageInterface::class);
$language_en->expects($this->any())
->method('getId')
->will($this->returnValue('en'));
$languages = [
'de' => $language_de,
'en' => $language_en,
];
$this->languages = $languages;
$language_manager = $this->getMockBuilder(ConfigurableLanguageManagerInterface::class)
->getMock();
$language_manager->expects($this->any())
->method('getLanguages')
->will($this->returnValue($languages));
$this->languageManager = $language_manager;
$this->user = $this->getMockBuilder(AccountInterface::class)
->getMock();
$cache_contexts_manager = $this->getMockBuilder(CacheContextsManager::class)
->disableOriginalConstructor()
->getMock();
$cache_contexts_manager->method('assertValidTokens')->willReturn(TRUE);
$container = new ContainerBuilder();
$container->set('cache_contexts_manager', $cache_contexts_manager);
\Drupal::setContainer($container);
}
/**
* @covers ::getLangcode
*/
public function testGetLangcode() {
$entityTypeManagerMock = $this->getMockBuilder(EntityTypeManager::class)
->disableOriginalConstructor()
->getMock();
$languageNegotiationContentEntity = new LanguageNegotiationContentEntity($entityTypeManagerMock);
$languageNegotiationContentEntity->setLanguageManager($this->languageManager);
// Case 1: NULL request object argument.
$this->assertSame(NULL, $languageNegotiationContentEntity->getLangcode());
// Case 2: A request object is available, but the languageManager is not
// set.
$request = Request::create('/foo', 'GET');
$this->assertSame(NULL, $languageNegotiationContentEntity->getLangcode($request));
// Case 3: A request object is available, but static::QUERY_PARAMETER is
// set to a non-enabled language.
$request = Request::create('/foo', 'GET',
[LanguageNegotiationContentEntity::QUERY_PARAMETER => 'it']);
$this->assertSame(NULL, $languageNegotiationContentEntity->getLangcode($request));
// Case 4: A request object is available and static::QUERY_PARAMETER is
// set to an enabled language.
$request = Request::create('/foo', 'GET',
[LanguageNegotiationContentEntity::QUERY_PARAMETER => 'de']);
$this->assertSame('de', $languageNegotiationContentEntity->getLangcode($request));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment