public function testRequestMinimalInstallIsFalse() { $io = $this->prophesize('Composer\\IO\\IOInterface'); $io->ask(Argument::any(), Argument::any())->willReturn('n'); $answer = OptionalPackages::requestMinimal($io->reveal()); $this->assertFalse($answer); }
/** * @dataProvider templateRendererProvider */ public function testTemplateRenderer($containerOption, $routerOption, $templateRendererOption, $copyFilesKey, $expectedResponseStatusCode, $expectedTemplateRenderer) { $io = $this->prophesize('Composer\\IO\\IOInterface'); $config = $this->getConfig(); // Install container $containerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['container'], $containerOption, $copyFilesKey); $this->assertTrue($containerResult); // Install router $routerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['router'], $routerOption, $copyFilesKey); $this->assertTrue($routerResult); // Install template engine $templateEngineResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['template-engine'], $templateRendererOption, $copyFilesKey); $this->assertTrue($templateEngineResult); // 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 testDevDependenciesAreRemoved() { // Prepare the installer OptionalPackages::removeDevDependencies(); $this->assertComposerHasPackages($this->standardDependencies); $this->assertComposerNotHasPackages($this->devDependencies); }
public function testRemoveLastLine() { $string = "foo\nbar\nbaz\nqux\nquux"; $actual = OptionalPackages::removeLinesContainingStrings(['quux'], $string); $expected = "foo\nbar\nbaz\nqux\n"; $this->assertEquals($expected, $actual); }
/** * @dataProvider packageProvider */ public function testAddPackage($packageName, $packageVersion, $expectedStability) { // Prepare the installer OptionalPackages::removeDevDependencies(); $io = $this->prophesize('Composer\\IO\\IOInterface'); $io->write(Argument::containingString('Adding package'))->shouldBeCalled(); OptionalPackages::addPackage($io->reveal(), $packageName, $packageVersion); $this->assertComposerHasPackages(['zendframework/zend-stdlib']); $stabilityFlags = $this->getStabilityFlags(); // Stability flags are only set for non-stable packages if ($expectedStability) { $this->assertArrayHasKey($packageName, $stabilityFlags); $this->assertEquals($expectedStability, $stabilityFlags[$packageName]); } }
public function testAnsweredWithPackage() { // Prepare the installer OptionalPackages::removeDevDependencies(); $io = $this->prophesize('Composer\\IO\\IOInterface'); $io->write(Argument::containingString('Adding package <info>league/container</info>'))->shouldBeCalled(); $io->write(Argument::containingString('<warning>You need to edit public/index.php'))->shouldBeCalled(); $config = $this->getConfig(); $question = $config['questions']['container']; $answer = 'league/container:2.2.0'; $copyFilesKey = 'minimal-files'; $result = OptionalPackages::processAnswer($io->reveal(), $question, $answer, $copyFilesKey); $this->assertTrue($result); $this->assertFileNotExists($this->getProjectRoot() . '/config/container.php'); $this->assertComposerHasPackages(['league/container']); }
/** * @dataProvider errorHandlerProvider */ public function testErrorHandler($containerOption, $errorHandlerOption, $copyFilesKey, $expectedErrorHandler) { $io = $this->prophesize('Composer\\IO\\IOInterface'); $config = $this->getConfig(); // Install container $containerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['container'], $containerOption, $copyFilesKey); $this->assertTrue($containerResult); // Install error handler $containerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['error-handler'], $errorHandlerOption, $copyFilesKey); $this->assertTrue($containerResult); // Test container $container = $this->getContainer(); $this->assertTrue($container->has('Zend\\Expressive\\FinalHandler')); $config = $container->get('config'); $this->assertEquals($expectedErrorHandler, $config['dependencies']['factories']['Zend\\Expressive\\FinalHandler']); }
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->reveal(), $this->projectRoot, $source, $target); } } }
public function testInstallerDataIsRemoved() { // Mimic answered question $refDefinition = new ReflectionProperty(OptionalPackages::class, 'composerDefinition'); $refDefinition->setAccessible(true); $definition = $refDefinition->getValue(); $definition['extra']['optional-packages']['router'] = 3; $refDefinition->setValue($definition); // Test if the value is stored $definition = $this->getComposerDefinition(); $this->assertTrue(isset($definition['extra']['optional-packages'])); // Remove the installer OptionalPackages::removeInstallerFromDefinition(); // Test if the value is removed $definition = $this->getComposerDefinition(); $this->assertFalse(isset($definition['extra']['optional-packages'])); $this->assertFalse(isset($definition['extra'])); }
/** * @dataProvider routerProvider */ public function testRouter($containerOption, $routerOption, $copyFilesKey, $expectedResponseStatusCode, $expectedRoutes, $expectedRouter) { $io = $this->prophesize('Composer\\IO\\IOInterface'); $config = $this->getConfig(); // Install container $containerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['container'], $containerOption, $copyFilesKey); $this->assertTrue($containerResult); // Install router $routerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['router'], $routerOption, $copyFilesKey); $this->assertTrue($routerResult); // 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()); }
/** * @dataProvider containerProvider */ public function testContainer($containerOption, $routerOption, $copyFilesKey, $expectedResponseStatusCode, $expectedContainer) { $io = $this->prophesize('Composer\\IO\\IOInterface'); $config = $this->getConfig(); // Install container $containerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['container'], $containerOption, $copyFilesKey); $this->assertTrue($containerResult); // Install router $routerResult = OptionalPackages::processAnswer($io->reveal(), $config['questions']['router'], $routerOption, $copyFilesKey); $this->assertTrue($routerResult); // 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()); }