2015-08-17 17:00:26 -07:00
< ? php
2016-10-06 15:16:20 -07:00
namespace Drupal\FunctionalTests ;
2015-08-17 17:00:26 -07:00
2017-04-13 15:53:35 +01:00
use Behat\Mink\Exception\ExpectationException ;
2018-11-23 12:29:20 +00:00
use Drupal\Component\Serialization\Json ;
2016-10-06 15:16:20 -07:00
use Drupal\Component\Utility\Html ;
2016-06-02 15:56:09 -07:00
use Drupal\Core\Url ;
2016-04-20 09:56:34 -07:00
use Drupal\Tests\BrowserTestBase ;
2017-04-13 15:53:35 +01:00
use Drupal\Tests\Traits\Core\CronRunTrait ;
2015-08-17 17:00:26 -07:00
/**
* Tests BrowserTestBase functionality .
*
2016-10-06 15:16:20 -07:00
* @ group browsertestbase
2015-08-17 17:00:26 -07:00
*/
class BrowserTestBaseTest extends BrowserTestBase {
2017-04-13 15:53:35 +01:00
use CronRunTrait ;
2015-08-17 17:00:26 -07:00
/**
* Modules to enable .
*
* @ var array
*/
2018-11-23 12:29:20 +00:00
public static $modules = [ 'test_page_test' , 'form_test' , 'system_test' , 'node' ];
2015-08-17 17:00:26 -07:00
/**
* Tests basic page test .
*/
public function testGoTo () {
$account = $this -> drupalCreateUser ();
$this -> drupalLogin ( $account );
// Visit a Drupal page that requires login.
2015-10-08 11:40:12 -07:00
$this -> drupalGet ( 'test-page' );
2015-08-17 17:00:26 -07:00
$this -> assertSession () -> statusCodeEquals ( 200 );
// Test page contains some text.
$this -> assertSession () -> pageTextContains ( 'Test page text.' );
2016-06-02 15:56:09 -07:00
2016-09-07 13:26:21 -07:00
// Check that returned plain text is correct.
$text = $this -> getTextContent ();
$this -> assertContains ( 'Test page text.' , $text );
$this -> assertNotContains ( '</html>' , $text );
2016-07-07 09:44:38 -07:00
// Response includes cache tags that we can assert.
2017-04-13 15:53:35 +01:00
$this -> assertSession () -> responseHeaderEquals ( 'X-Drupal-Cache-Tags' , 'http_response rendered' );
2016-07-07 09:44:38 -07:00
2016-08-03 13:22:33 -07:00
// Test that we can read the JS settings.
$js_settings = $this -> getDrupalSettings ();
$this -> assertSame ( 'azAZ09();.,\\\/-_{}' , $js_settings [ 'test-setting' ]);
2016-06-02 15:56:09 -07:00
// Test drupalGet with a url object.
$url = Url :: fromRoute ( 'test_page_test.render_title' );
$this -> drupalGet ( $url );
$this -> assertSession () -> statusCodeEquals ( 200 );
// Test page contains some text.
$this -> assertSession () -> pageTextContains ( 'Hello Drupal' );
2016-10-06 15:16:20 -07:00
// Test that setting headers with drupalGet() works.
2017-04-13 15:53:35 +01:00
$this -> drupalGet ( 'system-test/header' , [], [
2016-10-06 15:16:20 -07:00
'Test-Header' => 'header value' ,
2017-04-13 15:53:35 +01:00
]);
2016-10-06 15:16:20 -07:00
$returned_header = $this -> getSession () -> getResponseHeader ( 'Test-Header' );
$this -> assertSame ( 'header value' , $returned_header );
2015-08-17 17:00:26 -07:00
}
2018-11-23 12:29:20 +00:00
/**
* Tests drupalGet () .
*/
public function testDrupalGet () {
$this -> drupalGet ( 'test-page' );
$this -> assertSession () -> statusCodeEquals ( 200 );
$this -> assertSession () -> addressEquals ( 'test-page' );
$this -> drupalGet ( '/test-page' );
$this -> assertSession () -> statusCodeEquals ( 200 );
$this -> assertSession () -> addressEquals ( 'test-page' );
$this -> drupalGet ( '/test-page/' );
$this -> assertSession () -> statusCodeEquals ( 200 );
$this -> assertSession () -> addressEquals ( '/test-page/' );
}
2015-08-17 17:00:26 -07:00
/**
* Tests basic form functionality .
*/
public function testForm () {
// Ensure the proper response code for a _form route.
2015-10-08 11:40:12 -07:00
$this -> drupalGet ( 'form-test/object-builder' );
2015-08-17 17:00:26 -07:00
$this -> assertSession () -> statusCodeEquals ( 200 );
// Ensure the form and text field exist.
$this -> assertSession () -> elementExists ( 'css' , 'form#form-test-form-test-object' );
$this -> assertSession () -> fieldExists ( 'bananas' );
2017-04-13 15:53:35 +01:00
// Check that the hidden field exists and has a specific value.
$this -> assertSession () -> hiddenFieldExists ( 'strawberry' );
$this -> assertSession () -> hiddenFieldExists ( 'red' );
$this -> assertSession () -> hiddenFieldExists ( 'redstrawberryhiddenfield' );
$this -> assertSession () -> hiddenFieldValueNotEquals ( 'strawberry' , 'brown' );
$this -> assertSession () -> hiddenFieldValueEquals ( 'strawberry' , 'red' );
// Check that a hidden field does not exist.
$this -> assertSession () -> hiddenFieldNotExists ( 'bananas' );
$this -> assertSession () -> hiddenFieldNotExists ( 'pineapple' );
2015-08-17 17:00:26 -07:00
$edit = [ 'bananas' => 'green' ];
$this -> submitForm ( $edit , 'Save' , 'form-test-form-test-object' );
$config_factory = $this -> container -> get ( 'config.factory' );
$value = $config_factory -> get ( 'form_test.object' ) -> get ( 'bananas' );
$this -> assertSame ( 'green' , $value );
2017-04-13 15:53:35 +01:00
// Test drupalPostForm().
$edit = [ 'bananas' => 'red' ];
2018-11-23 12:29:20 +00:00
$result = $this -> drupalPostForm ( 'form-test/object-builder' , $edit , 'Save' );
$this -> assertSame ( $this -> getSession () -> getPage () -> getContent (), $result );
2017-04-13 15:53:35 +01:00
$value = $config_factory -> get ( 'form_test.object' ) -> get ( 'bananas' );
$this -> assertSame ( 'red' , $value );
$this -> drupalPostForm ( 'form-test/object-builder' , NULL , 'Save' );
$value = $config_factory -> get ( 'form_test.object' ) -> get ( 'bananas' );
$this -> assertSame ( '' , $value );
2018-11-23 12:29:20 +00:00
// Test drupalPostForm() with no-html response.
$values = Json :: decode ( $this -> drupalPostForm ( 'form_test/form-state-values-clean' , [], t ( 'Submit' )));
$this -> assertTrue ( 1000 , $values [ 'beer' ]);
// Test drupalPostForm() with form by HTML id.
$this -> drupalCreateContentType ([ 'type' => 'page' ]);
$this -> drupalLogin ( $this -> drupalCreateUser ([ 'create page content' ]));
$this -> drupalGet ( 'form-test/two-instances-of-same-form' );
$this -> getSession () -> getPage () -> fillField ( 'edit-title-0-value' , 'form1' );
$this -> getSession () -> getPage () -> fillField ( 'edit-title-0-value--2' , 'form2' );
$this -> drupalPostForm ( NULL , [], 'Save' , [], 'node-page-form--2' );
$this -> assertSession () -> pageTextContains ( 'Page form2 has been created.' );
2015-08-17 17:00:26 -07:00
}
2016-10-06 15:16:20 -07:00
/**
* Tests clickLink () functionality .
*/
public function testClickLink () {
$this -> drupalGet ( 'test-page' );
$this -> clickLink ( 'Visually identical test links' );
$this -> assertContains ( 'user/login' , $this -> getSession () -> getCurrentUrl ());
$this -> drupalGet ( 'test-page' );
$this -> clickLink ( 'Visually identical test links' , 0 );
$this -> assertContains ( 'user/login' , $this -> getSession () -> getCurrentUrl ());
$this -> drupalGet ( 'test-page' );
$this -> clickLink ( 'Visually identical test links' , 1 );
$this -> assertContains ( 'user/register' , $this -> getSession () -> getCurrentUrl ());
}
2016-04-07 11:19:57 -07:00
public function testError () {
$this -> setExpectedException ( '\Exception' , 'User notice: foo' );
$this -> drupalGet ( 'test-error' );
}
2016-10-06 15:16:20 -07:00
/**
2017-04-13 15:53:35 +01:00
* Tests linkExists () with pipe character ( | ) in locator .
*
* @ see \Drupal\Tests\WebAssert :: linkExists ()
*/
public function testPipeCharInLocator () {
$this -> drupalGet ( 'test-pipe-char' );
$this -> assertSession () -> linkExists ( 'foo|bar|baz' );
}
2018-11-23 12:29:20 +00:00
/**
* Tests linkExistsExact () functionality .
*
* @ see \Drupal\Tests\WebAssert :: linkExistsExact ()
*/
public function testLinkExistsExact () {
$this -> drupalGet ( 'test-pipe-char' );
$this -> assertSession () -> linkExistsExact ( 'foo|bar|baz' );
}
/**
* Tests linkExistsExact () functionality fail .
*
* @ see \Drupal\Tests\WebAssert :: linkExistsExact ()
*/
public function testInvalidLinkExistsExact () {
$this -> drupalGet ( 'test-pipe-char' );
$this -> setExpectedException ( ExpectationException :: class , 'Link with label foo|bar found' );
$this -> assertSession () -> linkExistsExact ( 'foo|bar' );
}
/**
* Tests linkNotExistsExact () functionality .
*
* @ see \Drupal\Tests\WebAssert :: linkNotExistsExact ()
*/
public function testLinkNotExistsExact () {
$this -> drupalGet ( 'test-pipe-char' );
$this -> assertSession () -> linkNotExistsExact ( 'foo|bar' );
}
/**
* Tests linkNotExistsExact () functionality fail .
*
* @ see \Drupal\Tests\WebAssert :: linkNotExistsExact ()
*/
public function testInvalidLinkNotExistsExact () {
$this -> drupalGet ( 'test-pipe-char' );
$this -> setExpectedException ( ExpectationException :: class , 'Link with label foo|bar|baz not found' );
$this -> assertSession () -> linkNotExistsExact ( 'foo|bar|baz' );
}
2017-04-13 15:53:35 +01:00
/**
* Tests legacy text asserts .
2016-10-06 15:16:20 -07:00
*/
2018-11-23 12:29:20 +00:00
public function testTextAsserts () {
2016-10-06 15:16:20 -07:00
$this -> drupalGet ( 'test-encoded' );
$dangerous = 'Bad html <script>alert(123);</script>' ;
$sanitized = Html :: escape ( $dangerous );
$this -> assertNoText ( $dangerous );
$this -> assertText ( $sanitized );
2017-04-13 15:53:35 +01:00
// Test getRawContent().
2018-11-23 12:29:20 +00:00
$this -> assertSame ( $this -> getSession () -> getPage () -> getContent (), $this -> getSession () -> getPage () -> getContent ());
2017-04-13 15:53:35 +01:00
}
/**
2017-07-03 16:47:07 +01:00
* Tests legacy field asserts which use xpath directly .
2017-04-13 15:53:35 +01:00
*/
2018-11-23 12:29:20 +00:00
public function testXpathAsserts () {
2017-04-13 15:53:35 +01:00
$this -> drupalGet ( 'test-field-xpath' );
$this -> assertFieldsByValue ( $this -> xpath ( " //h1[@class = 'page-title'] " ), NULL );
$this -> assertFieldsByValue ( $this -> xpath ( '//table/tbody/tr[2]/td[1]' ), 'one' );
$this -> assertFieldByXPath ( '//table/tbody/tr[2]/td[1]' , 'one' );
$this -> assertFieldsByValue ( $this -> xpath ( " //input[@id = 'edit-name'] " ), 'Test name' );
$this -> assertFieldByXPath ( " //input[@id = 'edit-name'] " , 'Test name' );
$this -> assertFieldsByValue ( $this -> xpath ( " //select[@id = 'edit-options'] " ), '2' );
$this -> assertFieldByXPath ( " //select[@id = 'edit-options'] " , '2' );
$this -> assertNoFieldByXPath ( '//notexisting' );
$this -> assertNoFieldByXPath ( " //input[@id = 'edit-name'] " , 'wrong value' );
2017-07-03 16:47:07 +01:00
// Test that the assertion fails correctly.
try {
$this -> assertFieldByXPath ( " //input[@id = 'notexisting'] " );
$this -> fail ( 'The "notexisting" field was found.' );
}
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> pass ( 'assertFieldByXPath correctly failed. The "notexisting" field was not found.' );
}
try {
$this -> assertNoFieldByXPath ( " //input[@id = 'edit-name'] " );
$this -> fail ( 'The "edit-name" field was not found.' );
}
2018-11-23 12:29:20 +00:00
catch ( ExpectationException $e ) {
2017-07-03 16:47:07 +01:00
$this -> pass ( 'assertNoFieldByXPath correctly failed. The "edit-name" field was found.' );
}
try {
$this -> assertFieldsByValue ( $this -> xpath ( " //input[@id = 'edit-name'] " ), 'not the value' );
$this -> fail ( 'The "edit-name" field is found with the value "not the value".' );
}
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> pass ( 'The "edit-name" field is not found with the value "not the value".' );
}
}
/**
* Tests legacy field asserts using textfields .
*/
2018-11-23 12:29:20 +00:00
public function testFieldAssertsForTextfields () {
2017-07-03 16:47:07 +01:00
$this -> drupalGet ( 'test-field-xpath' );
// *** 1. assertNoField().
$this -> assertNoField ( 'invalid_name_and_id' );
// Test that the assertion fails correctly when searching by name.
try {
$this -> assertNoField ( 'name' );
$this -> fail ( 'The "name" field was not found based on name.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertNoField correctly failed. The "name" field was found by name.' );
}
// Test that the assertion fails correctly when searching by id.
try {
$this -> assertNoField ( 'edit-name' );
$this -> fail ( 'The "name" field was not found based on id.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertNoField correctly failed. The "name" field was found by id.' );
}
// *** 2. assertField().
$this -> assertField ( 'name' );
$this -> assertField ( 'edit-name' );
// Test that the assertion fails correctly if the field does not exist.
try {
$this -> assertField ( 'invalid_name_and_id' );
$this -> fail ( 'The "invalid_name_and_id" field was found.' );
}
2018-11-23 12:29:20 +00:00
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
2017-07-03 16:47:07 +01:00
$this -> pass ( 'assertField correctly failed. The "invalid_name_and_id" field was not found.' );
}
// *** 3. assertNoFieldById().
2017-04-13 15:53:35 +01:00
$this -> assertNoFieldById ( 'name' );
$this -> assertNoFieldById ( 'name' , 'not the value' );
$this -> assertNoFieldById ( 'notexisting' );
$this -> assertNoFieldById ( 'notexisting' , NULL );
// Test that the assertion fails correctly if no value is passed in.
try {
$this -> assertNoFieldById ( 'edit-description' );
$this -> fail ( 'The "description" field, with no value was not found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'The "description" field, with no value was found.' );
}
// Test that the assertion fails correctly if a NULL value is passed in.
try {
$this -> assertNoFieldById ( 'edit-name' , NULL );
$this -> fail ( 'The "name" field was not found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'The "name" field was found.' );
}
2017-07-03 16:47:07 +01:00
// *** 4. assertFieldById().
2017-04-13 15:53:35 +01:00
$this -> assertFieldById ( 'edit-name' , NULL );
$this -> assertFieldById ( 'edit-name' , 'Test name' );
$this -> assertFieldById ( 'edit-description' , NULL );
$this -> assertFieldById ( 'edit-description' );
// Test that the assertion fails correctly if no value is passed in.
try {
$this -> assertFieldById ( 'edit-name' );
$this -> fail ( 'The "edit-name" field with no value was found.' );
}
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> pass ( 'The "edit-name" field with no value was not found.' );
}
2017-07-03 16:47:07 +01:00
// Test that the assertion fails correctly if the wrong value is passed in.
2017-04-13 15:53:35 +01:00
try {
2017-07-03 16:47:07 +01:00
$this -> assertFieldById ( 'edit-name' , 'not the value' );
$this -> fail ( 'The "name" field was found, using the wrong value.' );
2017-04-13 15:53:35 +01:00
}
2017-07-03 16:47:07 +01:00
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> pass ( 'The "name" field was not found, using the wrong value.' );
2017-04-13 15:53:35 +01:00
}
2017-07-03 16:47:07 +01:00
// *** 5. assertNoFieldByName().
2017-04-13 15:53:35 +01:00
$this -> assertNoFieldByName ( 'name' );
$this -> assertNoFieldByName ( 'name' , 'not the value' );
$this -> assertNoFieldByName ( 'notexisting' );
$this -> assertNoFieldByName ( 'notexisting' , NULL );
// Test that the assertion fails correctly if no value is passed in.
try {
$this -> assertNoFieldByName ( 'description' );
$this -> fail ( 'The "description" field, with no value was not found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'The "description" field, with no value was found.' );
}
// Test that the assertion fails correctly if a NULL value is passed in.
try {
$this -> assertNoFieldByName ( 'name' , NULL );
$this -> fail ( 'The "name" field was not found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'The "name" field was found.' );
}
2017-07-03 16:47:07 +01:00
// *** 6. assertFieldByName().
$this -> assertFieldByName ( 'name' );
$this -> assertFieldByName ( 'name' , NULL );
$this -> assertFieldByName ( 'name' , 'Test name' );
$this -> assertFieldByName ( 'description' );
$this -> assertFieldByName ( 'description' , '' );
$this -> assertFieldByName ( 'description' , NULL );
// Test that the assertion fails correctly if given the wrong name.
try {
$this -> assertFieldByName ( 'non-existing-name' );
$this -> fail ( 'The "non-existing-name" field was found.' );
}
2018-11-23 12:29:20 +00:00
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
2017-07-03 16:47:07 +01:00
$this -> pass ( 'The "non-existing-name" field was not found' );
}
// Test that the assertion fails correctly if given the wrong value.
try {
$this -> assertFieldByName ( 'name' , 'not the value' );
$this -> fail ( 'The "name" field with incorrect value was found.' );
}
2018-11-23 12:29:20 +00:00
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
2017-07-03 16:47:07 +01:00
$this -> pass ( 'assertFieldByName correctly failed. The "name" field with incorrect value was not found.' );
}
2018-11-23 12:29:20 +00:00
// Test that text areas can contain new lines.
$this -> assertFieldsByValue ( $this -> xpath ( " //textarea[@id = 'edit-test-textarea-with-newline'] " ), " Test text with \n newline " );
2017-07-03 16:47:07 +01:00
}
/**
2018-11-23 12:29:20 +00:00
* Tests legacy field asserts for options field type .
2017-07-03 16:47:07 +01:00
*/
2018-11-23 12:29:20 +00:00
public function testFieldAssertsForOptions () {
2017-07-03 16:47:07 +01:00
$this -> drupalGet ( 'test-field-xpath' );
// Option field type.
2017-04-13 15:53:35 +01:00
$this -> assertOptionByText ( 'options' , 'one' );
try {
$this -> assertOptionByText ( 'options' , 'four' );
$this -> fail ( 'The select option "four" was found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( $e -> getMessage ());
}
2017-07-03 16:47:07 +01:00
$this -> assertOption ( 'options' , 1 );
try {
$this -> assertOption ( 'options' , 4 );
$this -> fail ( 'The select option "4" was found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( $e -> getMessage ());
}
$this -> assertNoOption ( 'options' , 'non-existing' );
try {
$this -> assertNoOption ( 'options' , 'one' );
$this -> fail ( 'The select option "one" was not found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( $e -> getMessage ());
}
$this -> assertOptionSelected ( 'options' , 2 );
try {
$this -> assertOptionSelected ( 'options' , 4 );
$this -> fail ( 'The select option "4" was selected.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( $e -> getMessage ());
}
try {
$this -> assertOptionSelected ( 'options' , 1 );
$this -> fail ( 'The select option "1" was selected.' );
}
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> pass ( $e -> getMessage ());
}
2018-11-23 12:29:20 +00:00
// Test \Drupal\FunctionalTests\AssertLegacyTrait::getAllOptions.
$this -> drupalGet ( '/form-test/select' );
$this -> assertCount ( 6 , $this -> getAllOptions ( $this -> cssSelect ( 'select[name="opt_groups"]' )[ 0 ]));
}
/**
* Tests legacy field asserts for button field type .
*/
public function testFieldAssertsForButton () {
$this -> drupalGet ( 'test-field-xpath' );
2017-04-13 15:53:35 +01:00
$this -> assertFieldById ( 'edit-save' , NULL );
// Test that the assertion fails correctly if the field value is passed in
// rather than the id.
try {
$this -> assertFieldById ( 'Save' , NULL );
$this -> fail ( 'The field with id of "Save" was found.' );
}
2018-11-23 12:29:20 +00:00
catch ( \PHPUnit_Framework_ExpectationFailedException $e ) {
2017-04-13 15:53:35 +01:00
$this -> pass ( $e -> getMessage ());
}
$this -> assertNoFieldById ( 'Save' , NULL );
// Test that the assertion fails correctly if the id of an actual field is
// passed in.
try {
$this -> assertNoFieldById ( 'edit-save' , NULL );
$this -> fail ( 'The field with id of "edit-save" was not found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( $e -> getMessage ());
}
2017-07-03 16:47:07 +01:00
2018-11-23 12:29:20 +00:00
// Test that multiple fields with the same name are validated correctly.
$this -> assertFieldByName ( 'duplicate_button' , 'Duplicate button 1' );
$this -> assertFieldByName ( 'duplicate_button' , 'Duplicate button 2' );
$this -> assertNoFieldByName ( 'duplicate_button' , 'Rabbit' );
try {
$this -> assertNoFieldByName ( 'duplicate_button' , 'Duplicate button 2' );
$this -> fail ( 'The "duplicate_button" field with the value Duplicate button 2 was not found.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertNoFieldByName correctly failed. The "duplicate_button" field with the value Duplicate button 2 was found.' );
}
}
/**
* Tests legacy field asserts for checkbox field type .
*/
public function testFieldAssertsForCheckbox () {
$this -> drupalGet ( 'test-field-xpath' );
// Part 1 - Test by name.
2017-07-03 16:47:07 +01:00
// Test that checkboxes are found/not found correctly by name, when using
// TRUE or FALSE to match their 'checked' state.
$this -> assertFieldByName ( 'checkbox_enabled' , TRUE );
$this -> assertFieldByName ( 'checkbox_disabled' , FALSE );
$this -> assertNoFieldByName ( 'checkbox_enabled' , FALSE );
$this -> assertNoFieldByName ( 'checkbox_disabled' , TRUE );
// Test that checkboxes are found by name when using NULL to ignore the
// 'checked' state.
$this -> assertFieldByName ( 'checkbox_enabled' , NULL );
$this -> assertFieldByName ( 'checkbox_disabled' , NULL );
2018-11-23 12:29:20 +00:00
// Test that checkboxes are found by name when passing no second parameter.
$this -> assertFieldByName ( 'checkbox_enabled' );
$this -> assertFieldByName ( 'checkbox_disabled' );
// Test that we have legacy support.
$this -> assertFieldByName ( 'checkbox_enabled' , '1' );
$this -> assertFieldByName ( 'checkbox_disabled' , '' );
// Test that the assertion fails correctly when using NULL to ignore state.
try {
$this -> assertNoFieldByName ( 'checkbox_enabled' , NULL );
$this -> fail ( 'The "checkbox_enabled" field was not found by name, using NULL value.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertNoFieldByName failed correctly. The "checkbox_enabled" field was found using NULL value.' );
}
// Part 2 - Test by ID.
2017-07-03 16:47:07 +01:00
// Test that checkboxes are found/not found correctly by ID, when using
// TRUE or FALSE to match their 'checked' state.
$this -> assertFieldById ( 'edit-checkbox-enabled' , TRUE );
$this -> assertFieldById ( 'edit-checkbox-disabled' , FALSE );
$this -> assertNoFieldById ( 'edit-checkbox-enabled' , FALSE );
$this -> assertNoFieldById ( 'edit-checkbox-disabled' , TRUE );
2018-11-23 12:29:20 +00:00
// Test that checkboxes are found by ID, when using NULL to ignore the
2017-07-03 16:47:07 +01:00
// 'checked' state.
$this -> assertFieldById ( 'edit-checkbox-enabled' , NULL );
$this -> assertFieldById ( 'edit-checkbox-disabled' , NULL );
2018-11-23 12:29:20 +00:00
// Test that checkboxes are found by ID when passing no second parameter.
$this -> assertFieldById ( 'edit-checkbox-enabled' );
$this -> assertFieldById ( 'edit-checkbox-disabled' );
// Test that we have legacy support.
$this -> assertFieldById ( 'edit-checkbox-enabled' , '1' );
$this -> assertFieldById ( 'edit-checkbox-disabled' , '' );
2017-07-03 16:47:07 +01:00
// Test that the assertion fails correctly when using NULL to ignore state.
try {
$this -> assertNoFieldById ( 'edit-checkbox-disabled' , NULL );
$this -> fail ( 'The "edit-checkbox-disabled" field was not found by ID, using NULL value.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertNoFieldById failed correctly. The "edit-checkbox-disabled" field was found by ID using NULL value.' );
}
2018-11-23 12:29:20 +00:00
// Part 3 - Test the specific 'checked' assertions.
2017-07-03 16:47:07 +01:00
$this -> assertFieldChecked ( 'edit-checkbox-enabled' );
$this -> assertNoFieldChecked ( 'edit-checkbox-disabled' );
2018-11-23 12:29:20 +00:00
// Test that the assertion fails correctly with non-existent field id.
2017-07-03 16:47:07 +01:00
try {
$this -> assertNoFieldChecked ( 'incorrect_checkbox_id' );
$this -> fail ( 'The "incorrect_checkbox_id" field was found' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertNoFieldChecked correctly failed. The "incorrect_checkbox_id" field was not found.' );
}
// Test that the assertion fails correctly for a checkbox that is checked.
try {
$this -> assertNoFieldChecked ( 'edit-checkbox-enabled' );
$this -> fail ( 'The "edit-checkbox-enabled" field was not found in a checked state.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertNoFieldChecked correctly failed. The "edit-checkbox-enabled" field was found in a checked state.' );
}
// Test that the assertion fails correctly for a checkbox that is not
// checked.
try {
$this -> assertFieldChecked ( 'edit-checkbox-disabled' );
$this -> fail ( 'The "edit-checkbox-disabled" field was found and checked.' );
}
catch ( ExpectationException $e ) {
$this -> pass ( 'assertFieldChecked correctly failed. The "edit-checkbox-disabled" field was not found in a checked state.' );
}
2017-04-13 15:53:35 +01:00
}
/**
* Tests the :: cronRun () method .
*/
public function testCronRun () {
$last_cron_time = \Drupal :: state () -> get ( 'system.cron_last' );
$this -> cronRun ();
$this -> assertSession () -> statusCodeEquals ( 204 );
$next_cron_time = \Drupal :: state () -> get ( 'system.cron_last' );
$this -> assertGreaterThan ( $last_cron_time , $next_cron_time );
2016-10-06 15:16:20 -07:00
}
2017-02-02 16:28:38 -08:00
/**
* Tests the Drupal install done in \Drupal\Tests\BrowserTestBase :: setUp () .
*/
public function testInstall () {
$htaccess_filename = $this -> tempFilesDirectory . '/.htaccess' ;
$this -> assertTrue ( file_exists ( $htaccess_filename ), " $htaccess_filename exists " );
}
2018-11-23 12:29:20 +00:00
/**
* Tests the assumption that local time is in 'Australia/Sydney' .
*/
public function testLocalTimeZone () {
// The 'Australia/Sydney' time zone is set in core/tests/bootstrap.php
$this -> assertEquals ( 'Australia/Sydney' , date_default_timezone_get ());
// The 'Australia/Sydney' time zone is also set in
// FunctionalTestSetupTrait::initConfig().
$config_factory = $this -> container -> get ( 'config.factory' );
$value = $config_factory -> get ( 'system.date' ) -> get ( 'timezone.default' );
$this -> assertEquals ( 'Australia/Sydney' , $value );
}
/**
* Tests the :: checkForMetaRefresh () method .
*/
public function testCheckForMetaRefresh () {
// Disable following redirects in the client.
$this -> getSession () -> getDriver () -> getClient () -> followRedirects ( FALSE );
// Set the maximumMetaRefreshCount to zero to make sure the redirect doesn't
// happen when doing a drupalGet.
$this -> maximumMetaRefreshCount = 0 ;
$this -> drupalGet ( 'test-meta-refresh' );
$this -> assertNotEmpty ( $this -> cssSelect ( 'meta[http-equiv="refresh"]' ));
// Allow one redirect to happen.
$this -> maximumMetaRefreshCount = 1 ;
$this -> checkForMetaRefresh ();
// Check that we are now on the test page.
$this -> assertSession () -> pageTextContains ( 'Test page text.' );
}
public function testGetDefaultDriveInstance () {
putenv ( 'MINK_DRIVER_ARGS=' . json_encode ([ NULL , [ 'key1' => [ 'key2' => [ 'key3' => 3 , 'key3.1' => 3.1 ]]]]));
$this -> getDefaultDriverInstance ();
$this -> assertEquals ([ NULL , [ 'key1' => [ 'key2' => [ 'key3' => 3 , 'key3.1' => 3.1 ]]]], $this -> minkDefaultDriverArgs );
}
/**
* Ensures we can 't access modules we shouldn' t be able to after install .
*/
public function testProfileModules () {
$this -> setExpectedException ( \InvalidArgumentException :: class , 'The module demo_umami_content does not exist.' );
$this -> assertFileExists ( 'core/profiles/demo_umami/modules/demo_umami_content/demo_umami_content.info.yml' );
\Drupal :: service ( 'extension.list.module' ) -> getPathname ( 'demo_umami_content' );
}
2015-08-17 17:00:26 -07:00
}