silverstripe-behat-extension/tests/php/SilverStripeContextTest.php

101 lines
3.2 KiB
PHP
Raw Permalink Normal View History

2015-04-07 13:15:22 +02:00
<?php
2014-08-02 08:30:27 +02:00
2015-04-07 13:15:22 +02:00
namespace SilverStripe\BehatExtension\Tests;
2014-08-02 08:30:27 +02:00
use Behat\Mink\Element\DocumentElement;
use Behat\Mink\Selector\SelectorsHandler;
use Behat\Mink\Session;
use Behat\Mink\Mink;
2014-08-02 08:30:27 +02:00
use Behat\Mink\Driver\DriverInterface;
use Behat\Mink\Element\Element;
2021-10-27 06:14:44 +02:00
use PHPUnit\Framework\MockObject\MockObject;
2014-08-02 08:30:27 +02:00
use SilverStripe\BehatExtension\Tests\SilverStripeContextTest\FeatureContext;
use SilverStripe\Dev\SapphireTest;
2015-04-07 13:15:22 +02:00
class SilverStripeContextTest extends SapphireTest
{
2015-04-07 13:15:22 +02:00
protected $backupGlobals = false;
public function testGetRegionObjThrowsExceptionOnUnknownSelector()
{
2021-10-27 06:14:44 +02:00
$this->expectException(\LogicException::class);
$this->expectExceptionMessage("Cannot find 'region_map' in the behat.yml");
$context = $this->getContextMock();
$context->getRegionObj('.unknown');
}
2015-04-07 13:15:22 +02:00
public function testGetRegionObjThrowsExceptionOnUnknownRegion()
{
2021-10-27 06:14:44 +02:00
$this->expectException(\LogicException::class);
$this->expectExceptionMessage("Cannot find the specified region in the behat.yml");
$context = $this->getContextMock();
$context->setRegionMap(array('MyRegion' => '.my-region'));
$context->getRegionObj('.unknown');
}
2015-04-07 13:15:22 +02:00
public function testGetRegionObjFindsBySelector()
{
$context = $this->getContextMock();
$context->getSession()->getPage()
->expects($this->any())
->method('find')
->will($this->returnValue($this->getElementMock()));
$obj = $context->getRegionObj('.some-selector');
$this->assertNotNull($obj);
}
2015-04-07 13:15:22 +02:00
public function testGetRegionObjFindsByRegion()
{
$context = $this->getContextMock();
$el = $this->getElementMock();
$context->getSession()->getPage()
->expects($this->any())
->method('find')
->will($this->returnCallback(function ($type, $selector) use ($el) {
return ($selector == '.my-region') ? $el : null;
}));
$context->setRegionMap(array('MyRegion' => '.my-asdf'));
$obj = $context->getRegionObj('.my-region');
$this->assertNotNull($obj);
}
2015-04-07 13:15:22 +02:00
2014-08-02 08:30:27 +02:00
/**
* @return FeatureContext
*/
protected function getContextMock()
{
2014-08-02 08:30:27 +02:00
$pageMock = $this->getMockBuilder(DocumentElement::class)
->disableOriginalConstructor()
->setMethods(array('find'))
->getMock();
2014-08-02 08:30:27 +02:00
$sessionMock = $this->getMockBuilder(Session::class)
->setConstructorArgs(array(
2014-08-02 08:30:27 +02:00
$this->getMockBuilder(DriverInterface::class)->getMock(),
$this->getMockBuilder(SelectorsHandler::class)->getMock()
))
->setMethods(array('getPage'))
->getMock();
$sessionMock->expects($this->any())
->method('getPage')
->will($this->returnValue($pageMock));
$mink = new Mink(array('default' => $sessionMock));
$mink->setDefaultSessionName('default');
2015-04-07 13:15:22 +02:00
2014-08-02 08:30:27 +02:00
$context = new FeatureContext(array());
$context->setMink($mink);
2015-04-07 13:15:22 +02:00
return $context;
}
2015-04-07 13:15:22 +02:00
2014-08-02 08:30:27 +02:00
/**
2021-10-27 06:14:44 +02:00
* @return Element|MockObject
2014-08-02 08:30:27 +02:00
*/
protected function getElementMock()
{
2014-08-02 08:30:27 +02:00
return $this->getMockBuilder(Element::class)
->disableOriginalConstructor()
->getMock();
}
}