<?php namespace Slovocast\Tests; use PHPUnit\Framework\TestCase as PHPUnit_TestCase; use Prophecy\PhpUnit\ProphecyTrait; use Psr\Http\Message\ServerRequestInterface as Request; use Slim\App; use Slim\Psr7\Factory\StreamFactory; use Slim\Psr7\Headers; use Slim\Psr7\Request as SlimRequest; use Slim\Psr7\Uri; use Slovocast\Bootstrap; use Slovocast\Domain\Entity\User; /** * This is the common test harness pattern lifted right out of the official * SlimPHP Skeleton application. */ class TestCase extends PHPUnit_TestCase { use ProphecyTrait; /** * Generate an instance of the Application */ protected function getAppInstance(): App { return Bootstrap::init(); } /** * @param string $method * @param string path * @param array $headers * @param array $cookies * @param array $serverParams */ protected function createRequest( string $method, string $path, array $headers = [], array $cookies = [], array $serverParams = [] ): Request { $uri = new Uri('', '', 80, $path); $handle = fopen('php://temp', 'w+'); $stream = (new StreamFactory())->createStreamFromResource($handle); $h = new Headers(); foreach ($headers as $name => $value) { $h->addHeader($name, $value); } return new SlimRequest( $method, $uri, $h, $cookies, $serverParams, $stream ); } /** * Quickly generate a User new User entity for testing. * * @param array $user The User properties to call User:fromArray on * @return User a new User entity */ protected function getUserFromArray(array $user = []): User { if (empty($user)) { $user = [ 'email' => 'dave@slovocast.com', 'name' => 'Dave SH', 'password' => 'hashed_password' ]; } return User::fromArray($user); } }