You are here

class BuilderTest in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/stack/builder/tests/unit/Stack/BuilderTest.php \Stack\BuilderTest

@covers Stack\Builder

Hierarchy

  • class \Stack\BuilderTest extends \Stack\PHPUnit_Framework_TestCase

Expanded class hierarchy of BuilderTest

File

vendor/stack/builder/tests/unit/Stack/BuilderTest.php, line 11

Namespace

Stack
View source
class BuilderTest extends \PHPUnit_Framework_TestCase {

  /** @test */
  public function withoutMiddlewaresItShouldReturnOriginalResponse() {
    $app = $this
      ->getHttpKernelMock(new Response('ok'));
    $stack = new Builder();
    $resolved = $stack
      ->resolve($app);
    $request = Request::create('/');
    $response = $resolved
      ->handle($request);
    $this
      ->assertInstanceOf('Stack\\StackedHttpKernel', $resolved);
    $this
      ->assertSame('ok', $response
      ->getContent());
  }

  /** @test */
  public function resolvedKernelShouldDelegateTerminateCalls() {
    $app = $this
      ->getTerminableMock();
    $stack = new Builder();
    $resolved = $stack
      ->resolve($app);
    $request = Request::create('/');
    $response = new Response('ok');
    $resolved
      ->handle($request);
    $resolved
      ->terminate($request, $response);
  }

  /** @test */
  public function pushShouldReturnSelf() {
    $stack = new Builder();
    $this
      ->assertSame($stack, $stack
      ->push('Stack\\AppendA'));
  }

  /** @test */
  public function pushShouldThrowOnInvalidInput() {
    $this
      ->setExpectedException('InvalidArgumentException', 'Missing argument(s) when calling push');
    $stack = new Builder();
    $stack
      ->push();
  }

  /** @test */
  public function unshiftShouldReturnSelf() {
    $stack = new Builder();
    $this
      ->assertSame($stack, $stack
      ->unshift('Stack\\AppendA'));
  }

  /** @test */
  public function unshiftShouldThrowOnInvalidInput() {
    $this
      ->setExpectedException('InvalidArgumentException', 'Missing argument(s) when calling unshift');
    $stack = new Builder();
    $stack
      ->unshift();
  }

  /** @test */
  public function appendMiddlewareShouldAppendToBody() {
    $app = $this
      ->getHttpKernelMock(new Response('ok'));
    $stack = new Builder();
    $stack
      ->push('Stack\\AppendA');
    $resolved = $stack
      ->resolve($app);
    $request = Request::create('/');
    $response = $resolved
      ->handle($request);
    $this
      ->assertSame('ok.A', $response
      ->getContent());
  }

  /** @test */
  public function unshiftMiddlewareShouldPutMiddlewareBeforePushed() {
    $app = $this
      ->getHttpKernelMock(new Response('ok'));
    $stack = new Builder();
    $stack
      ->push('Stack\\Append', '2.');
    $stack
      ->unshift('Stack\\Append', '1.');
    $resolved = $stack
      ->resolve($app);
    $request = Request::create('/');
    $response = $resolved
      ->handle($request);
    $this
      ->assertSame('ok2.1.', $response
      ->getContent());
  }

  /** @test */
  public function stackedMiddlewaresShouldWrapInReverseOrder() {
    $app = $this
      ->getHttpKernelMock(new Response('ok'));
    $stack = new Builder();
    $stack
      ->push('Stack\\AppendA');
    $stack
      ->push('Stack\\AppendB');
    $resolved = $stack
      ->resolve($app);
    $request = Request::create('/');
    $response = $resolved
      ->handle($request);
    $this
      ->assertSame('ok.B.A', $response
      ->getContent());
  }

  /** @test */
  public function resolveShouldPassPushArgumentsToMiddlewareConstructor() {
    $app = $this
      ->getHttpKernelMock(new Response('ok'));
    $stack = new Builder();
    $stack
      ->push('Stack\\Append', '.foo');
    $stack
      ->push('Stack\\Append', '.bar');
    $resolved = $stack
      ->resolve($app);
    $request = Request::create('/');
    $response = $resolved
      ->handle($request);
    $this
      ->assertSame('ok.bar.foo', $response
      ->getContent());
  }

  /** @test */
  public function resolveShouldCallSpecFactories() {
    $app = $this
      ->getHttpKernelMock(new Response('ok'));
    $stack = new Builder();
    $stack
      ->push(function ($app) {
      return new Append($app, '.foo');
    });
    $stack
      ->push(function ($app) {
      return new Append($app, '.bar');
    });
    $resolved = $stack
      ->resolve($app);
    $request = Request::create('/');
    $response = $resolved
      ->handle($request);
    $this
      ->assertSame('ok.bar.foo', $response
      ->getContent());
  }
  private function getHttpKernelMock(Response $response) {
    $app = $this
      ->getMock('Symfony\\Component\\HttpKernel\\HttpKernelInterface');
    $app
      ->expects($this
      ->any())
      ->method('handle')
      ->with($this
      ->isInstanceOf('Symfony\\Component\\HttpFoundation\\Request'))
      ->will($this
      ->returnValue($response));
    return $app;
  }
  private function getTerminableMock() {
    $app = $this
      ->getMock('Stack\\TerminableHttpKernel');
    $app
      ->expects($this
      ->once())
      ->method('terminate')
      ->with($this
      ->isInstanceOf('Symfony\\Component\\HttpFoundation\\Request'), $this
      ->isInstanceOf('Symfony\\Component\\HttpFoundation\\Response'));
    return $app;
  }

}

Members