From 21928315e4fc41f59dac29e068636b34d0edfacd Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Thu, 17 Dec 2015 09:54:10 +0100 Subject: [PATCH 01/15] Use composer 1.0 alpha 11 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 3d49be9..344a969 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "zendframework/zend-stdlib": "~2.7" }, "require-dev": { - "composer/composer": ">=1.0.0-alpha10", + "composer/composer": ">=1.0.0-alpha11", "phpunit/phpunit": "^4.8", "squizlabs/php_codesniffer": "^2.3" }, From 1848cf59d4c1fd896b3a0d61aed5774d5ee61585 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Thu, 17 Dec 2015 10:03:59 +0100 Subject: [PATCH 02/15] Require all optional packages for development and testing It's better to require all packages once for testing in stead of running composer for x times for all possible options. --- composer.json | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 344a969..cc58e68e 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,19 @@ "require-dev": { "composer/composer": ">=1.0.0-alpha11", "phpunit/phpunit": "^4.8", - "squizlabs/php_codesniffer": "^2.3" + "squizlabs/php_codesniffer": "^2.3", + "filp/whoops": "^1.1", + + "zendframework/zend-expressive-aurarouter": "^1.0", + "zendframework/zend-expressive-fastroute": "^1.0", + "zendframework/zend-expressive-zendrouter": "^1.0", + "zendframework/zend-expressive-platesrenderer": "^1.0", + "zendframework/zend-expressive-twigrenderer": "^1.0", + "zendframework/zend-expressive-zendviewrenderer": "^1.0", + "zendframework/zend-servicemanager": "^2.5", + "ocramius/proxy-manager": "^1.0", + "aura/di": "3.0.*@beta", + "mouf/pimple-interop": "^1.0" }, "autoload": { "psr-4": { From 18266fcfb0f16e46398252b144adc5171e8ec0e6 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 00:25:30 +0100 Subject: [PATCH 03/15] Installer test proof of concept --- composer.json | 3 +- src/ExpressiveInstaller/OptionalPackages.php | 14 +- .../InstallerTestCase.php | 134 ++++++++++++++++++ .../Router/AuraRouterTest.php | 83 +++++++++++ 4 files changed, 226 insertions(+), 8 deletions(-) create mode 100644 test/ExpressiveInstallerTest/InstallerTestCase.php create mode 100644 test/ExpressiveInstallerTest/Router/AuraRouterTest.php diff --git a/composer.json b/composer.json index cc58e68e..35dc1fe 100644 --- a/composer.json +++ b/composer.json @@ -47,7 +47,8 @@ }, "autoload-dev": { "psr-4": { - "AppTest\\": "test/AppTest/" + "AppTest\\": "test/AppTest/", + "ExpressiveInstallerTest\\": "test/ExpressiveInstallerTest/" } }, "scripts": { diff --git a/src/ExpressiveInstaller/OptionalPackages.php b/src/ExpressiveInstaller/OptionalPackages.php index b7da1e3..61eb370 100644 --- a/src/ExpressiveInstaller/OptionalPackages.php +++ b/src/ExpressiveInstaller/OptionalPackages.php @@ -42,27 +42,27 @@ class OptionalPackages /** * @var array */ - private static $config; + public static $config; /** * @var array */ - private static $composerDefinition; + public static $composerDefinition; /** * @var string[] */ - private static $composerRequires; + public static $composerRequires; /** * @var string[] */ - private static $composerDevRequires; + public static $composerDevRequires; /** * @var string[] */ - private static $stabilityFlags; + public static $stabilityFlags; /** * Install command: choose packages and provide configuration. @@ -288,7 +288,7 @@ private static function askQuestion(Composer $composer, IOInterface $io, $questi * @param $packageName * @param $packageVersion */ - private static function addPackage(IOInterface $io, $packageName, $packageVersion) + public static function addPackage(IOInterface $io, $packageName, $packageVersion) { $io->write(sprintf( " - Adding package %s (%s)", @@ -340,7 +340,7 @@ private static function addPackage(IOInterface $io, $packageName, $packageVersio * @param string $target Destination. * @param bool $force whether or not to copy over an existing file. */ - private static function copyFile(IOInterface $io, $projectRoot, $source, $target, $force = false) + public static function copyFile(IOInterface $io, $projectRoot, $source, $target, $force = false) { // Copy file if ($force === false && is_file($projectRoot . $target)) { diff --git a/test/ExpressiveInstallerTest/InstallerTestCase.php b/test/ExpressiveInstallerTest/InstallerTestCase.php new file mode 100644 index 0000000..e079918 --- /dev/null +++ b/test/ExpressiveInstallerTest/InstallerTestCase.php @@ -0,0 +1,134 @@ +response = null; + + $this->cleanup(); + + $this->io = $this->prophesize('Composer\IO\IOInterface')->reveal(); + + // Get composer.json + $composerFile = Factory::getComposerFile(); + $json = new JsonFile($composerFile); + OptionalPackages::$composerDefinition = $json->read(); + + $this->projectRoot = realpath(dirname($composerFile)); + + OptionalPackages::$config = require 'src/ExpressiveInstaller/config.php'; + } + + public function tearDown() + { + parent::tearDown(); + + $this->cleanup(); + } + + public function installPackage($config, $copyFilesKey) + { + /* TODO: First we need to set $composerDefinition, $composerRequires, $composerDevRequires and $stabilityFlags; + // Add packages to install + if (isset($config['packages'])) { + foreach ($config['packages'] as $packageName) { + OptionalPackages::addPackage($this->io, $packageName, $this->config['packages'][$packageName]); + } + }*/ + + // Copy files + if (isset($config[$copyFilesKey])) { + foreach ($config[$copyFilesKey] as $source => $target) { + OptionalPackages::copyFile($this->io, $this->projectRoot, $source, $target); + } + } + } + + public function cleanup() + { + foreach ($this->testFiles as $file) { + if (is_file($this->projectRoot.$file)) { + unlink($this->projectRoot.$file); + } + } + } + + public function getEmitter() + { + $self = $this; + $emitter = $this->prophesize(EmitterInterface::class); + $emitter + ->emit(Argument::type(ResponseInterface::class)) + ->will( + function ($args) use ($self) { + $response = array_shift($args); + $self->response = $response; + + return null; + } + ) + ->shouldBeCalled() + ; + + return $emitter->reveal(); + } + + public function getContainer() + { + if (!$this->container) { + /** @var ContainerInterface $container */ + $this->container = require 'config/container.php'; + } + + return $this->container; + } + + public function getHomePageResponse() + { + $container = $this->getContainer(); + + /** @var Application $app */ + $app = $container->get('Zend\Expressive\Application'); + $request = new ServerRequest([], [], 'https://example.com/', 'GET'); + + /** @var ResponseInterface $response */ + $response = $app($request, new Response()); + + return $response; + } +} diff --git a/test/ExpressiveInstallerTest/Router/AuraRouterTest.php b/test/ExpressiveInstallerTest/Router/AuraRouterTest.php new file mode 100644 index 0000000..b2cdfb1 --- /dev/null +++ b/test/ExpressiveInstallerTest/Router/AuraRouterTest.php @@ -0,0 +1,83 @@ +installPackage(OptionalPackages::$config['questions']['container']['options'][3], 'copy-files'); + $this->installPackage(OptionalPackages::$config['questions']['router']['options'][1], 'copy-files'); + + // Test container + $container = $this->getContainer(); + $this->assertTrue($container->has(\Zend\Expressive\Helper\UrlHelper::class)); + $this->assertTrue($container->has(\Zend\Expressive\Helper\ServerUrlHelper::class)); + $this->assertTrue($container->has(\Zend\Expressive\Application::class)); + $this->assertTrue($container->has(\Zend\Expressive\Router\RouterInterface::class)); + + // Test config + $config = $container->get('config'); + $this->assertEquals( + \Zend\Expressive\Router\AuraRouter::class, + $config['dependencies']['invokables'][\Zend\Expressive\Router\RouterInterface::class] + ); + + $routes = [ + [ + 'name' => 'home', + 'path' => '/', + 'middleware' => \App\Action\HomePageAction::class, + 'allowed_methods' => ['GET'], + ], + [ + 'name' => 'api.ping', + 'path' => '/api/ping', + 'middleware' => \App\Action\PingAction::class, + 'allowed_methods' => ['GET'], + ], + ]; + $this->assertEquals($routes, $config['routes']); + + // Test composer.json + + // Test home page + $response = $this->getHomePageResponse(); + $this->assertEquals(200, $response->getStatusCode()); + } + + public function testMinimalInstall() + { + // Install packages + $this->installPackage(OptionalPackages::$config['questions']['container']['options'][3], 'minimal-files'); + $this->installPackage(OptionalPackages::$config['questions']['router']['options'][1], 'minimal-files'); + + // Test container + $container = $this->getContainer(); + $this->assertTrue($container->has(\Zend\Expressive\Router\RouterInterface::class)); + + // Test config + $config = $container->get('config'); + $this->assertEquals( + \Zend\Expressive\Router\AuraRouter::class, + $config['dependencies']['invokables'][\Zend\Expressive\Router\RouterInterface::class] + ); + $this->assertEquals([], $config['routes']); + + // Test composer.json + + // Test home page + $response = $this->getHomePageResponse(); + $this->assertEquals(404, $response->getStatusCode()); + } +} From 217c2752b7baf1033b6888887536665db109896b Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 09:21:19 +0100 Subject: [PATCH 04/15] Cleanup some code --- .../InstallerTestCase.php | 37 +++---------------- .../Router/AuraRouterTest.php | 10 ++--- 2 files changed, 9 insertions(+), 38 deletions(-) diff --git a/test/ExpressiveInstallerTest/InstallerTestCase.php b/test/ExpressiveInstallerTest/InstallerTestCase.php index e079918..6260336 100644 --- a/test/ExpressiveInstallerTest/InstallerTestCase.php +++ b/test/ExpressiveInstallerTest/InstallerTestCase.php @@ -10,7 +10,6 @@ use Prophecy\Argument; use Psr\Http\Message\ResponseInterface; use Zend\Diactoros\Response; -use Zend\Diactoros\Response\EmitterInterface; use Zend\Diactoros\ServerRequest; use Zend\Expressive\Application; @@ -21,20 +20,16 @@ class InstallerTestCase extends \PHPUnit_Framework_TestCase */ private $io; - private $composerDefinition; - private $projectRoot; - private $config; - /** * @var ContainerInterface */ - private $container; + protected $container; - private $response; + protected $response; - public $testFiles = []; + protected $teardownFiles = []; public function setup() { @@ -81,33 +76,13 @@ public function installPackage($config, $copyFilesKey) public function cleanup() { - foreach ($this->testFiles as $file) { + foreach ($this->teardownFiles as $file) { if (is_file($this->projectRoot.$file)) { unlink($this->projectRoot.$file); } } } - public function getEmitter() - { - $self = $this; - $emitter = $this->prophesize(EmitterInterface::class); - $emitter - ->emit(Argument::type(ResponseInterface::class)) - ->will( - function ($args) use ($self) { - $response = array_shift($args); - $self->response = $response; - - return null; - } - ) - ->shouldBeCalled() - ; - - return $emitter->reveal(); - } - public function getContainer() { if (!$this->container) { @@ -118,13 +93,13 @@ public function getContainer() return $this->container; } - public function getHomePageResponse() + public function getAppResponse($path = '/') { $container = $this->getContainer(); /** @var Application $app */ $app = $container->get('Zend\Expressive\Application'); - $request = new ServerRequest([], [], 'https://example.com/', 'GET'); + $request = new ServerRequest([], [], 'https://example.com'.$path, 'GET'); /** @var ResponseInterface $response */ $response = $app($request, new Response()); diff --git a/test/ExpressiveInstallerTest/Router/AuraRouterTest.php b/test/ExpressiveInstallerTest/Router/AuraRouterTest.php index b2cdfb1..35f9b9e 100644 --- a/test/ExpressiveInstallerTest/Router/AuraRouterTest.php +++ b/test/ExpressiveInstallerTest/Router/AuraRouterTest.php @@ -8,7 +8,7 @@ class AuraRouterTest extends InstallerTestCase { - public $testFiles = [ + protected $teardownFiles = [ '/config/container.php', '/config/autoload/routes.global.php', ]; @@ -49,10 +49,8 @@ public function testFullInstall() ]; $this->assertEquals($routes, $config['routes']); - // Test composer.json - // Test home page - $response = $this->getHomePageResponse(); + $response = $this->getAppResponse(); $this->assertEquals(200, $response->getStatusCode()); } @@ -74,10 +72,8 @@ public function testMinimalInstall() ); $this->assertEquals([], $config['routes']); - // Test composer.json - // Test home page - $response = $this->getHomePageResponse(); + $response = $this->getAppResponse('/'); $this->assertEquals(404, $response->getStatusCode()); } } From e2542e473c33d30466888a79ee77b7f2a5019af5 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 09:50:29 +0100 Subject: [PATCH 05/15] Add test for all routers --- .../Router/AuraRouterTest.php | 79 ----------------- test/ExpressiveInstallerTest/RoutersTest.php | 84 +++++++++++++++++++ 2 files changed, 84 insertions(+), 79 deletions(-) delete mode 100644 test/ExpressiveInstallerTest/Router/AuraRouterTest.php create mode 100644 test/ExpressiveInstallerTest/RoutersTest.php diff --git a/test/ExpressiveInstallerTest/Router/AuraRouterTest.php b/test/ExpressiveInstallerTest/Router/AuraRouterTest.php deleted file mode 100644 index 35f9b9e..0000000 --- a/test/ExpressiveInstallerTest/Router/AuraRouterTest.php +++ /dev/null @@ -1,79 +0,0 @@ -installPackage(OptionalPackages::$config['questions']['container']['options'][3], 'copy-files'); - $this->installPackage(OptionalPackages::$config['questions']['router']['options'][1], 'copy-files'); - - // Test container - $container = $this->getContainer(); - $this->assertTrue($container->has(\Zend\Expressive\Helper\UrlHelper::class)); - $this->assertTrue($container->has(\Zend\Expressive\Helper\ServerUrlHelper::class)); - $this->assertTrue($container->has(\Zend\Expressive\Application::class)); - $this->assertTrue($container->has(\Zend\Expressive\Router\RouterInterface::class)); - - // Test config - $config = $container->get('config'); - $this->assertEquals( - \Zend\Expressive\Router\AuraRouter::class, - $config['dependencies']['invokables'][\Zend\Expressive\Router\RouterInterface::class] - ); - - $routes = [ - [ - 'name' => 'home', - 'path' => '/', - 'middleware' => \App\Action\HomePageAction::class, - 'allowed_methods' => ['GET'], - ], - [ - 'name' => 'api.ping', - 'path' => '/api/ping', - 'middleware' => \App\Action\PingAction::class, - 'allowed_methods' => ['GET'], - ], - ]; - $this->assertEquals($routes, $config['routes']); - - // Test home page - $response = $this->getAppResponse(); - $this->assertEquals(200, $response->getStatusCode()); - } - - public function testMinimalInstall() - { - // Install packages - $this->installPackage(OptionalPackages::$config['questions']['container']['options'][3], 'minimal-files'); - $this->installPackage(OptionalPackages::$config['questions']['router']['options'][1], 'minimal-files'); - - // Test container - $container = $this->getContainer(); - $this->assertTrue($container->has(\Zend\Expressive\Router\RouterInterface::class)); - - // Test config - $config = $container->get('config'); - $this->assertEquals( - \Zend\Expressive\Router\AuraRouter::class, - $config['dependencies']['invokables'][\Zend\Expressive\Router\RouterInterface::class] - ); - $this->assertEquals([], $config['routes']); - - // Test home page - $response = $this->getAppResponse('/'); - $this->assertEquals(404, $response->getStatusCode()); - } -} diff --git a/test/ExpressiveInstallerTest/RoutersTest.php b/test/ExpressiveInstallerTest/RoutersTest.php new file mode 100644 index 0000000..28f7a3f --- /dev/null +++ b/test/ExpressiveInstallerTest/RoutersTest.php @@ -0,0 +1,84 @@ + 'home', + 'path' => '/', + 'middleware' => HomePageAction::class, + 'allowed_methods' => ['GET'], + ], + [ + 'name' => 'api.ping', + 'path' => '/api/ping', + 'middleware' => PingAction::class, + 'allowed_methods' => ['GET'], + ], + ]; + + /** + * @dataProvider routerProvider + */ + public function testFullInstall( + $containerOption, + $routerOption, + $copyFilesKey, + $expectedResponseStatusCode, + $expectedRoutes, + $expectedRouter + ) { + // Install packages + $this->installPackage( + OptionalPackages::$config['questions']['container']['options'][$containerOption], + $copyFilesKey + ); + $this->installPackage( + OptionalPackages::$config['questions']['router']['options'][$routerOption], + $copyFilesKey + ); + + // Test container + $container = $this->getContainer(); + $this->assertTrue($container->has(Router\RouterInterface::class)); + + // Test config + $config = $container->get('config'); + $this->assertEquals( + $expectedRouter, + $config['dependencies']['invokables'][Router\RouterInterface::class] + ); + $this->assertEquals($expectedRoutes, $config['routes']); + + // Test home page + $response = $this->getAppResponse(); + $this->assertEquals($expectedResponseStatusCode, $response->getStatusCode()); + } + + public function routerProvider() + { + // $containerOption, $routerOption, $copyFilesKey, $expectedResponseStatusCode, $expectedRoutes, $expectedRouter + return [ + [3, 1, 'copy-files', 200, $this->expectedRoutes, Router\AuraRouter::class], + [3, 2, 'copy-files', 200, $this->expectedRoutes, Router\FastRouteRouter::class], + [3, 3, 'copy-files', 200, $this->expectedRoutes, Router\ZendRouter::class], + + [3, 1, 'minimal-files', 404, [], Router\AuraRouter::class], + [3, 2, 'minimal-files', 404, [], Router\FastRouteRouter::class], + [3, 3, 'minimal-files', 404, [], Router\ZendRouter::class], + ]; + } +} From 54f2e1c14debe10a6b29401b3b6f9ee8327df34d Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 10:07:18 +0100 Subject: [PATCH 06/15] Add container tests --- .../ContainersTest.php | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 test/ExpressiveInstallerTest/ContainersTest.php diff --git a/test/ExpressiveInstallerTest/ContainersTest.php b/test/ExpressiveInstallerTest/ContainersTest.php new file mode 100644 index 0000000..3b18dd3 --- /dev/null +++ b/test/ExpressiveInstallerTest/ContainersTest.php @@ -0,0 +1,67 @@ +installPackage( + OptionalPackages::$config['questions']['container']['options'][$containerOption], + $copyFilesKey + ); + $this->installPackage( + OptionalPackages::$config['questions']['router']['options'][$routerOption], + $copyFilesKey + ); + + // Test container + $container = $this->getContainer(); + $this->assertInstanceOf(ContainerInterface::class, $container); + $this->assertInstanceOf($expectedContainer, $container); + $this->assertTrue($container->has(Expressive\Helper\UrlHelper::class)); + $this->assertTrue($container->has(Expressive\Helper\ServerUrlHelper::class)); + $this->assertTrue($container->has(Expressive\Application::class)); + $this->assertTrue($container->has(Expressive\Router\RouterInterface::class)); + + // Test home page + $response = $this->getAppResponse(); + $this->assertEquals($expectedResponseStatusCode, $response->getStatusCode()); + } + + public function containerProvider() + { + // $containerOption, $routerOption, $copyFilesKey, $expectedResponseStatusCode, $expectedContainer + return [ + [1, 2, 'copy-files', 200, AuraContainer::class], + [2, 2, 'copy-files', 200, PimpleInteropContainer::class], + [3, 2, 'copy-files', 200, ZendServiceManagerContainer::class], + + [1, 2, 'minimal-files', 404, AuraContainer::class], + [2, 2, 'minimal-files', 404, PimpleInteropContainer::class], + [3, 2, 'minimal-files', 404, ZendServiceManagerContainer::class], + ]; + } +} From 96018935f8f468903545eae5e76a71f31c94d879 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 11:00:35 +0100 Subject: [PATCH 07/15] Add template renderer tests --- .../TemplateRenderersTest.php | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 test/ExpressiveInstallerTest/TemplateRenderersTest.php diff --git a/test/ExpressiveInstallerTest/TemplateRenderersTest.php b/test/ExpressiveInstallerTest/TemplateRenderersTest.php new file mode 100644 index 0000000..85ae6dc --- /dev/null +++ b/test/ExpressiveInstallerTest/TemplateRenderersTest.php @@ -0,0 +1,89 @@ +installPackage( + OptionalPackages::$config['questions']['container']['options'][$containerOption], + $copyFilesKey + ); + $this->installPackage( + OptionalPackages::$config['questions']['router']['options'][$routerOption], + $copyFilesKey + ); + $this->installPackage( + OptionalPackages::$config['questions']['template-engine']['options'][$templateRendererOption], + $copyFilesKey + ); + + // Test container + $container = $this->getContainer(); + $this->assertTrue($container->has(Expressive\Application::class)); + $this->assertTrue($container->has('Zend\Expressive\FinalHandler')); + + // Test config + $config = $container->get('config'); + $this->assertEquals( + Expressive\Container\TemplatedErrorHandlerFactory::class, + $config['dependencies']['factories']['Zend\Expressive\FinalHandler'] + ); + + + // Test template renderer + $templateRenderer = $container->get(Expressive\Template\TemplateRendererInterface::class); + $this->assertInstanceOf(Expressive\Template\TemplateRendererInterface::class, $templateRenderer); + $this->assertInstanceOf($expectedTemplateRenderer, $templateRenderer); + + if ($copyFilesKey == 'copy-files') { + // Test home page for full install only, otherwise you get invalid template name errors + $response = $this->getAppResponse(); + $this->assertEquals($expectedResponseStatusCode, $response->getStatusCode()); + } + } + + public function templateRendererProvider() + { + // $containerOption, $routerOption, $templateRendererOption, $copyFilesKey, $expectedResponseStatusCode, + // $expectedTemplateRenderer + return [ + [3, 2, 1, 'copy-files', 200, Expressive\Plates\PlatesRenderer::class], + [3, 2, 2, 'copy-files', 200, Expressive\Twig\TwigRenderer::class], + [3, 2, 3, 'copy-files', 200, Expressive\ZendView\ZendViewRenderer::class], + + [3, 2, 1, 'minimal-files', 404, Expressive\Plates\PlatesRenderer::class], + [3, 2, 2, 'minimal-files', 404, Expressive\Twig\TwigRenderer::class], + [3, 2, 3, 'minimal-files', 404, Expressive\ZendView\ZendViewRenderer::class], + ]; + } +} From 9d56446baf8f404ebfc34aa6388f86c8be45efa2 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 11:01:21 +0100 Subject: [PATCH 08/15] Rename tests --- test/ExpressiveInstallerTest/ContainersTest.php | 2 +- test/ExpressiveInstallerTest/RoutersTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/ExpressiveInstallerTest/ContainersTest.php b/test/ExpressiveInstallerTest/ContainersTest.php index 3b18dd3..9235a51 100644 --- a/test/ExpressiveInstallerTest/ContainersTest.php +++ b/test/ExpressiveInstallerTest/ContainersTest.php @@ -20,7 +20,7 @@ class ContainersTest extends InstallerTestCase /** * @dataProvider containerProvider */ - public function testFullInstall( + public function testContainer( $containerOption, $routerOption, $copyFilesKey, diff --git a/test/ExpressiveInstallerTest/RoutersTest.php b/test/ExpressiveInstallerTest/RoutersTest.php index 28f7a3f..1f88724 100644 --- a/test/ExpressiveInstallerTest/RoutersTest.php +++ b/test/ExpressiveInstallerTest/RoutersTest.php @@ -33,7 +33,7 @@ class RoutersTest extends InstallerTestCase /** * @dataProvider routerProvider */ - public function testFullInstall( + public function testRouter( $containerOption, $routerOption, $copyFilesKey, From 02493e73f96f60e7a2caedb7e3667b866839e720 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 11:14:04 +0100 Subject: [PATCH 09/15] Remove test dependencies from composer and the installer tests --- composer.json | 5 ++--- src/ExpressiveInstaller/OptionalPackages.php | 21 ++++++++++++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index 35dc1fe..93f9d41 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "authors": [ { "name": "Geert Eltink", - "homepage": "https://xtreamwayz.github.io/" + "homepage": "https://xtreamwayz.com/" } ], "extra": { @@ -23,11 +23,10 @@ "zendframework/zend-stdlib": "~2.7" }, "require-dev": { - "composer/composer": ">=1.0.0-alpha11", "phpunit/phpunit": "^4.8", "squizlabs/php_codesniffer": "^2.3", "filp/whoops": "^1.1", - + "composer/composer": ">=1.0.0-alpha11", "zendframework/zend-expressive-aurarouter": "^1.0", "zendframework/zend-expressive-fastroute": "^1.0", "zendframework/zend-expressive-zendrouter": "^1.0", diff --git a/src/ExpressiveInstaller/OptionalPackages.php b/src/ExpressiveInstaller/OptionalPackages.php index 61eb370..57d514a 100644 --- a/src/ExpressiveInstaller/OptionalPackages.php +++ b/src/ExpressiveInstaller/OptionalPackages.php @@ -162,8 +162,19 @@ public static function install(Event $event) // House keeping $io->write("Remove installer"); - // Remove composer source + // Remove test dependencies unset(self::$composerDefinition['require-dev']['composer/composer']); + unset(self::$composerDefinition['require-dev']['zendframework/zend-expressive-aurarouter']); + unset(self::$composerDefinition['require-dev']['zendframework/zend-expressive-fastroute']); + unset(self::$composerDefinition['require-dev']['zendframework/zend-expressive-zendrouter']); + unset(self::$composerDefinition['require-dev']['zendframework/zend-expressive-platesrenderer']); + unset(self::$composerDefinition['require-dev']['zendframework/zend-expressive-twigrenderer']); + unset(self::$composerDefinition['require-dev']['zendframework/zend-expressive-zendviewrenderer']); + unset(self::$composerDefinition['require-dev']['zendframework/zend-servicemanager']); + unset(self::$composerDefinition['require-dev']['ocramius/proxy-manager']); + unset(self::$composerDefinition['require-dev']['aura/di']); + unset(self::$composerDefinition['require-dev']['mouf/pimple-interop']); + unset(self::$composerDefinition['autoload-dev']['psr-4']['ExpressiveInstallerTest\\']); // Remove installer data unset(self::$composerDefinition['extra']['optional-packages']); @@ -189,7 +200,7 @@ public static function install(Event $event) self::removeDefaultMiddleware($io, $projectRoot); } - self::cleanUp($io); + self::cleanUp($io, $projectRoot); } /** @@ -199,11 +210,13 @@ public static function install(Event $event) * this one) and assets (including configuration and templates). * * @param IOInterface $io + * @param string $projectRoot */ - private static function cleanUp(IOInterface $io) + private static function cleanUp(IOInterface $io, $projectRoot) { - $io->write("Removing Expressive installer classes and configuration"); + $io->write("Removing Expressive installer classes, configuration and tests"); self::recursiveRmdir(__DIR__); + self::recursiveRmdir($projectRoot . '/test/ExpressiveInstallerTest'); } /** From 03068886d750f16cf8c1faad8e15aa0fa284dbe5 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 11:37:23 +0100 Subject: [PATCH 10/15] Add installer test documentation --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 23de4e8..2ccaa0e 100644 --- a/README.md +++ b/README.md @@ -50,3 +50,21 @@ $ composer serve ``` You can then browse to http://localhost:8080. + +## Skeleton Development + +This section applies only if you cloned this repo with ``git clone``, not when you installed expressive with +``composer create-project ...``. + +If you want to run tests against the installer, you need to clone this repo and setup all dependencies with composer. +Make sure you **prevent composer running scripts** with ``--no-scripts``, otherwise it will remove the installer and +all tests. + +```bash +$ composer install --no-scripts +$ vendor/bin/phpunit +``` + +Please note that the installer tests remove installed config files and templates before and after running the tests. + +Before contributing read [this](CONTRIBUTING.md). From 777bfc50d847865e4a76f478204913f4b6515a30 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Fri, 18 Dec 2015 11:49:12 +0100 Subject: [PATCH 11/15] Fix spacing --- test/ExpressiveInstallerTest/ContainersTest.php | 1 - test/ExpressiveInstallerTest/RoutersTest.php | 1 - test/ExpressiveInstallerTest/TemplateRenderersTest.php | 2 -- 3 files changed, 4 deletions(-) diff --git a/test/ExpressiveInstallerTest/ContainersTest.php b/test/ExpressiveInstallerTest/ContainersTest.php index 9235a51..35cca7b 100644 --- a/test/ExpressiveInstallerTest/ContainersTest.php +++ b/test/ExpressiveInstallerTest/ContainersTest.php @@ -11,7 +11,6 @@ class ContainersTest extends InstallerTestCase { - protected $teardownFiles = [ '/config/container.php', '/config/autoload/routes.global.php', diff --git a/test/ExpressiveInstallerTest/RoutersTest.php b/test/ExpressiveInstallerTest/RoutersTest.php index 1f88724..19c9460 100644 --- a/test/ExpressiveInstallerTest/RoutersTest.php +++ b/test/ExpressiveInstallerTest/RoutersTest.php @@ -9,7 +9,6 @@ class RoutersTest extends InstallerTestCase { - protected $teardownFiles = [ '/config/container.php', '/config/autoload/routes.global.php', diff --git a/test/ExpressiveInstallerTest/TemplateRenderersTest.php b/test/ExpressiveInstallerTest/TemplateRenderersTest.php index 85ae6dc..d4bcac8 100644 --- a/test/ExpressiveInstallerTest/TemplateRenderersTest.php +++ b/test/ExpressiveInstallerTest/TemplateRenderersTest.php @@ -7,7 +7,6 @@ class TemplateRenderersTest extends InstallerTestCase { - protected $teardownFiles = [ '/config/container.php', '/config/autoload/routes.global.php', @@ -59,7 +58,6 @@ public function testTemplateRenderer( $config['dependencies']['factories']['Zend\Expressive\FinalHandler'] ); - // Test template renderer $templateRenderer = $container->get(Expressive\Template\TemplateRendererInterface::class); $this->assertInstanceOf(Expressive\Template\TemplateRendererInterface::class, $templateRenderer); From 8e79a944f6b3edf14ddbcf36e832662ba12f92a9 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Mon, 21 Dec 2015 18:04:06 +0100 Subject: [PATCH 12/15] Use keys to detail tests --- test/ExpressiveInstallerTest/ContainersTest.php | 17 ++++++++--------- test/ExpressiveInstallerTest/RoutersTest.php | 13 ++++++------- .../TemplateRenderersTest.php | 13 ++++++------- 3 files changed, 20 insertions(+), 23 deletions(-) diff --git a/test/ExpressiveInstallerTest/ContainersTest.php b/test/ExpressiveInstallerTest/ContainersTest.php index 35cca7b..20a7bd8 100644 --- a/test/ExpressiveInstallerTest/ContainersTest.php +++ b/test/ExpressiveInstallerTest/ContainersTest.php @@ -2,11 +2,11 @@ namespace ExpressiveInstallerTest; +use Aura\Di\Container as AuraContainer; use ExpressiveInstaller\OptionalPackages; use Interop\Container\ContainerInterface; -use Zend\Expressive; -use Aura\Di\Container as AuraContainer; use Interop\Container\Pimple\PimpleInterop as PimpleInteropContainer; +use Zend\Expressive; use Zend\ServiceManager\ServiceManager as ZendServiceManagerContainer; class ContainersTest extends InstallerTestCase @@ -54,13 +54,12 @@ public function containerProvider() { // $containerOption, $routerOption, $copyFilesKey, $expectedResponseStatusCode, $expectedContainer return [ - [1, 2, 'copy-files', 200, AuraContainer::class], - [2, 2, 'copy-files', 200, PimpleInteropContainer::class], - [3, 2, 'copy-files', 200, ZendServiceManagerContainer::class], - - [1, 2, 'minimal-files', 404, AuraContainer::class], - [2, 2, 'minimal-files', 404, PimpleInteropContainer::class], - [3, 2, 'minimal-files', 404, ZendServiceManagerContainer::class], + 'aura-minimal' => [1, 2, 'minimal-files', 404, AuraContainer::class], + 'aura-full' => [1, 2, 'copy-files', 200, AuraContainer::class], + 'pimple-minimal' => [2, 2, 'minimal-files', 404, PimpleInteropContainer::class], + 'pimple-full' => [2, 2, 'copy-files', 200, PimpleInteropContainer::class], + 'zend-sm-minimal' => [3, 2, 'minimal-files', 404, ZendServiceManagerContainer::class], + 'zend-sm-full' => [3, 2, 'copy-files', 200, ZendServiceManagerContainer::class], ]; } } diff --git a/test/ExpressiveInstallerTest/RoutersTest.php b/test/ExpressiveInstallerTest/RoutersTest.php index 19c9460..dc1018f 100644 --- a/test/ExpressiveInstallerTest/RoutersTest.php +++ b/test/ExpressiveInstallerTest/RoutersTest.php @@ -71,13 +71,12 @@ public function routerProvider() { // $containerOption, $routerOption, $copyFilesKey, $expectedResponseStatusCode, $expectedRoutes, $expectedRouter return [ - [3, 1, 'copy-files', 200, $this->expectedRoutes, Router\AuraRouter::class], - [3, 2, 'copy-files', 200, $this->expectedRoutes, Router\FastRouteRouter::class], - [3, 3, 'copy-files', 200, $this->expectedRoutes, Router\ZendRouter::class], - - [3, 1, 'minimal-files', 404, [], Router\AuraRouter::class], - [3, 2, 'minimal-files', 404, [], Router\FastRouteRouter::class], - [3, 3, 'minimal-files', 404, [], Router\ZendRouter::class], + 'aura-minimal' => [3, 1, 'minimal-files', 404, [], Router\AuraRouter::class], + 'aura-full' => [3, 1, 'copy-files', 200, $this->expectedRoutes, Router\AuraRouter::class], + 'fastroute-minimal' => [3, 2, 'minimal-files', 404, [], Router\FastRouteRouter::class], + 'fastroute-full' => [3, 2, 'copy-files', 200, $this->expectedRoutes, Router\FastRouteRouter::class], + 'zend-router-minimal' => [3, 3, 'minimal-files', 404, [], Router\ZendRouter::class], + 'zend-router-full' => [3, 3, 'copy-files', 200, $this->expectedRoutes, Router\ZendRouter::class], ]; } } diff --git a/test/ExpressiveInstallerTest/TemplateRenderersTest.php b/test/ExpressiveInstallerTest/TemplateRenderersTest.php index d4bcac8..2efabd6 100644 --- a/test/ExpressiveInstallerTest/TemplateRenderersTest.php +++ b/test/ExpressiveInstallerTest/TemplateRenderersTest.php @@ -75,13 +75,12 @@ public function templateRendererProvider() // $containerOption, $routerOption, $templateRendererOption, $copyFilesKey, $expectedResponseStatusCode, // $expectedTemplateRenderer return [ - [3, 2, 1, 'copy-files', 200, Expressive\Plates\PlatesRenderer::class], - [3, 2, 2, 'copy-files', 200, Expressive\Twig\TwigRenderer::class], - [3, 2, 3, 'copy-files', 200, Expressive\ZendView\ZendViewRenderer::class], - - [3, 2, 1, 'minimal-files', 404, Expressive\Plates\PlatesRenderer::class], - [3, 2, 2, 'minimal-files', 404, Expressive\Twig\TwigRenderer::class], - [3, 2, 3, 'minimal-files', 404, Expressive\ZendView\ZendViewRenderer::class], + 'plates-minimal' => [3, 2, 1, 'minimal-files', 404, Expressive\Plates\PlatesRenderer::class], + 'plates-full' => [3, 2, 1, 'copy-files', 200, Expressive\Plates\PlatesRenderer::class], + 'twig-minimal' => [3, 2, 2, 'minimal-files', 404, Expressive\Twig\TwigRenderer::class], + 'twig-full' => [3, 2, 2, 'copy-files', 200, Expressive\Twig\TwigRenderer::class], + 'zend-view-minimal' => [3, 2, 3, 'minimal-files', 404, Expressive\ZendView\ZendViewRenderer::class], + 'zend-view-full' => [3, 2, 3, 'copy-files', 200, Expressive\ZendView\ZendViewRenderer::class], ]; } } From 7163f3065bb252c986beab60ac90b005fa11ad06 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Mon, 21 Dec 2015 18:09:17 +0100 Subject: [PATCH 13/15] Reveal io later so we can add assertions if needed --- test/ExpressiveInstallerTest/InstallerTestCase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/ExpressiveInstallerTest/InstallerTestCase.php b/test/ExpressiveInstallerTest/InstallerTestCase.php index 6260336..582c963 100644 --- a/test/ExpressiveInstallerTest/InstallerTestCase.php +++ b/test/ExpressiveInstallerTest/InstallerTestCase.php @@ -37,7 +37,7 @@ public function setup() $this->cleanup(); - $this->io = $this->prophesize('Composer\IO\IOInterface')->reveal(); + $this->io = $this->prophesize('Composer\IO\IOInterface'); // Get composer.json $composerFile = Factory::getComposerFile(); @@ -69,7 +69,7 @@ public function installPackage($config, $copyFilesKey) // Copy files if (isset($config[$copyFilesKey])) { foreach ($config[$copyFilesKey] as $source => $target) { - OptionalPackages::copyFile($this->io, $this->projectRoot, $source, $target); + OptionalPackages::copyFile($this->io->reveal(), $this->projectRoot, $source, $target); } } } From 2b917d5f301abf1e107da40dfe7b069a7a0ae3f2 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Mon, 21 Dec 2015 18:11:36 +0100 Subject: [PATCH 14/15] Use oxford comma --- src/ExpressiveInstaller/OptionalPackages.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ExpressiveInstaller/OptionalPackages.php b/src/ExpressiveInstaller/OptionalPackages.php index 57d514a..0bff610 100644 --- a/src/ExpressiveInstaller/OptionalPackages.php +++ b/src/ExpressiveInstaller/OptionalPackages.php @@ -214,7 +214,7 @@ public static function install(Event $event) */ private static function cleanUp(IOInterface $io, $projectRoot) { - $io->write("Removing Expressive installer classes, configuration and tests"); + $io->write("Removing Expressive installer classes, configuration, and tests"); self::recursiveRmdir(__DIR__); self::recursiveRmdir($projectRoot . '/test/ExpressiveInstallerTest'); } From 10388624a5a2eed7547eba3c458bd5845f842d61 Mon Sep 17 00:00:00 2001 From: Geert Eltink Date: Mon, 21 Dec 2015 20:50:35 +0100 Subject: [PATCH 15/15] Fix tests - do full template tests first so the template paths are created --- test/ExpressiveInstallerTest/TemplateRenderersTest.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/test/ExpressiveInstallerTest/TemplateRenderersTest.php b/test/ExpressiveInstallerTest/TemplateRenderersTest.php index 2efabd6..f91c836 100644 --- a/test/ExpressiveInstallerTest/TemplateRenderersTest.php +++ b/test/ExpressiveInstallerTest/TemplateRenderersTest.php @@ -75,12 +75,14 @@ public function templateRendererProvider() // $containerOption, $routerOption, $templateRendererOption, $copyFilesKey, $expectedResponseStatusCode, // $expectedTemplateRenderer return [ - 'plates-minimal' => [3, 2, 1, 'minimal-files', 404, Expressive\Plates\PlatesRenderer::class], + // Full tests first so all the template paths are created before the minimal tests start 'plates-full' => [3, 2, 1, 'copy-files', 200, Expressive\Plates\PlatesRenderer::class], - 'twig-minimal' => [3, 2, 2, 'minimal-files', 404, Expressive\Twig\TwigRenderer::class], 'twig-full' => [3, 2, 2, 'copy-files', 200, Expressive\Twig\TwigRenderer::class], - 'zend-view-minimal' => [3, 2, 3, 'minimal-files', 404, Expressive\ZendView\ZendViewRenderer::class], 'zend-view-full' => [3, 2, 3, 'copy-files', 200, Expressive\ZendView\ZendViewRenderer::class], + // Minimal tests must be after the full tests !!! + 'plates-minimal' => [3, 2, 1, 'minimal-files', 404, Expressive\Plates\PlatesRenderer::class], + 'twig-minimal' => [3, 2, 2, 'minimal-files', 404, Expressive\Twig\TwigRenderer::class], + 'zend-view-minimal' => [3, 2, 3, 'minimal-files', 404, Expressive\ZendView\ZendViewRenderer::class], ]; } }