ClientsideValidationTest.php in Clientside Validation 2.0.x
File
tests/src/FunctionalJavascript/ClientsideValidationTest.php
View source
<?php
namespace Drupal\Tests\clientside_validation\FunctionalJavascript;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
class ClientsideValidationTest extends WebDriverTestBase {
const DEMO_FORM_URL = '/admin/config/user-interface/clientside-validation-demo';
protected $adminUser;
protected $page;
public static $modules = [
'clientside_validation_demo',
];
protected function setUp() {
parent::setUp();
$this->adminUser = $this
->drupalCreateUser([
'access administration pages',
'administer site configuration',
]);
}
public function testValidations() {
$this
->drupalLogin($this->adminUser);
$this
->drupalGet(self::DEMO_FORM_URL);
$this->page = $this
->getSession()
->getPage();
$this
->assertFalse($this->page
->findById('edit-text-3')
->hasAttribute('data-msg-required'));
$this
->assertFalse($this->page
->findById('edit-email-2')
->hasAttribute('data-msg-required'));
$this
->assertFalse($this->page
->findById('edit-number-1')
->hasAttribute('data-msg-required'));
$this
->assertFalse($this->page
->findById('edit-number-2')
->hasAttribute('data-msg-required'));
$this
->assertFalse($this->page
->findById('edit-number-3')
->hasAttribute('data-msg-required'));
$this
->assertFalse($this->page
->findById('edit-number-4')
->hasAttribute('data-msg-required'));
$this
->assertFalse($this->page
->findById('edit-number-5')
->hasAttribute('data-msg-required'));
$this
->assertFalse($this->page
->findById('edit-url')
->hasAttribute('data-msg-required'));
$assertions = [];
$assertions['edit-text-1'] = 'Text 1 field is required.';
$assertions['edit-text-2'] = 'This message is coming from #required_error.';
$assertions['edit-text-4'] = 'This message is coming from #required_error with #states.';
$assertions['edit-email-1'] = 'E-Mail 1 field is required.';
$this
->validateAssertions($assertions);
$assertions = [];
$this->page
->findById('edit-url')
->setValue('invalid url');
$assertions['edit-url'] = 'URL does not contain a valid url.';
$this
->validateAssertions($assertions);
$assertions = [];
$this->page
->findById('edit-email-1')
->setValue('hello@world@w3c.org');
$assertions['edit-email-1'] = 'E-Mail 1 does not contain a valid email.';
$this->page
->findById('edit-email-2')
->setValue('asdf');
$assertions['edit-email-2'] = 'E-Mail 2 does not contain a valid email.';
$this
->validateAssertions($assertions);
$assertions = [];
$this->page
->findById('edit-number-2')
->setValue('150');
$assertions['edit-number-2'] = 'The value in Number 2 has to be less than 100.';
$this->page
->findById('edit-number-3')
->setValue('50');
$assertions['edit-number-3'] = 'The value in Number 3 has to be greater than 100.';
$this->page
->findById('edit-number-5')
->setValue('101');
$assertions['edit-number-5'] = 'The value in Number 5 has to be greater than 100 by steps of 5.';
$this->page
->findById('edit-phone-1')
->setValue('abc');
$assertions['edit-phone-1'] = 'Phone Number does not meet the requirements.';
$this->page
->findById('edit-text-equal-1')
->setValue('No equal value for 1');
$this->page
->findById('edit-text-equal-2')
->setValue('No equal value for 2');
$assertions['edit-text-equal-2'] = 'Value in Equal to check - default message does not match.';
$this->page
->findById('edit-text-equal-3')
->setValue('No equal value for 3');
$assertions['edit-text-equal-3'] = 'Text should match value in Equal To.';
$this
->validateAssertions($assertions);
$this->page
->findById('edit-text-1')
->setValue('text 1');
$this->page
->findById('edit-text-2')
->setValue('text 2');
$this->page
->findById('edit-text-3')
->setValue('text 3');
$this->page
->findById('edit-email-1')
->setValue('admin@localhost.com');
$this->page
->findById('edit-email-2')
->setValue('dev@example.com');
$this->page
->findById('edit-number-1')
->setValue('100');
$this->page
->findById('edit-number-2')
->setValue('100');
$this->page
->findById('edit-number-3')
->setValue('100');
$this->page
->findById('edit-number-4')
->setValue('100');
$this->page
->findById('edit-number-5')
->setValue('100');
$this->page
->findById('edit-url')
->setValue('http://example.com');
$this->page
->findById('edit-phone-1')
->setValue('9999999999');
$this->page
->findById('edit-text-equal-1')
->setValue('Equal value');
$this->page
->findById('edit-text-equal-2')
->setValue('Equal value');
$this->page
->findById('edit-text-equal-3')
->setValue('Equal value');
$this->page
->findButton('Submit')
->click();
$wrapper = $this->page
->find('css', '.messages.messages--status');
$this
->assertContains('All form validations passed.', $wrapper
->getText());
}
private function validateAssertions(array $assertions) {
$this->page
->findButton('Submit')
->click();
foreach ($assertions as $key => $expected) {
$errorElement = $this->page
->findById($key . '-error');
if (empty($errorElement)) {
$this
->assertEquals($expected, '');
continue;
}
$actual = $errorElement
->getText();
$this
->assertEquals($expected, $actual);
}
}
}