Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Test / BrowserTestBaseTest.php
diff --git a/web/core/tests/Drupal/Tests/Core/Test/BrowserTestBaseTest.php b/web/core/tests/Drupal/Tests/Core/Test/BrowserTestBaseTest.php
new file mode 100644 (file)
index 0000000..a8eb65f
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+
+namespace Drupal\Tests\Core\Test;
+
+use Drupal\Tests\UnitTestCase;
+use Drupal\Tests\BrowserTestBase;
+use Behat\Mink\Driver\GoutteDriver;
+use Behat\Mink\Session;
+use Goutte\Client;
+
+/**
+ * @coversDefaultClass \Drupal\Tests\BrowserTestBase
+ * @group Test
+ */
+class BrowserTestBaseTest extends UnitTestCase {
+
+  protected function mockBrowserTestBaseWithDriver($driver) {
+    $session = $this->getMockBuilder(Session::class)
+      ->disableOriginalConstructor()
+      ->setMethods(['getDriver'])
+      ->getMock();
+    $session->expects($this->once())
+      ->method('getDriver')
+      ->willReturn($driver);
+
+    $btb = $this->getMockBuilder(BrowserTestBase::class)
+      ->disableOriginalConstructor()
+      ->setMethods(['getSession'])
+      ->getMockForAbstractClass();
+    $btb->expects($this->once())
+      ->method('getSession')
+      ->willReturn($session);
+
+    return $btb;
+  }
+
+  /**
+   * @covers ::getHttpClient
+   */
+  public function testGetHttpClient() {
+    // Our stand-in for the Guzzle client object.
+    $expected = new \stdClass();
+
+    $browserkit_client = $this->getMockBuilder(Client::class)
+      ->setMethods(['getClient'])
+      ->getMockForAbstractClass();
+    $browserkit_client->expects($this->once())
+      ->method('getClient')
+      ->willReturn($expected);
+
+    // Because the driver is a GoutteDriver, we'll get back a client.
+    $driver = $this->getMockBuilder(GoutteDriver::class)
+      ->setMethods(['getClient'])
+      ->getMock();
+    $driver->expects($this->once())
+      ->method('getClient')
+      ->willReturn($browserkit_client);
+
+    $btb = $this->mockBrowserTestBaseWithDriver($driver);
+
+    $ref_gethttpclient = new \ReflectionMethod($btb, 'getHttpClient');
+    $ref_gethttpclient->setAccessible(TRUE);
+
+    $this->assertSame(get_class($expected), get_class($ref_gethttpclient->invoke($btb)));
+  }
+
+  /**
+   * @covers ::getHttpClient
+   */
+  public function testGetHttpClientException() {
+    // A driver type that isn't GoutteDriver. This should cause a
+    // RuntimeException.
+    $btb = $this->mockBrowserTestBaseWithDriver(new \stdClass());
+
+    $ref_gethttpclient = new \ReflectionMethod($btb, 'getHttpClient');
+    $ref_gethttpclient->setAccessible(TRUE);
+
+    $this->setExpectedException(\RuntimeException::class, 'The Mink client type stdClass does not support getHttpClient().');
+    $ref_gethttpclient->invoke($btb);
+  }
+
+}