From 7779e00455ee4280b3f1c575b60c6eb721257957 Mon Sep 17 00:00:00 2001 From: Johann Pardanaud Date: Mon, 23 Nov 2020 14:00:22 +0100 Subject: [PATCH] Rework tests for browser logs Better decoupling and compatible with PHPUnit 9 --- tests/PuphpeteerTest.php | 74 +++++++++++++++++++++++++++++----------- tests/TestCase.php | 22 ------------ 2 files changed, 54 insertions(+), 42 deletions(-) diff --git a/tests/PuphpeteerTest.php b/tests/PuphpeteerTest.php index c30ad1c..d36247e 100644 --- a/tests/PuphpeteerTest.php +++ b/tests/PuphpeteerTest.php @@ -6,6 +6,7 @@ use Nesk\Rialto\Data\JsFunction; use PHPUnit\Framework\ExpectationFailedException; use Nesk\Puphpeteer\Resources\ElementHandle; +use Psr\Log\LoggerInterface; class PuphpeteerTest extends TestCase { @@ -156,30 +157,63 @@ public function resourceProvider(): \Generator } } + private function createBrowserLogger(callable $onBrowserLog): LoggerInterface + { + $logger = $this->createMock(LoggerInterface::class); + $logger->expects(self::atLeastOnce()) + ->method('log') + ->willReturn(self::returnCallback(function (string $level, string $message) use ($onBrowserLog) { + if (\strpos($message, "Received a Browser log:") === 0) { + $onBrowserLog(); + } + + return null; + })); + + return $logger; + } + /** * @test * @dontPopulateProperties browser */ - public function browser_console_calls_are_logged() + public function browser_console_calls_are_logged_if_enabled() { - $setups = [ - [false, function ($browser) { return $browser->newPage(); }, 'Received data from the port'], - [true, function ($browser) { return $browser->newPage(); }, 'Received a Browser log:'], - [true, function ($browser) { return $browser->pages()[0]; }, 'Received a Browser log:'], - ]; - - foreach ($setups as [$shoulLogBrowserConsole, $pageFactory, $startsWith]) { - $puppeteer = new Puppeteer([ - 'log_browser_console' => $shoulLogBrowserConsole, - 'logger' => $this->loggerMock( - $this->at(9), - $this->isLogLevel(), - $this->stringStartsWith($startsWith) - ), - ]); - - $this->browser = $puppeteer->launch($this->browserOptions); - $pageFactory($this->browser)->goto($this->url); - } + $browserLogOccured = false; + $logger = $this->createBrowserLogger(function () use (&$browserLogOccured) { + $browserLogOccured = true; + }); + + $puppeteer = new Puppeteer([ + 'log_browser_console' => true, + 'logger' => $logger, + ]); + + $this->browser = $puppeteer->launch($this->browserOptions); + $this->browser->pages()[0]->goto($this->url); + + static::assertTrue($browserLogOccured); + } + + /** + * @test + * @dontPopulateProperties browser + */ + public function browser_console_calls_are_not_logged_if_disabled() + { + $browserLogOccured = false; + $logger = $this->createBrowserLogger(function () use (&$browserLogOccured) { + $browserLogOccured = true; + }); + + $puppeteer = new Puppeteer([ + 'log_browser_console' => false, + 'logger' => $logger, + ]); + + $this->browser = $puppeteer->launch($this->browserOptions); + $this->browser->pages()[0]->goto($this->url); + + static::assertFalse($browserLogOccured); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index 0361225..9c75b8a 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -82,28 +82,6 @@ public function canPopulateProperty(string $propertyName): bool return !in_array($propertyName, $this->dontPopulateProperties); } - public function loggerMock($expectations) { - $loggerMock = $this->getMockBuilder(Logger::class) - ->setConstructorArgs(['rialto']) - ->setMethods(['log']) - ->getMock(); - - if ($expectations instanceof Invocation) { - $expectations = [func_get_args()]; - } - - foreach ($expectations as $expectation) { - [$matcher] = $expectation; - $with = array_slice($expectation, 1); - - $loggerMock->expects($matcher) - ->method('log') - ->with(...$with); - } - - return $loggerMock; - } - public function isLogLevel(): Callback { $psrLogLevels = (new ReflectionClass(LogLevel::class))->getConstants(); $monologLevels = (new ReflectionClass(Logger::class))->getConstants();