Skip to content
Snippets Groups Projects
Verified Commit 13f6f9d0 authored by Dave Long's avatar Dave Long
Browse files

Issue #3187314 by Pooja Ganjage, nlisgo, mondrake, longwave: Move...

Issue #3187314 by Pooja Ganjage, nlisgo, mondrake, longwave: Move BrowserTestBaseTest tests checking WebAssert methods to WebAssertTest
parent c5b3bf7b
Branches
Tags
42 merge requests!54479.5.x SF update,!5014Issue #3071143: Table Render Array Example Is Incorrect,!4868Issue #1428520: Improve menu parent link selection,!3878Removed unused condition head title for views,!38582585169-10.1.x,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3668Resolve #3347842 "Deprecate the trusted",!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3546refactored dialog.pcss file,!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3502Issue #3335308: Confusing behavior with FormState::setFormState and FormState::setMethod,!3452Issue #3332701: Refactor Claro's tablesort-indicator stylesheet,!3451Issue #2410579: Allows setting the current language programmatically.,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3147Issue #3328457: Replace most substr($a, $i) where $i is negative with str_ends_with(),!3146Issue #3328456: Replace substr($a, 0, $i) with str_starts_with(),!3133core/modules/system/css/components/hidden.module.css,!31312878513-10.1.x,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2614Issue #2981326: Replace non-test usages of \Drupal::logger() with IoC injection,!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,!1255Issue #3238922: Refactor (if feasible) uses of the jQuery serialize function to use vanillaJS,!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,!877Issue #2708101: Default value for link text is not saved,!844Resolve #3036010 "Updaters",!673Issue #3214208: FinishResponseSubscriber could create duplicate headers,!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
...@@ -5,7 +5,6 @@ ...@@ -5,7 +5,6 @@
use Behat\Mink\Exception\ElementNotFoundException; use Behat\Mink\Exception\ElementNotFoundException;
use Behat\Mink\Exception\ExpectationException; use Behat\Mink\Exception\ExpectationException;
use Drupal\Component\Serialization\Json; use Drupal\Component\Serialization\Json;
use Drupal\Component\Utility\Html;
use Drupal\Core\Url; use Drupal\Core\Url;
use Drupal\Tests\BrowserTestBase; use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\StreamCapturer; use Drupal\Tests\StreamCapturer;
...@@ -193,81 +192,6 @@ public function testError() { ...@@ -193,81 +192,6 @@ public function testError() {
$this->drupalGet('test-error'); $this->drupalGet('test-error');
} }
/**
* 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');
}
/**
* 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->expectException(ExpectationException::class);
$this->expectExceptionMessage('Link with label foo|bar not 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 responseHeaderDoesNotExist() functionality.
*
* @see \Drupal\Tests\WebAssert::responseHeaderDoesNotExist()
*/
public function testResponseHeaderDoesNotExist() {
$this->drupalGet('test-pipe-char');
$this->assertSession()->responseHeaderDoesNotExist('Foo-Bar');
}
/**
* Tests linkNotExistsExact() functionality fail.
*
* @see \Drupal\Tests\WebAssert::linkNotExistsExact()
*/
public function testInvalidLinkNotExistsExact() {
$this->drupalGet('test-pipe-char');
$this->expectException(ExpectationException::class);
$this->expectExceptionMessage('Link with label foo|bar|baz found');
$this->assertSession()->linkNotExistsExact('foo|bar|baz');
}
/**
* Tests legacy text asserts.
*/
public function testTextAsserts() {
$this->drupalGet('test-encoded');
$dangerous = 'Bad html <script>alert(123);</script>';
$sanitized = Html::escape($dangerous);
$this->assertSession()->responseNotContains($dangerous);
$this->assertSession()->responseContains($sanitized);
}
/** /**
* Tests legacy field asserts which use xpath directly. * Tests legacy field asserts which use xpath directly.
*/ */
...@@ -410,41 +334,6 @@ public function testFieldAssertsForTextfields() { ...@@ -410,41 +334,6 @@ public function testFieldAssertsForTextfields() {
$this->assertSession()->fieldValueEquals('edit-test-textarea-with-newline', "Test text with\nnewline"); $this->assertSession()->fieldValueEquals('edit-test-textarea-with-newline', "Test text with\nnewline");
} }
/**
* Tests legacy field asserts for button field type.
*/
public function testFieldAssertsForButton() {
$this->drupalGet('test-field-xpath');
// Verify if the test passes with button ID.
$this->assertSession()->buttonExists('edit-save');
// Verify if the test passes with button Value.
$this->assertSession()->buttonExists('Save');
// Verify if the test passes with button Name.
$this->assertSession()->buttonExists('op');
// Verify if the test passes with button ID.
$this->assertSession()->buttonNotExists('i-do-not-exist');
// Verify if the test passes with button Value.
$this->assertSession()->buttonNotExists('I do not exist');
// Verify if the test passes with button Name.
$this->assertSession()->buttonNotExists('no');
// Test that multiple fields with the same name are validated correctly.
$this->assertSession()->buttonExists('duplicate_button');
$this->assertSession()->buttonExists('Duplicate button 1');
$this->assertSession()->buttonExists('Duplicate button 2');
$this->assertSession()->buttonNotExists('Rabbit');
try {
$this->assertSession()->buttonNotExists('Duplicate button 2');
$this->fail('The "duplicate_button" field with the value Duplicate button 2 was not found.');
}
catch (ExpectationException $e) {
// Expected exception; just continue testing.
}
}
/** /**
* Tests legacy field asserts for checkbox field type. * Tests legacy field asserts for checkbox field type.
*/ */
...@@ -631,48 +520,6 @@ public function testHtkey() { ...@@ -631,48 +520,6 @@ public function testHtkey() {
$this->assertSession()->statusCodeEquals(403); $this->assertSession()->statusCodeEquals(403);
} }
/**
* Tests pageContainsNoDuplicateId() functionality.
*
* @see \Drupal\Tests\WebAssert::pageContainsNoDuplicateId()
*/
public function testPageContainsNoDuplicateId() {
$assert_session = $this->assertSession();
$this->drupalGet(Url::fromRoute('test_page_test.page_without_duplicate_ids'));
$assert_session->pageContainsNoDuplicateId();
$this->drupalGet(Url::fromRoute('test_page_test.page_with_duplicate_ids'));
$this->expectException(ExpectationException::class);
$this->expectExceptionMessage('The page contains a duplicate HTML ID "page-element".');
$assert_session->pageContainsNoDuplicateId();
}
/**
* Tests assertEscaped() and assertUnescaped().
*
* @see \Drupal\Tests\WebAssert::assertNoEscaped()
* @see \Drupal\Tests\WebAssert::assertEscaped()
*/
public function testEscapingAssertions() {
$assert = $this->assertSession();
$this->drupalGet('test-escaped-characters');
$assert->assertNoEscaped('<div class="escaped">');
$assert->responseContains('<div class="escaped">');
$assert->assertEscaped('Escaped: <"\'&>');
$this->drupalGet('test-escaped-script');
$assert->assertNoEscaped('<div class="escaped">');
$assert->responseContains('<div class="escaped">');
$assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>");
$this->drupalGet('test-unescaped-script');
$assert->assertNoEscaped('<div class="unescaped">');
$assert->responseContains('<div class="unescaped">');
$assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
$assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
}
/** /**
* Tests that deprecation headers do not get duplicated. * Tests that deprecation headers do not get duplicated.
* *
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace Drupal\FunctionalTests; namespace Drupal\FunctionalTests;
use Behat\Mink\Exception\ExpectationException; use Behat\Mink\Exception\ExpectationException;
use Drupal\Component\Utility\Html;
use Drupal\Core\Url; use Drupal\Core\Url;
use Drupal\Tests\BrowserTestBase; use Drupal\Tests\BrowserTestBase;
use Behat\Mink\Exception\ResponseTextException; use Behat\Mink\Exception\ResponseTextException;
...@@ -133,4 +134,152 @@ public function testAddressNotEqualsException(): void { ...@@ -133,4 +134,152 @@ public function testAddressNotEqualsException(): void {
$this->assertSession()->addressNotEquals('test-page?a=b&c=d'); $this->assertSession()->addressNotEquals('test-page?a=b&c=d');
} }
/**
* Tests linkExists() with pipe character (|) in locator.
*
* @covers ::linkExists
*/
public function testPipeCharInLocator() {
$this->drupalGet('test-pipe-char');
$this->assertSession()->linkExists('foo|bar|baz');
}
/**
* Tests linkExistsExact() functionality.
*
* @covers ::linkExistsExact
*/
public function testLinkExistsExact() {
$this->drupalGet('test-pipe-char');
$this->assertSession()->linkExistsExact('foo|bar|baz');
}
/**
* Tests linkExistsExact() functionality fail.
*
* @covers ::linkExistsExact
*/
public function testInvalidLinkExistsExact() {
$this->drupalGet('test-pipe-char');
$this->expectException(ExpectationException::class);
$this->expectExceptionMessage('Link with label foo|bar not found');
$this->assertSession()->linkExistsExact('foo|bar');
}
/**
* Tests linkNotExistsExact() functionality.
*
* @covers ::linkNotExistsExact
*/
public function testLinkNotExistsExact() {
$this->drupalGet('test-pipe-char');
$this->assertSession()->linkNotExistsExact('foo|bar');
}
/**
* Tests linkNotExistsExact() functionality fail.
*
* @covers ::linkNotExistsExact
*/
public function testInvalidLinkNotExistsExact() {
$this->drupalGet('test-pipe-char');
$this->expectException(ExpectationException::class);
$this->expectExceptionMessage('Link with label foo|bar|baz found');
$this->assertSession()->linkNotExistsExact('foo|bar|baz');
}
/**
* Tests legacy text asserts.
*
* @covers ::responseContains
* @covers ::responseNotContains
*/
public function testTextAsserts() {
$this->drupalGet('test-encoded');
$dangerous = 'Bad html <script>alert(123);</script>';
$sanitized = Html::escape($dangerous);
$this->assertSession()->responseNotContains($dangerous);
$this->assertSession()->responseContains($sanitized);
}
/**
* Tests legacy field asserts for button field type.
*
* @covers ::buttonExists
* @covers ::buttonNotExists
*/
public function testFieldAssertsForButton() {
$this->drupalGet('test-field-xpath');
// Verify if the test passes with button ID.
$this->assertSession()->buttonExists('edit-save');
// Verify if the test passes with button Value.
$this->assertSession()->buttonExists('Save');
// Verify if the test passes with button Name.
$this->assertSession()->buttonExists('op');
// Verify if the test passes with button ID.
$this->assertSession()->buttonNotExists('i-do-not-exist');
// Verify if the test passes with button Value.
$this->assertSession()->buttonNotExists('I do not exist');
// Verify if the test passes with button Name.
$this->assertSession()->buttonNotExists('no');
// Test that multiple fields with the same name are validated correctly.
$this->assertSession()->buttonExists('duplicate_button');
$this->assertSession()->buttonExists('Duplicate button 1');
$this->assertSession()->buttonExists('Duplicate button 2');
$this->assertSession()->buttonNotExists('Rabbit');
try {
$this->assertSession()->buttonNotExists('Duplicate button 2');
$this->fail('The "duplicate_button" field with the value Duplicate button 2 was not found.');
}
catch (ExpectationException $e) {
// Expected exception; just continue testing.
}
}
/**
* Tests pageContainsNoDuplicateId() functionality.
*
* @covers ::pageContainsNoDuplicateId
*/
public function testPageContainsNoDuplicateId() {
$assert_session = $this->assertSession();
$this->drupalGet(Url::fromRoute('test_page_test.page_without_duplicate_ids'));
$assert_session->pageContainsNoDuplicateId();
$this->drupalGet(Url::fromRoute('test_page_test.page_with_duplicate_ids'));
$this->expectException(ExpectationException::class);
$this->expectExceptionMessage('The page contains a duplicate HTML ID "page-element".');
$assert_session->pageContainsNoDuplicateId();
}
/**
* Tests assertEscaped() and assertUnescaped().
*
* @covers ::assertNoEscaped
* @covers ::assertEscaped
*/
public function testEscapingAssertions() {
$assert = $this->assertSession();
$this->drupalGet('test-escaped-characters');
$assert->assertNoEscaped('<div class="escaped">');
$assert->responseContains('<div class="escaped">');
$assert->assertEscaped('Escaped: <"\'&>');
$this->drupalGet('test-escaped-script');
$assert->assertNoEscaped('<div class="escaped">');
$assert->responseContains('<div class="escaped">');
$assert->assertEscaped("<script>alert('XSS');alert(\"XSS\");</script>");
$this->drupalGet('test-unescaped-script');
$assert->assertNoEscaped('<div class="unescaped">');
$assert->responseContains('<div class="unescaped">');
$assert->responseContains("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
$assert->assertNoEscaped("<script>alert('Marked safe');alert(\"Marked safe\");</script>");
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment