class MachineNameControllerTest
Same name in other branches
- 9 core/modules/system/tests/src/Unit/Transliteration/MachineNameControllerTest.php \Drupal\Tests\system\Unit\Transliteration\MachineNameControllerTest
- 10 core/modules/system/tests/src/Unit/Transliteration/MachineNameControllerTest.php \Drupal\Tests\system\Unit\Transliteration\MachineNameControllerTest
Tests that the machine name controller can transliterate strings as expected.
@group system
Hierarchy
- class \Drupal\Tests\UnitTestCase extends \PHPUnit\Framework\TestCase uses \Drupal\Tests\PhpunitCompatibilityTrait
- class \Drupal\Tests\system\Unit\Transliteration\MachineNameControllerTest extends \Drupal\Tests\UnitTestCase
Expanded class hierarchy of MachineNameControllerTest
File
-
core/
modules/ system/ tests/ src/ Unit/ Transliteration/ MachineNameControllerTest.php, line 18
Namespace
Drupal\Tests\system\Unit\TransliterationView source
class MachineNameControllerTest extends UnitTestCase {
/**
* The machine name controller.
*
* @var \Drupal\system\MachineNameController
*/
protected $machineNameController;
/**
* The CSRF token generator.
*
* @var \Drupal\Core\Access\CsrfTokenGenerator
*/
protected $tokenGenerator;
protected function setUp() {
parent::setUp();
// Create the machine name controller.
$this->tokenGenerator = $this->prophesize(CsrfTokenGenerator::class);
$this->tokenGenerator
->validate(Argument::cetera())
->will(function ($args) {
return $args[0] === 'token-' . $args[1];
});
$this->machineNameController = new MachineNameController(new PhpTransliteration(), $this->tokenGenerator
->reveal());
}
/**
* Data provider for testMachineNameController().
*
* @see testMachineNameController()
*
* @return array
* An array containing:
* - An array of request parameters.
* - The expected content of the JSONresponse.
*/
public function providerTestMachineNameController() {
$valid_data = [
[
[
'text' => 'Bob',
'langcode' => 'en',
],
'"Bob"',
],
[
[
'text' => 'Bob',
'langcode' => 'en',
'lowercase' => TRUE,
],
'"bob"',
],
[
[
'text' => 'Bob',
'langcode' => 'en',
'replace' => 'Alice',
'replace_pattern' => 'Bob',
],
'"Alice"',
],
[
[
'text' => 'Bob',
'langcode' => 'en',
'replace' => 'Alice',
'replace_pattern' => 'Tom',
],
'"Bob"',
],
[
[
'text' => 'Äwesome',
'langcode' => 'en',
'lowercase' => TRUE,
],
'"awesome"',
],
[
[
'text' => 'Äwesome',
'langcode' => 'de',
'lowercase' => TRUE,
],
'"aewesome"',
],
// Tests special characters replacement in the input text.
[
[
'text' => 'B?!"@\\/-ob@e',
'langcode' => 'en',
'lowercase' => TRUE,
'replace' => '_',
'replace_pattern' => '[^a-z0-9_.]+',
],
'"b_ob_e"',
],
// Tests @ character in the replace_pattern regex.
[
[
'text' => 'Bob@e\\0',
'langcode' => 'en',
'lowercase' => TRUE,
'replace' => '_',
'replace_pattern' => '[^a-z0-9_.@]+',
],
'"bob@e_0"',
],
// Tests null byte in the replace_pattern regex.
[
[
'text' => 'Bob',
'langcode' => 'en',
'lowercase' => TRUE,
'replace' => 'fail()',
'replace_pattern' => ".*@e\x00",
],
'"bob"',
],
[
[
'text' => 'Bob@e',
'langcode' => 'en',
'lowercase' => TRUE,
'replace' => 'fail()',
'replace_pattern' => ".*@e\x00",
],
'"fail()"',
],
];
$valid_data = array_map(function ($data) {
if (isset($data[0]['replace_pattern'])) {
$data[0]['replace_token'] = 'token-' . $data[0]['replace_pattern'];
}
return $data;
}, $valid_data);
return $valid_data;
}
/**
* Tests machine name controller's transliteration functionality.
*
* @param array $request_params
* An array of request parameters.
* @param $expected_content
* The expected content of the JSONresponse.
*
* @see \Drupal\system\MachineNameController::transliterate()
*
* @dataProvider providerTestMachineNameController
*/
public function testMachineNameController(array $request_params, $expected_content) {
$request = Request::create('', 'GET', $request_params);
$json = $this->machineNameController
->transliterate($request);
$this->assertEquals($expected_content, $json->getContent());
}
/**
* Tests the pattern validation.
*/
public function testMachineNameControllerWithInvalidReplacePattern() {
$request = Request::create('', 'GET', [
'text' => 'Bob',
'langcode' => 'en',
'replace' => 'Alice',
'replace_pattern' => 'Bob',
'replace_token' => 'invalid',
]);
$this->expectException(AccessDeniedHttpException::class);
$this->expectExceptionMessage("Invalid 'replace_token' query parameter.");
$this->machineNameController
->transliterate($request);
}
/**
* Tests the pattern validation with a missing token.
*/
public function testMachineNameControllerWithMissingToken() {
$request = Request::create('', 'GET', [
'text' => 'Bob',
'langcode' => 'en',
'replace' => 'Alice',
'replace_pattern' => 'Bob',
]);
$this->expectException(AccessDeniedHttpException::class);
$this->expectExceptionMessage("Missing 'replace_token' query parameter.");
$this->machineNameController
->transliterate($request);
}
}
Members
Title Sort descending | Deprecated | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|---|
MachineNameControllerTest::$machineNameController | protected | property | The machine name controller. | |||
MachineNameControllerTest::$tokenGenerator | protected | property | The CSRF token generator. | |||
MachineNameControllerTest::providerTestMachineNameController | public | function | Data provider for testMachineNameController(). | |||
MachineNameControllerTest::setUp | protected | function | Overrides UnitTestCase::setUp | |||
MachineNameControllerTest::testMachineNameController | public | function | Tests machine name controller's transliteration functionality. | |||
MachineNameControllerTest::testMachineNameControllerWithInvalidReplacePattern | public | function | Tests the pattern validation. | |||
MachineNameControllerTest::testMachineNameControllerWithMissingToken | public | function | Tests the pattern validation with a missing token. | |||
PhpunitCompatibilityTrait::getMock | Deprecated | public | function | Returns a mock object for the specified class using the available method. | ||
PhpunitCompatibilityTrait::setExpectedException | Deprecated | public | function | Compatibility layer for PHPUnit 6 to support PHPUnit 4 code. | ||
UnitTestCase::$randomGenerator | protected | property | The random generator. | |||
UnitTestCase::$root | protected | property | The app root. | 1 | ||
UnitTestCase::assertArrayEquals | protected | function | Asserts if two arrays are equal by sorting them first. | |||
UnitTestCase::getBlockMockWithMachineName | Deprecated | protected | function | Mocks a block with a block plugin. | 1 | |
UnitTestCase::getClassResolverStub | protected | function | Returns a stub class resolver. | |||
UnitTestCase::getConfigFactoryStub | public | function | Returns a stub config factory that behaves according to the passed array. | |||
UnitTestCase::getConfigStorageStub | public | function | Returns a stub config storage that returns the supplied configuration. | |||
UnitTestCase::getContainerWithCacheTagsInvalidator | protected | function | Sets up a container with a cache tags invalidator. | |||
UnitTestCase::getRandomGenerator | protected | function | Gets the random generator for the utility methods. | |||
UnitTestCase::getStringTranslationStub | public | function | Returns a stub translation manager that just returns the passed string. | |||
UnitTestCase::randomMachineName | public | function | Generates a unique random string containing letters and numbers. |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.