Version 1
[yaffs-website] / web / core / modules / ban / tests / src / Unit / BanMiddlewareTest.php
diff --git a/web/core/modules/ban/tests/src/Unit/BanMiddlewareTest.php b/web/core/modules/ban/tests/src/Unit/BanMiddlewareTest.php
new file mode 100644 (file)
index 0000000..058846a
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+
+namespace Drupal\Tests\ban\Unit;
+
+use Drupal\ban\BanMiddleware;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+
+/**
+ * @coversDefaultClass \Drupal\ban\BanMiddleware
+ * @group ban
+ */
+class BanMiddlewareTest extends UnitTestCase {
+
+  /**
+   * The mocked wrapped kernel.
+   *
+   * @var \Symfony\Component\HttpKernel\HttpKernelInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $kernel;
+
+  /**
+   * The mocked ban IP manager.
+   *
+   * @var \Drupal\ban\BanIpManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $banManager;
+
+  /**
+   * The tested ban middleware.
+   *
+   * @var \Drupal\ban\BanMiddleware
+   */
+  protected $banMiddleware;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->kernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface');
+    $this->banManager = $this->getMock('Drupal\ban\BanIpManagerInterface');
+    $this->banMiddleware = new BanMiddleware($this->kernel, $this->banManager);
+  }
+
+  /**
+   * Tests a banned IP.
+   */
+  public function testBannedIp() {
+    $banned_ip = '17.0.0.2';
+    $this->banManager->expects($this->once())
+      ->method('isBanned')
+      ->with($banned_ip)
+      ->willReturn(TRUE);
+
+    $this->kernel->expects($this->never())
+      ->method('handle');
+
+    $request = Request::create('/test-path');
+    $request->server->set('REMOTE_ADDR', $banned_ip);
+    $response = $this->banMiddleware->handle($request);
+
+    $this->assertEquals(403, $response->getStatusCode());
+  }
+
+  /**
+   * Tests an unbanned IP.
+   */
+  public function testUnbannedIp() {
+    $unbanned_ip = '18.0.0.2';
+    $this->banManager->expects($this->once())
+      ->method('isBanned')
+      ->with($unbanned_ip)
+      ->willReturn(FALSE);
+
+    $request = Request::create('/test-path');
+    $request->server->set('REMOTE_ADDR', $unbanned_ip);
+    $expected_response = new Response(200);
+    $this->kernel->expects($this->once())
+      ->method('handle')
+      ->with($request, HttpKernelInterface::MASTER_REQUEST, TRUE)
+      ->willReturn($expected_response);
+
+    $response = $this->banMiddleware->handle($request);
+
+    $this->assertSame($expected_response, $response);
+  }
+
+}