Skip to content

Commit f3ba0c2

Browse files
committed
Merge remote-tracking branch 'origin/main' into chore/increase-phpstan-level
2 parents 5a53ec5 + 0d75b54 commit f3ba0c2

File tree

3 files changed

+50
-30
lines changed

3 files changed

+50
-30
lines changed

tests/Custom/CapabilityTest.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@
22

33
namespace Mink\WebdriverClassicDriver\Tests\Custom;
44

5-
use Facebook\WebDriver\Remote\RemoteWebDriver;
6-
use Facebook\WebDriver\WebDriverOptions;
7-
use Facebook\WebDriver\WebDriverTimeouts;
5+
use Mink\WebdriverClassicDriver\Tests\WebDriverMockingTrait;
86
use Mink\WebdriverClassicDriver\WebdriverClassicDriver;
97

108
/**
119
* @phpstan-import-type TCapabilities from WebdriverClassicDriver
1210
*/
1311
class CapabilityTest extends \PHPUnit\Framework\TestCase
1412
{
13+
use WebDriverMockingTrait;
14+
1515
/**
1616
* @param TCapabilities $desiredCapabilities
1717
* @param TCapabilities $expectedCapabilities
@@ -20,11 +20,7 @@ class CapabilityTest extends \PHPUnit\Framework\TestCase
2020
*/
2121
public function testThatCapabilitiesAreAsExpected(string $browserName, array $desiredCapabilities, array $expectedCapabilities): void
2222
{
23-
$mockWebDriver = $this->createMock(RemoteWebDriver::class);
24-
$mockWebDriverOptions = $this->createMock(WebDriverOptions::class);
25-
$mockWebDriverTimeouts = $this->createMock(WebDriverTimeouts::class);
26-
$mockWebDriver->method('manage')->willReturn($mockWebDriverOptions);
27-
$mockWebDriverOptions->method('timeouts')->willReturn($mockWebDriverTimeouts);
23+
$mockWebDriver = $this->createMockWebDriver();
2824

2925
$actualCapabilities = null;
3026
$driver = new WebdriverClassicDriver(

tests/Custom/WebDriverTest.php

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
namespace Mink\WebdriverClassicDriver\Tests\Custom;
44

55
use Behat\Mink\Exception\DriverException;
6-
use Facebook\WebDriver\Remote\RemoteWebDriver;
76
use Facebook\WebDriver\Remote\RemoteWebElement;
8-
use Facebook\WebDriver\WebDriverOptions;
9-
use Facebook\WebDriver\WebDriverTimeouts;
7+
use Mink\WebdriverClassicDriver\Tests\WebDriverMockingTrait;
108
use Mink\WebdriverClassicDriver\WebdriverClassicDriver;
119

1210
class WebDriverTest extends TestCase
1311
{
12+
use WebDriverMockingTrait;
13+
1414
public function testDriverMustBeStartedBeforeUse(): void
1515
{
1616
$this->expectException(DriverException::class);
@@ -39,11 +39,9 @@ public function testStartedDriverCannotBeSubsequentlyStarted(): void
3939

4040
public function testDriverCatchesUpstreamErrorsDuringStart(): void
4141
{
42-
$driver = $this->createPartialMock(WebdriverClassicDriver::class, ['createWebDriver', 'getWebDriver']);
43-
$driver
44-
->expects($this->once())
45-
->method('createWebDriver')
46-
->willThrowException(new \RuntimeException('An upstream error'));
42+
$driver = new WebdriverClassicDriver('fake browser', [], 'example.com', function () {
43+
throw new \RuntimeException('An upstream error');
44+
});
4745

4846
$this->expectException(DriverException::class);
4947
$this->expectExceptionMessage('Could not start driver: An upstream error');
@@ -53,15 +51,11 @@ public function testDriverCatchesUpstreamErrorsDuringStart(): void
5351

5452
public function testDriverCatchesUpstreamErrorsDuringStop(): void
5553
{
56-
$driver = $this->createPartialMock(WebdriverClassicDriver::class, ['createWebDriver', 'isStarted', 'getWebDriver']);
57-
$driver
58-
->expects($this->once())
59-
->method('isStarted')
60-
->willReturn(true);
61-
$driver
62-
->expects($this->once())
63-
->method('getWebDriver')
64-
->willThrowException(new \RuntimeException('An upstream error'));
54+
$mockWebDriver = $this->createMockWebDriver();
55+
$mockWebDriver->method('quit')->willThrowException(new \RuntimeException('An upstream error'));
56+
$driver = new WebdriverClassicDriver('fake browser', [], 'example.com', fn() => $mockWebDriver);
57+
58+
$driver->start();
6559

6660
$this->expectException(DriverException::class);
6761
$this->expectExceptionMessage('Could not close connection: An upstream error');
@@ -79,12 +73,8 @@ public function testClassicDriverCanProvideBrowserName(): void
7973

8074
public function testThatDriverCatchesUnexpectedAttributeValueType(): void
8175
{
82-
$mockWebDriver = $this->createMock(RemoteWebDriver::class);
83-
$mockWebDriverOptions = $this->createMock(WebDriverOptions::class);
84-
$mockWebDriverTimeouts = $this->createMock(WebDriverTimeouts::class);
76+
$mockWebDriver = $this->createMockWebDriver();
8577
$mockElement = $this->createMock(RemoteWebElement::class);
86-
$mockWebDriver->method('manage')->willReturn($mockWebDriverOptions);
87-
$mockWebDriverOptions->method('timeouts')->willReturn($mockWebDriverTimeouts);
8878
$mockWebDriver
8979
->expects($this->once())
9080
->method('findElement')

tests/WebDriverMockingTrait.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace Mink\WebdriverClassicDriver\Tests;
4+
5+
use Facebook\WebDriver\Remote\RemoteWebDriver;
6+
use Facebook\WebDriver\WebDriverOptions;
7+
use Facebook\WebDriver\WebDriverTimeouts;
8+
use PHPUnit\Framework\MockObject\MockObject;
9+
10+
trait WebDriverMockingTrait
11+
{
12+
/**
13+
* @template T
14+
* @param class-string<T> $class
15+
* @return T&MockObject
16+
*/
17+
abstract function createMock(string $class): object;
18+
19+
/**
20+
* @return RemoteWebDriver&MockObject
21+
*/
22+
private function createMockWebDriver(): RemoteWebDriver
23+
{
24+
$mockWebDriverTimeouts = $this->createMock(WebDriverTimeouts::class);
25+
26+
$mockWebDriverOptions = $this->createMock(WebDriverOptions::class);
27+
$mockWebDriverOptions->method('timeouts')->willReturn($mockWebDriverTimeouts);
28+
29+
$mockWebDriver = $this->createMock(RemoteWebDriver::class);
30+
$mockWebDriver->method('manage')->willReturn($mockWebDriverOptions);
31+
32+
return $mockWebDriver;
33+
}
34+
}

0 commit comments

Comments
 (0)