mirror of
https://github.com/silverstripe/silverstripe-behat-extension
synced 2024-10-22 17:05:32 +02:00
API phpunit9 support
This commit is contained in:
parent
ba2e93131e
commit
9ee6858f91
@ -21,8 +21,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.6",
|
"php": ">=7.3",
|
||||||
"sminnee/phpunit": "^5.7",
|
"phpunit/phpunit": "^9.5",
|
||||||
"squizlabs/php_codesniffer": "^3",
|
"squizlabs/php_codesniffer": "^3",
|
||||||
"behat/behat": "^3.2",
|
"behat/behat": "^3.2",
|
||||||
"behat/mink": "^1.7",
|
"behat/mink": "^1.7",
|
||||||
@ -30,7 +30,7 @@
|
|||||||
"silverstripe/mink-facebook-web-driver": "^1",
|
"silverstripe/mink-facebook-web-driver": "^1",
|
||||||
"symfony/dom-crawler": "^3 || ^4",
|
"symfony/dom-crawler": "^3 || ^4",
|
||||||
"silverstripe/testsession": "^2.2",
|
"silverstripe/testsession": "^2.2",
|
||||||
"silverstripe/framework": "^4",
|
"silverstripe/framework": "^4.10",
|
||||||
"symfony/finder": "^3.2 || ^4"
|
"symfony/finder": "^3.2 || ^4"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -246,7 +246,7 @@ not exactly one record found in the relation, and hence fail that step for Behat
|
|||||||
public function thereShouldBeAnAbuseReportForWithReason($id, $reason)
|
public function thereShouldBeAnAbuseReportForWithReason($id, $reason)
|
||||||
{
|
{
|
||||||
$page = $this->fixtureFactory->get('Page', $id);
|
$page = $this->fixtureFactory->get('Page', $id);
|
||||||
assertEquals(1, $page->PageAbuseReports()->filter('Reason', $reason)->Count());
|
Assert::assertEquals(1, $page->PageAbuseReports()->filter('Reason', $reason)->Count());
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<phpunit bootstrap="vendor/silverstripe/framework/tests/bootstrap.php" colors="true">
|
<phpunit bootstrap="vendor/silverstripe/framework/tests/bootstrap.php" colors="true">
|
||||||
|
<testsuites>
|
||||||
<testsuite name="Default">
|
<testsuite name="Default">
|
||||||
<directory>tests/php</directory>
|
<directory>tests/php</directory>
|
||||||
</testsuite>
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
@ -17,6 +17,7 @@ use Facebook\WebDriver\WebDriver;
|
|||||||
use Facebook\WebDriver\WebDriverAlert;
|
use Facebook\WebDriver\WebDriverAlert;
|
||||||
use Facebook\WebDriver\WebDriverExpectedCondition;
|
use Facebook\WebDriver\WebDriverExpectedCondition;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
|
use PHPUnit\Framework\Assert;
|
||||||
use SilverStripe\Assets\File;
|
use SilverStripe\Assets\File;
|
||||||
use SilverStripe\Assets\Filesystem;
|
use SilverStripe\Assets\Filesystem;
|
||||||
use SilverStripe\BehatExtension\Utility\StepHelper;
|
use SilverStripe\BehatExtension\Utility\StepHelper;
|
||||||
@ -366,7 +367,7 @@ JS;
|
|||||||
public function stepPageCantBeFound()
|
public function stepPageCantBeFound()
|
||||||
{
|
{
|
||||||
$page = $this->getSession()->getPage();
|
$page = $this->getSession()->getPage();
|
||||||
assertTrue(
|
Assert::assertTrue(
|
||||||
// Content from ErrorPage default record
|
// Content from ErrorPage default record
|
||||||
$page->hasContent('Page not found')
|
$page->hasContent('Page not found')
|
||||||
// Generic ModelAsController message
|
// Generic ModelAsController message
|
||||||
@ -425,9 +426,9 @@ JS;
|
|||||||
{
|
{
|
||||||
$button = $this->findNamedButton($text);
|
$button = $this->findNamedButton($text);
|
||||||
if (trim($negative)) {
|
if (trim($negative)) {
|
||||||
assertNull($button, sprintf('%s button found', $text));
|
Assert::assertNull($button, sprintf('%s button found', $text));
|
||||||
} else {
|
} else {
|
||||||
assertNotNull($button, sprintf('%s button not found', $text));
|
Assert::assertNotNull($button, sprintf('%s button not found', $text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,7 +439,7 @@ JS;
|
|||||||
public function stepIPressTheButton($text)
|
public function stepIPressTheButton($text)
|
||||||
{
|
{
|
||||||
$button = $this->findNamedButton($text);
|
$button = $this->findNamedButton($text);
|
||||||
assertNotNull($button, "{$text} button not found");
|
Assert::assertNotNull($button, "{$text} button not found");
|
||||||
$button->click();
|
$button->click();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -456,7 +457,7 @@ JS;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assertNotNull($button, "{$text} button not found");
|
Assert::assertNotNull($button, "{$text} button not found");
|
||||||
$button->click();
|
$button->click();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -495,7 +496,7 @@ JS;
|
|||||||
{
|
{
|
||||||
$page = $this->getMainContext()->getSession()->getPage();
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
$element = $page->find('css', $selector);
|
$element = $page->find('css', $selector);
|
||||||
assertNotNull($element, sprintf('Element %s not found', $selector));
|
Assert::assertNotNull($element, sprintf('Element %s not found', $selector));
|
||||||
$element->click();
|
$element->click();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,9 +526,9 @@ JS;
|
|||||||
);
|
);
|
||||||
$page = $this->getSession()->getPage();
|
$page = $this->getSession()->getPage();
|
||||||
$parentElement = $page->find('css', $selector);
|
$parentElement = $page->find('css', $selector);
|
||||||
assertNotNull($parentElement, sprintf('"%s" element not found', $selector));
|
Assert::assertNotNull($parentElement, sprintf('"%s" element not found', $selector));
|
||||||
$element = $parentElement->find('xpath', sprintf('//*[count(*)=0 and contains(.,"%s")]', $text));
|
$element = $parentElement->find('xpath', sprintf('//*[count(*)=0 and contains(.,"%s")]', $text));
|
||||||
assertNotNull($element, sprintf('"%s" not found', $text));
|
Assert::assertNotNull($element, sprintf('"%s" not found', $text));
|
||||||
$clickTypeFn = $clickTypeMap[$clickType];
|
$clickTypeFn = $clickTypeMap[$clickType];
|
||||||
$element->$clickTypeFn();
|
$element->$clickTypeFn();
|
||||||
}
|
}
|
||||||
@ -569,7 +570,7 @@ JS;
|
|||||||
public function iSeeTheDialogText($expected)
|
public function iSeeTheDialogText($expected)
|
||||||
{
|
{
|
||||||
$text = $this->getExpectedAlert()->getText();
|
$text = $this->getExpectedAlert()->getText();
|
||||||
assertContains($expected, $text);
|
Assert::assertStringContainsString($expected, $text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -841,13 +842,13 @@ JS;
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
assertNotNull($element, sprintf("Element '%s' not found", $name));
|
Assert::assertNotNull($element, sprintf("Element '%s' not found", $name));
|
||||||
|
|
||||||
$disabledAttribute = $element->getAttribute('disabled');
|
$disabledAttribute = $element->getAttribute('disabled');
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
assertNull($disabledAttribute, sprintf("Failed asserting element '%s' is not disabled", $name));
|
Assert::assertNull($disabledAttribute, sprintf("Failed asserting element '%s' is not disabled", $name));
|
||||||
} else {
|
} else {
|
||||||
assertNotNull($disabledAttribute, sprintf("Failed asserting element '%s' is disabled", $name));
|
Assert::assertNotNull($disabledAttribute, sprintf("Failed asserting element '%s' is disabled", $name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -864,11 +865,11 @@ JS;
|
|||||||
{
|
{
|
||||||
$page = $this->getSession()->getPage();
|
$page = $this->getSession()->getPage();
|
||||||
$fieldElement = $page->findField($field);
|
$fieldElement = $page->findField($field);
|
||||||
assertNotNull($fieldElement, sprintf("Field '%s' not found", $field));
|
Assert::assertNotNull($fieldElement, sprintf("Field '%s' not found", $field));
|
||||||
|
|
||||||
$disabledAttribute = $fieldElement->getAttribute('disabled');
|
$disabledAttribute = $fieldElement->getAttribute('disabled');
|
||||||
|
|
||||||
assertNull($disabledAttribute, sprintf("Failed asserting field '%s' is enabled", $field));
|
Assert::assertNull($disabledAttribute, sprintf("Failed asserting field '%s' is enabled", $field));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -887,7 +888,7 @@ JS;
|
|||||||
{
|
{
|
||||||
$context = $this->getMainContext();
|
$context = $this->getMainContext();
|
||||||
$regionObj = $context->getRegionObj($region);
|
$regionObj = $context->getRegionObj($region);
|
||||||
assertNotNull($regionObj);
|
Assert::assertNotNull($regionObj);
|
||||||
|
|
||||||
$linkObj = $regionObj->findLink($link);
|
$linkObj = $regionObj->findLink($link);
|
||||||
if (empty($linkObj)) {
|
if (empty($linkObj)) {
|
||||||
@ -913,7 +914,7 @@ JS;
|
|||||||
{
|
{
|
||||||
$context = $this->getMainContext();
|
$context = $this->getMainContext();
|
||||||
$regionObj = $context->getRegionObj($region);
|
$regionObj = $context->getRegionObj($region);
|
||||||
assertNotNull($regionObj, "Region Object is null");
|
Assert::assertNotNull($regionObj, "Region Object is null");
|
||||||
|
|
||||||
$fieldObj = $regionObj->findField($field);
|
$fieldObj = $regionObj->findField($field);
|
||||||
if (empty($fieldObj)) {
|
if (empty($fieldObj)) {
|
||||||
@ -943,7 +944,7 @@ JS;
|
|||||||
{
|
{
|
||||||
$context = $this->getMainContext();
|
$context = $this->getMainContext();
|
||||||
$regionObj = $context->getRegionObj($region);
|
$regionObj = $context->getRegionObj($region);
|
||||||
assertNotNull($regionObj);
|
Assert::assertNotNull($regionObj);
|
||||||
|
|
||||||
$actual = $regionObj->getText();
|
$actual = $regionObj->getText();
|
||||||
$actual = preg_replace('/\s+/u', ' ', $actual);
|
$actual = preg_replace('/\s+/u', ' ', $actual);
|
||||||
@ -987,7 +988,7 @@ JS;
|
|||||||
'radio',
|
'radio',
|
||||||
$this->getMainContext()->getXpathEscaper()->escapeLiteral($radioLabel)
|
$this->getMainContext()->getXpathEscaper()->escapeLiteral($radioLabel)
|
||||||
]);
|
]);
|
||||||
assertNotNull($radioButton);
|
Assert::assertNotNull($radioButton);
|
||||||
$session->getDriver()->click($radioButton->getXPath());
|
$session->getDriver()->click($radioButton->getXPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1001,7 +1002,7 @@ JS;
|
|||||||
$table = $this->getTable($selector);
|
$table = $this->getTable($selector);
|
||||||
|
|
||||||
$element = $table->find('named', array('content', "'$text'"));
|
$element = $table->find('named', array('content', "'$text'"));
|
||||||
assertNotNull($element, sprintf('Element containing `%s` not found in `%s` table', $text, $selector));
|
Assert::assertNotNull($element, sprintf('Element containing `%s` not found in `%s` table', $text, $selector));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1014,7 +1015,7 @@ JS;
|
|||||||
$table = $this->getTable($selector);
|
$table = $this->getTable($selector);
|
||||||
|
|
||||||
$element = $table->find('named', array('content', "'$text'"));
|
$element = $table->find('named', array('content', "'$text'"));
|
||||||
assertNull($element, sprintf('Element containing `%s` not found in `%s` table', $text, $selector));
|
Assert::assertNull($element, sprintf('Element containing `%s` not found in `%s` table', $text, $selector));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1027,7 +1028,7 @@ JS;
|
|||||||
$table = $this->getTable($selector);
|
$table = $this->getTable($selector);
|
||||||
|
|
||||||
$element = $table->find('xpath', sprintf('//*[count(*)=0 and contains(.,"%s")]', $text));
|
$element = $table->find('xpath', sprintf('//*[count(*)=0 and contains(.,"%s")]', $text));
|
||||||
assertNotNull($element, sprintf('Element containing `%s` not found', $text));
|
Assert::assertNotNull($element, sprintf('Element containing `%s` not found', $text));
|
||||||
$element->click();
|
$element->click();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1065,7 +1066,7 @@ JS;
|
|||||||
// Some tables don't have a visible title, so look for a fieldset with data-name instead
|
// Some tables don't have a visible title, so look for a fieldset with data-name instead
|
||||||
$candidates += $page->findAll('xpath', "//fieldset[@data-name=$selector]//table");
|
$candidates += $page->findAll('xpath', "//fieldset[@data-name=$selector]//table");
|
||||||
|
|
||||||
assertTrue((bool)$candidates, 'Could not find any table elements');
|
Assert::assertTrue((bool)$candidates, 'Could not find any table elements');
|
||||||
|
|
||||||
$table = null;
|
$table = null;
|
||||||
/** @var NodeElement $candidate */
|
/** @var NodeElement $candidate */
|
||||||
@ -1075,7 +1076,7 @@ JS;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
assertTrue((bool)$table, 'Found table elements, but none are visible');
|
Assert::assertTrue((bool)$table, 'Found table elements, but none are visible');
|
||||||
|
|
||||||
return $table;
|
return $table;
|
||||||
}
|
}
|
||||||
@ -1092,19 +1093,19 @@ JS;
|
|||||||
public function theTextBeforeAfter($textBefore, $order, $textAfter, $element)
|
public function theTextBeforeAfter($textBefore, $order, $textAfter, $element)
|
||||||
{
|
{
|
||||||
$ele = $this->getSession()->getPage()->find('css', $element);
|
$ele = $this->getSession()->getPage()->find('css', $element);
|
||||||
assertNotNull($ele, sprintf('%s not found', $element));
|
Assert::assertNotNull($ele, sprintf('%s not found', $element));
|
||||||
|
|
||||||
// Check both of the texts exist in the element
|
// Check both of the texts exist in the element
|
||||||
$text = $ele->getText();
|
$text = $ele->getText();
|
||||||
assertTrue(strpos($text, $textBefore) !== 'FALSE', sprintf('%s not found in the element %s', $textBefore, $element));
|
Assert::assertTrue(strpos($text, $textBefore) !== 'FALSE', sprintf('%s not found in the element %s', $textBefore, $element));
|
||||||
assertTrue(strpos($text, $textAfter) !== 'FALSE', sprintf('%s not found in the element %s', $textAfter, $element));
|
Assert::assertTrue(strpos($text, $textAfter) !== 'FALSE', sprintf('%s not found in the element %s', $textAfter, $element));
|
||||||
|
|
||||||
/// Use strpos to get the position of the first occurrence of the two texts (case-sensitive)
|
/// Use strpos to get the position of the first occurrence of the two texts (case-sensitive)
|
||||||
// and compare them with the given order (before or after)
|
// and compare them with the given order (before or after)
|
||||||
if ($order === 'before') {
|
if ($order === 'before') {
|
||||||
assertTrue(strpos($text, $textBefore) < strpos($text, $textAfter));
|
Assert::assertTrue(strpos($text, $textBefore) < strpos($text, $textAfter));
|
||||||
} else {
|
} else {
|
||||||
assertTrue(strpos($text, $textBefore) > strpos($text, $textAfter));
|
Assert::assertTrue(strpos($text, $textBefore) > strpos($text, $textAfter));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1213,7 +1214,7 @@ JS;
|
|||||||
{
|
{
|
||||||
$page = $this->getSession()->getPage();
|
$page = $this->getSession()->getPage();
|
||||||
$el = $page->find('named', array($type, "'$locator'"));
|
$el = $page->find('named', array($type, "'$locator'"));
|
||||||
assertNotNull($el, sprintf('%s element not found', $locator));
|
Assert::assertNotNull($el, sprintf('%s element not found', $locator));
|
||||||
|
|
||||||
$id = $el->getAttribute('id');
|
$id = $el->getAttribute('id');
|
||||||
if (empty($id)) {
|
if (empty($id)) {
|
||||||
@ -1236,7 +1237,7 @@ JS;
|
|||||||
public function iScrollToElement($locator)
|
public function iScrollToElement($locator)
|
||||||
{
|
{
|
||||||
$el = $this->getSession()->getPage()->find('css', $locator);
|
$el = $this->getSession()->getPage()->find('css', $locator);
|
||||||
assertNotNull($el, sprintf('The element "%s" is not found', $locator));
|
Assert::assertNotNull($el, sprintf('The element "%s" is not found', $locator));
|
||||||
|
|
||||||
$id = $el->getAttribute('id');
|
$id = $el->getAttribute('id');
|
||||||
if (empty($id)) {
|
if (empty($id)) {
|
||||||
@ -1305,7 +1306,7 @@ JS;
|
|||||||
return document.querySelector("$sel");
|
return document.querySelector("$sel");
|
||||||
JS;
|
JS;
|
||||||
$element = $this->getSession()->evaluateScript($js);
|
$element = $this->getSession()->evaluateScript($js);
|
||||||
assertNotNull($element, sprintf('Element %s not found', $selector));
|
Assert::assertNotNull($element, sprintf('Element %s not found', $selector));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,6 +6,7 @@ use Behat\Behat\Context\Context;
|
|||||||
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
|
||||||
use Behat\Gherkin\Node\TableNode;
|
use Behat\Gherkin\Node\TableNode;
|
||||||
use Behat\Mink\Session;
|
use Behat\Mink\Session;
|
||||||
|
use PHPUnit\Framework\Assert;
|
||||||
use SilverStripe\BehatExtension\Utility\TestMailer;
|
use SilverStripe\BehatExtension\Utility\TestMailer;
|
||||||
use SilverStripe\Control\Email\Email;
|
use SilverStripe\Control\Email\Email;
|
||||||
use SilverStripe\Control\Email\Mailer;
|
use SilverStripe\Control\Email\Mailer;
|
||||||
@ -65,9 +66,9 @@ class EmailContext implements Context
|
|||||||
$from = ($direction == 'from') ? $email : null;
|
$from = ($direction == 'from') ? $email : null;
|
||||||
$match = $this->mailer->findEmail($to, $from);
|
$match = $this->mailer->findEmail($to, $from);
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
assertNull($match);
|
Assert::assertNull($match);
|
||||||
} else {
|
} else {
|
||||||
assertNotNull($match);
|
Assert::assertNotNull($match);
|
||||||
}
|
}
|
||||||
$this->lastMatchedEmail = $match;
|
$this->lastMatchedEmail = $match;
|
||||||
}
|
}
|
||||||
@ -89,7 +90,7 @@ class EmailContext implements Context
|
|||||||
return $email->Subject;
|
return $email->Subject;
|
||||||
}, $allMails)) . '"' : null;
|
}, $allMails)) . '"' : null;
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
assertNull($match);
|
Assert::assertNull($match);
|
||||||
} else {
|
} else {
|
||||||
$msg = sprintf(
|
$msg = sprintf(
|
||||||
'Could not find email %s "%s" titled "%s".',
|
'Could not find email %s "%s" titled "%s".',
|
||||||
@ -100,7 +101,7 @@ class EmailContext implements Context
|
|||||||
if ($allTitles) {
|
if ($allTitles) {
|
||||||
$msg .= ' Existing emails: ' . $allTitles;
|
$msg .= ' Existing emails: ' . $allTitles;
|
||||||
}
|
}
|
||||||
assertNotNull($match, $msg);
|
Assert::assertNotNull($match, $msg);
|
||||||
}
|
}
|
||||||
$this->lastMatchedEmail = $match;
|
$this->lastMatchedEmail = $match;
|
||||||
}
|
}
|
||||||
@ -129,9 +130,9 @@ class EmailContext implements Context
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
assertNotContains($content, $emailContent);
|
Assert::assertNotContains($content, $emailContent);
|
||||||
} else {
|
} else {
|
||||||
assertContains($content, $emailContent);
|
Assert::assertContains($content, $emailContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -155,7 +156,7 @@ class EmailContext implements Context
|
|||||||
$emailPlainText = strip_tags($emailContent);
|
$emailPlainText = strip_tags($emailContent);
|
||||||
$emailPlainText = preg_replace("/\h+/", " ", $emailPlainText);
|
$emailPlainText = preg_replace("/\h+/", " ", $emailPlainText);
|
||||||
|
|
||||||
assertContains($content, $emailPlainText);
|
Assert::assertContains($content, $emailPlainText);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -169,13 +170,13 @@ class EmailContext implements Context
|
|||||||
$to = ($direction == 'to') ? $email : null;
|
$to = ($direction == 'to') ? $email : null;
|
||||||
$from = ($direction == 'from') ? $email : null;
|
$from = ($direction == 'from') ? $email : null;
|
||||||
$match = $this->mailer->findEmail($to, $from);
|
$match = $this->mailer->findEmail($to, $from);
|
||||||
assertNotNull($match);
|
Assert::assertNotNull($match);
|
||||||
|
|
||||||
$crawler = new Crawler($match->Content);
|
$crawler = new Crawler($match->Content);
|
||||||
$linkEl = $crawler->selectLink($linkSelector);
|
$linkEl = $crawler->selectLink($linkSelector);
|
||||||
assertNotNull($linkEl);
|
Assert::assertNotNull($linkEl);
|
||||||
$link = $linkEl->attr('href');
|
$link = $linkEl->attr('href');
|
||||||
assertNotNull($link);
|
Assert::assertNotNull($link);
|
||||||
|
|
||||||
$this->getMainContext()->visit($link);
|
$this->getMainContext()->visit($link);
|
||||||
}
|
}
|
||||||
@ -192,13 +193,13 @@ class EmailContext implements Context
|
|||||||
$to = ($direction == 'to') ? $email : null;
|
$to = ($direction == 'to') ? $email : null;
|
||||||
$from = ($direction == 'from') ? $email : null;
|
$from = ($direction == 'from') ? $email : null;
|
||||||
$match = $this->mailer->findEmail($to, $from, $title);
|
$match = $this->mailer->findEmail($to, $from, $title);
|
||||||
assertNotNull($match);
|
Assert::assertNotNull($match);
|
||||||
|
|
||||||
$crawler = new Crawler($match->Content);
|
$crawler = new Crawler($match->Content);
|
||||||
$linkEl = $crawler->selectLink($linkSelector);
|
$linkEl = $crawler->selectLink($linkSelector);
|
||||||
assertNotNull($linkEl);
|
Assert::assertNotNull($linkEl);
|
||||||
$link = $linkEl->attr('href');
|
$link = $linkEl->attr('href');
|
||||||
assertNotNull($link);
|
Assert::assertNotNull($link);
|
||||||
$this->getMainContext()->visit($link);
|
$this->getMainContext()->visit($link);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,9 +219,9 @@ class EmailContext implements Context
|
|||||||
$match = $this->lastMatchedEmail;
|
$match = $this->lastMatchedEmail;
|
||||||
$crawler = new Crawler($match->Content);
|
$crawler = new Crawler($match->Content);
|
||||||
$linkEl = $crawler->selectLink($linkSelector);
|
$linkEl = $crawler->selectLink($linkSelector);
|
||||||
assertNotNull($linkEl);
|
Assert::assertNotNull($linkEl);
|
||||||
$link = $linkEl->attr('href');
|
$link = $linkEl->attr('href');
|
||||||
assertNotNull($link);
|
Assert::assertNotNull($link);
|
||||||
|
|
||||||
$this->getMainContext()->visit($link);
|
$this->getMainContext()->visit($link);
|
||||||
}
|
}
|
||||||
@ -264,11 +265,11 @@ class EmailContext implements Context
|
|||||||
// For "should not contain"
|
// For "should not contain"
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
assertNotContains($row[0], $emailContent);
|
Assert::assertNotContains($row[0], $emailContent);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
assertContains($row[0], $emailContent);
|
Assert::assertContains($row[0], $emailContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,13 +283,13 @@ class EmailContext implements Context
|
|||||||
{
|
{
|
||||||
$match = $this->mailer->findEmail(null, null, $subject);
|
$match = $this->mailer->findEmail(null, null, $subject);
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
assertNull($match);
|
Assert::assertNull($match);
|
||||||
} else {
|
} else {
|
||||||
$msg = sprintf(
|
$msg = sprintf(
|
||||||
'Could not find email titled "%s".',
|
'Could not find email titled "%s".',
|
||||||
$subject
|
$subject
|
||||||
);
|
);
|
||||||
assertNotNull($match, $msg);
|
Assert::assertNotNull($match, $msg);
|
||||||
}
|
}
|
||||||
$this->lastMatchedEmail = $match;
|
$this->lastMatchedEmail = $match;
|
||||||
}
|
}
|
||||||
@ -306,9 +307,9 @@ class EmailContext implements Context
|
|||||||
|
|
||||||
$match = $this->lastMatchedEmail;
|
$match = $this->lastMatchedEmail;
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
assertNotContains($from, $match->From);
|
Assert::assertNotContains($from, $match->From);
|
||||||
} else {
|
} else {
|
||||||
assertContains($from, $match->From);
|
Assert::assertContains($from, $match->From);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,9 +326,9 @@ class EmailContext implements Context
|
|||||||
|
|
||||||
$match = $this->lastMatchedEmail;
|
$match = $this->lastMatchedEmail;
|
||||||
if (trim($negate)) {
|
if (trim($negate)) {
|
||||||
assertNotContains($to, $match->To);
|
Assert::assertNotContains($to, $match->To);
|
||||||
} else {
|
} else {
|
||||||
assertContains($to, $match->To);
|
Assert::assertContains($to, $match->To);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,7 +359,7 @@ class EmailContext implements Context
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assertNotNull($href);
|
Assert::assertNotNull($href);
|
||||||
|
|
||||||
$this->getMainContext()->visit($href);
|
$this->getMainContext()->visit($href);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ use Behat\Gherkin\Node\PyStringNode;
|
|||||||
use Behat\Gherkin\Node\TableNode;
|
use Behat\Gherkin\Node\TableNode;
|
||||||
use Exception;
|
use Exception;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
|
use PHPUnit\Framework\Assert;
|
||||||
use SilverStripe\Assets\Folder;
|
use SilverStripe\Assets\Folder;
|
||||||
use SilverStripe\Assets\Storage\AssetStore;
|
use SilverStripe\Assets\Storage\AssetStore;
|
||||||
use SilverStripe\Core\ClassInfo;
|
use SilverStripe\Core\ClassInfo;
|
||||||
@ -650,7 +651,7 @@ class FixtureContext implements Context
|
|||||||
public function iAddAnExtensionToTheClass($extension, $class)
|
public function iAddAnExtensionToTheClass($extension, $class)
|
||||||
{
|
{
|
||||||
// Validate the extension
|
// Validate the extension
|
||||||
assertTrue(
|
Assert::assertTrue(
|
||||||
class_exists($extension) && is_subclass_of($extension, Extension::class),
|
class_exists($extension) && is_subclass_of($extension, Extension::class),
|
||||||
'Given extension does not extend Extension'
|
'Given extension does not extend Extension'
|
||||||
);
|
);
|
||||||
@ -696,9 +697,9 @@ YAML;
|
|||||||
{
|
{
|
||||||
$project = ModuleManifest::config()->get('project') ?: 'mysite';
|
$project = ModuleManifest::config()->get('project') ?: 'mysite';
|
||||||
$mysite = ModuleLoader::getModule($project);
|
$mysite = ModuleLoader::getModule($project);
|
||||||
assertNotNull($mysite, 'Project exists');
|
Assert::assertNotNull($mysite, 'Project exists');
|
||||||
$destPath = $mysite->getResource("_config/{$filename}")->getPath();
|
$destPath = $mysite->getResource("_config/{$filename}")->getPath();
|
||||||
assertFileNotExists($destPath, "Config file {$filename} hasn't aleady been loaded");
|
Assert::assertFileDoesNotExist($destPath, "Config file {$filename} hasn't aleady been loaded");
|
||||||
return $destPath;
|
return $destPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -712,7 +713,7 @@ YAML;
|
|||||||
*/
|
*/
|
||||||
public function stepThereShouldBeAFileOrFolder($type, $path)
|
public function stepThereShouldBeAFileOrFolder($type, $path)
|
||||||
{
|
{
|
||||||
assertFileExists($this->joinPaths(BASE_PATH, $path));
|
Assert::assertFileExists($this->joinPaths(BASE_PATH, $path));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -727,7 +728,7 @@ YAML;
|
|||||||
public function stepThereShouldBeAFileWithTuple($filename, $hash)
|
public function stepThereShouldBeAFileWithTuple($filename, $hash)
|
||||||
{
|
{
|
||||||
$exists = $this->getAssetStore()->exists($filename, $hash);
|
$exists = $this->getAssetStore()->exists($filename, $hash);
|
||||||
assertTrue((bool)$exists, "A file exists with filename $filename and hash $hash");
|
Assert::assertTrue((bool)$exists, "A file exists with filename $filename and hash $hash");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4,6 +4,7 @@ namespace SilverStripe\BehatExtension\Context;
|
|||||||
|
|
||||||
use Behat\Behat\Context\Context;
|
use Behat\Behat\Context\Context;
|
||||||
use Behat\Mink\Element\NodeElement;
|
use Behat\Mink\Element\NodeElement;
|
||||||
|
use PHPUnit\Framework\Assert;
|
||||||
use SilverStripe\Security\Authenticator;
|
use SilverStripe\Security\Authenticator;
|
||||||
use SilverStripe\Security\Group;
|
use SilverStripe\Security\Group;
|
||||||
use SilverStripe\Security\Member;
|
use SilverStripe\Security\Member;
|
||||||
@ -32,7 +33,7 @@ class LoginContext implements Context
|
|||||||
|
|
||||||
if (0 == strpos($this->getMainContext()->getSession()->getCurrentUrl(), $loginUrl)) {
|
if (0 == strpos($this->getMainContext()->getSession()->getCurrentUrl(), $loginUrl)) {
|
||||||
$this->stepILogInWith('admin', 'password');
|
$this->stepILogInWith('admin', 'password');
|
||||||
assertStringStartsWith($adminUrl, $this->getMainContext()->getSession()->getCurrentUrl());
|
Assert::assertStringStartsWith($adminUrl, $this->getMainContext()->getSession()->getCurrentUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,13 +64,13 @@ class LoginContext implements Context
|
|||||||
|
|
||||||
$page = $this->getMainContext()->getSession()->getPage();
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
$form = $page->findById('LogoutForm_Form');
|
$form = $page->findById('LogoutForm_Form');
|
||||||
assertNotNull($form, 'Logout form not found');
|
Assert::assertNotNull($form, 'Logout form not found');
|
||||||
|
|
||||||
$submitButton = $form->find('css', '[type=submit]');
|
$submitButton = $form->find('css', '[type=submit]');
|
||||||
$securityID = $form->find('css', '[name=SecurityID]');
|
$securityID = $form->find('css', '[name=SecurityID]');
|
||||||
|
|
||||||
assertNotNull($submitButton, 'Submit button on logout form not found');
|
Assert::assertNotNull($submitButton, 'Submit button on logout form not found');
|
||||||
assertNotNull($securityID, 'CSRF token not found');
|
Assert::assertNotNull($securityID, 'CSRF token not found');
|
||||||
|
|
||||||
$submitButton->press();
|
$submitButton->press();
|
||||||
}
|
}
|
||||||
@ -86,7 +87,7 @@ class LoginContext implements Context
|
|||||||
$this->getMainContext()->getSession()->visit($loginUrl);
|
$this->getMainContext()->getSession()->visit($loginUrl);
|
||||||
$page = $this->getMainContext()->getSession()->getPage();
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
$form = $page->findById('MemberLoginForm_LoginForm');
|
$form = $page->findById('MemberLoginForm_LoginForm');
|
||||||
assertNotNull($form, 'Login form not found');
|
Assert::assertNotNull($form, 'Login form not found');
|
||||||
|
|
||||||
// Try to find visible forms again on login page.
|
// Try to find visible forms again on login page.
|
||||||
$visibleForm = null;
|
$visibleForm = null;
|
||||||
@ -94,17 +95,17 @@ class LoginContext implements Context
|
|||||||
if ($form->isVisible() && $form->find('css', '[name=Email]')) {
|
if ($form->isVisible() && $form->find('css', '[name=Email]')) {
|
||||||
$visibleForm = $form;
|
$visibleForm = $form;
|
||||||
}
|
}
|
||||||
assertNotNull($visibleForm, 'Could not find login email field');
|
Assert::assertNotNull($visibleForm, 'Could not find login email field');
|
||||||
|
|
||||||
$emailField = $visibleForm->find('css', '[name=Email]');
|
$emailField = $visibleForm->find('css', '[name=Email]');
|
||||||
$passwordField = $visibleForm->find('css', '[name=Password]');
|
$passwordField = $visibleForm->find('css', '[name=Password]');
|
||||||
$submitButton = $visibleForm->find('css', '[type=submit]');
|
$submitButton = $visibleForm->find('css', '[type=submit]');
|
||||||
$securityID = $visibleForm->find('css', '[name=SecurityID]');
|
$securityID = $visibleForm->find('css', '[name=SecurityID]');
|
||||||
|
|
||||||
assertNotNull($emailField, 'Email field on login form not found');
|
Assert::assertNotNull($emailField, 'Email field on login form not found');
|
||||||
assertNotNull($passwordField, 'Password field on login form not found');
|
Assert::assertNotNull($passwordField, 'Password field on login form not found');
|
||||||
assertNotNull($submitButton, 'Submit button on login form not found');
|
Assert::assertNotNull($submitButton, 'Submit button on login form not found');
|
||||||
assertNotNull($securityID, 'CSRF token not found');
|
Assert::assertNotNull($securityID, 'CSRF token not found');
|
||||||
|
|
||||||
$emailField->setValue($email);
|
$emailField->setValue($email);
|
||||||
$passwordField->setValue($password);
|
$passwordField->setValue($password);
|
||||||
@ -119,7 +120,7 @@ class LoginContext implements Context
|
|||||||
$page = $this->getMainContext()->getSession()->getPage();
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
$message = $page->find('css', '.message.error');
|
$message = $page->find('css', '.message.error');
|
||||||
$error = $message ? $message->getText() : null;
|
$error = $message ? $message->getText() : null;
|
||||||
assertNull($message, 'Could not log in with user ' . $email . '. Error: "' . $error. '""');
|
Assert::assertNull($message, 'Could not log in with user ' . $email . '. Error: "' . $error. '""');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -129,7 +130,7 @@ class LoginContext implements Context
|
|||||||
{
|
{
|
||||||
$page = $this->getMainContext()->getSession()->getPage();
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
$loginForm = $page->find('css', '#MemberLoginForm_LoginForm');
|
$loginForm = $page->find('css', '#MemberLoginForm_LoginForm');
|
||||||
assertNotNull($loginForm, 'I should see a log-in form');
|
Assert::assertNotNull($loginForm, 'I should see a log-in form');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -139,7 +140,7 @@ class LoginContext implements Context
|
|||||||
{
|
{
|
||||||
$page = $this->getMainContext()->getSession()->getPage();
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
$logoutForm = $page->find('css', '#LogoutForm_Form');
|
$logoutForm = $page->find('css', '#LogoutForm_Form');
|
||||||
assertNotNull($logoutForm, 'I should see a log-out form');
|
Assert::assertNotNull($logoutForm, 'I should see a log-out form');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -150,7 +151,7 @@ class LoginContext implements Context
|
|||||||
{
|
{
|
||||||
$page = $this->getMainContext()->getSession()->getPage();
|
$page = $this->getMainContext()->getSession()->getPage();
|
||||||
$message = $page->find('css', sprintf('.message.%s', $type));
|
$message = $page->find('css', sprintf('.message.%s', $type));
|
||||||
assertNotNull($message, sprintf('%s message not found.', $type));
|
Assert::assertNotNull($message, sprintf('%s message not found.', $type));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -163,10 +164,10 @@ class LoginContext implements Context
|
|||||||
{
|
{
|
||||||
/** @var Member $member */
|
/** @var Member $member */
|
||||||
$member = Member::get()->filter('Email', $id)->First();
|
$member = Member::get()->filter('Email', $id)->First();
|
||||||
assertNotNull($member);
|
Assert::assertNotNull($member);
|
||||||
$authenticators = Security::singleton()->getApplicableAuthenticators(Authenticator::CHECK_PASSWORD);
|
$authenticators = Security::singleton()->getApplicableAuthenticators(Authenticator::CHECK_PASSWORD);
|
||||||
foreach ($authenticators as $authenticator) {
|
foreach ($authenticators as $authenticator) {
|
||||||
assertTrue($authenticator->checkPassword($member, $password)->isValid());
|
Assert::assertTrue($authenticator->checkPassword($member, $password)->isValid());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ use Behat\Mink\Session;
|
|||||||
use Behat\Mink\Mink;
|
use Behat\Mink\Mink;
|
||||||
use Behat\Mink\Driver\DriverInterface;
|
use Behat\Mink\Driver\DriverInterface;
|
||||||
use Behat\Mink\Element\Element;
|
use Behat\Mink\Element\Element;
|
||||||
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
use SilverStripe\BehatExtension\Tests\SilverStripeContextTest\FeatureContext;
|
use SilverStripe\BehatExtension\Tests\SilverStripeContextTest\FeatureContext;
|
||||||
use SilverStripe\Dev\SapphireTest;
|
use SilverStripe\Dev\SapphireTest;
|
||||||
|
|
||||||
@ -16,22 +17,18 @@ class SilverStripeContextTest extends SapphireTest
|
|||||||
|
|
||||||
protected $backupGlobals = false;
|
protected $backupGlobals = false;
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \LogicException
|
|
||||||
* @expectedExceptionMessage Cannot find 'region_map' in the behat.yml
|
|
||||||
*/
|
|
||||||
public function testGetRegionObjThrowsExceptionOnUnknownSelector()
|
public function testGetRegionObjThrowsExceptionOnUnknownSelector()
|
||||||
{
|
{
|
||||||
|
$this->expectException(\LogicException::class);
|
||||||
|
$this->expectExceptionMessage("Cannot find 'region_map' in the behat.yml");
|
||||||
$context = $this->getContextMock();
|
$context = $this->getContextMock();
|
||||||
$context->getRegionObj('.unknown');
|
$context->getRegionObj('.unknown');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException \LogicException
|
|
||||||
* @expectedExceptionMessage Cannot find the specified region in the behat.yml
|
|
||||||
*/
|
|
||||||
public function testGetRegionObjThrowsExceptionOnUnknownRegion()
|
public function testGetRegionObjThrowsExceptionOnUnknownRegion()
|
||||||
{
|
{
|
||||||
|
$this->expectException(\LogicException::class);
|
||||||
|
$this->expectExceptionMessage("Cannot find the specified region in the behat.yml");
|
||||||
$context = $this->getContextMock();
|
$context = $this->getContextMock();
|
||||||
$context->setRegionMap(array('MyRegion' => '.my-region'));
|
$context->setRegionMap(array('MyRegion' => '.my-region'));
|
||||||
$context->getRegionObj('.unknown');
|
$context->getRegionObj('.unknown');
|
||||||
@ -92,7 +89,7 @@ class SilverStripeContextTest extends SapphireTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Element|\PHPUnit_Framework_MockObject_MockObject
|
* @return Element|MockObject
|
||||||
*/
|
*/
|
||||||
protected function getElementMock()
|
protected function getElementMock()
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user