View source
<?php
namespace Drupal\system\Tests\Element;
use Drupal\Core\Form\FormInterface;
use Drupal\Core\Form\FormState;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element\PathElement;
use Drupal\Core\Url;
use Drupal\simpletest\KernelTestBase;
use Drupal\user\Entity\Role;
use Drupal\user\Entity\User;
class PathElementFormTest extends KernelTestBase implements FormInterface {
protected $testUser;
public static $modules = array(
'system',
'user',
);
protected function setUp() {
parent::setUp();
$this
->installSchema('system', [
'router',
'sequences',
'key_value_expire',
]);
$this
->installEntitySchema('user');
\Drupal::service('router.builder')
->rebuild();
$role = Role::create(array(
'id' => 'admin',
'label' => 'admin',
));
$role
->grantPermission('link to any page');
$role
->save();
$this->testUser = User::create(array(
'name' => 'foobar',
'mail' => 'foobar@example.com',
));
$this->testUser
->addRole($role
->id());
$this->testUser
->save();
\Drupal::service('current_user')
->setAccount($this->testUser);
}
public function getFormId() {
return 'test_path_element';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form['required_validate'] = array(
'#type' => 'path',
'#required' => TRUE,
'#title' => 'required_validate',
'#convert_path' => PathElement::CONVERT_NONE,
);
$form['required_non_validate'] = array(
'#type' => 'path',
'#required' => TRUE,
'#title' => 'required_non_validate',
'#convert_path' => PathElement::CONVERT_NONE,
'#validate_path' => FALSE,
);
$form['optional_validate'] = array(
'#type' => 'path',
'#required' => FALSE,
'#title' => 'optional_validate',
'#convert_path' => PathElement::CONVERT_NONE,
);
$form['optional_validate'] = array(
'#type' => 'path',
'#required' => FALSE,
'#title' => 'optional_validate',
'#convert_path' => PathElement::CONVERT_ROUTE,
);
$form['required_validate_route'] = array(
'#type' => 'path',
'#required' => TRUE,
'#title' => 'required_validate_route',
);
$form['required_validate_url'] = array(
'#type' => 'path',
'#required' => TRUE,
'#title' => 'required_validate_url',
'#convert_path' => PathElement::CONVERT_URL,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
}
public function validateForm(array &$form, FormStateInterface $form_state) {
}
public function testPathElement() {
$form_state = (new FormState())
->setValues([
'required_validate' => 'user/' . $this->testUser
->id(),
'required_non_validate' => 'magic-ponies',
'required_validate_route' => 'user/' . $this->testUser
->id(),
'required_validate_url' => 'user/' . $this->testUser
->id(),
]);
$form_builder = $this->container
->get('form_builder');
$form_builder
->submitForm($this, $form_state);
$this
->assertEqual(count($form_state
->getErrors()), 0);
$this
->assertEqual($form_state
->getValue('required_validate_route'), array(
'route_name' => 'entity.user.canonical',
'route_parameters' => array(
'user' => $this->testUser
->id(),
),
));
$url = $form_state
->getValue('required_validate_url');
$this
->assertTrue($url instanceof Url);
$this
->assertEqual($url
->getRouteName(), 'entity.user.canonical');
$this
->assertEqual($url
->getRouteParameters(), array(
'user' => $this->testUser
->id(),
));
$form_state = (new FormState())
->setValues([
'required_non_validate' => 'magic-ponies',
'required_validate_route' => 'user/' . $this->testUser
->id(),
'required_validate_url' => 'user/' . $this->testUser
->id(),
]);
$form_builder
->submitForm($this, $form_state);
$errors = $form_state
->getErrors();
$this
->assertEqual(count($errors), 1);
$this
->assertEqual($errors, array(
'required_validate' => t('@name field is required.', array(
'@name' => 'required_validate',
)),
));
$form_state = (new FormState())
->setValues([
'required_validate' => 'user/74',
'required_non_validate' => 'magic-ponies',
'required_validate_route' => 'user/74',
'required_validate_url' => 'user/74',
]);
$form_builder = $this->container
->get('form_builder');
$form_builder
->submitForm($this, $form_state);
$errors = $form_state
->getErrors();
$this
->assertEqual(count($errors), 3);
$this
->assertEqual($errors, array(
'required_validate' => t('This path does not exist or you do not have permission to link to %path.', array(
'%path' => 'user/74',
)),
'required_validate_route' => t('This path does not exist or you do not have permission to link to %path.', array(
'%path' => 'user/74',
)),
'required_validate_url' => t('This path does not exist or you do not have permission to link to %path.', array(
'%path' => 'user/74',
)),
));
}
}