questionHelper = $this->prophesize(QuestionHelper::class); $this->plugin = new UrlShortenerConfigCustomizerPlugin($this->questionHelper->reveal()); } /** * @test */ public function configIsRequestedToTheUser() { /** @var MethodProphecy $askSecret */ $askSecret = $this->questionHelper->ask(Argument::cetera())->willReturn('something'); $config = new CustomizableAppConfig(); $this->plugin->process(new ArrayInput([]), new NullOutput(), $config); $this->assertTrue($config->hasUrlShortener()); $this->assertEquals([ 'SCHEMA' => 'something', 'HOSTNAME' => 'something', 'CHARS' => 'something', ], $config->getUrlShortener()); $askSecret->shouldHaveBeenCalledTimes(3); } /** * @test */ public function overwriteIsRequestedIfValueIsAlreadySet() { /** @var MethodProphecy $ask */ $ask = $this->questionHelper->ask(Argument::cetera())->will(function (array $args) { $last = array_pop($args); return $last instanceof ConfirmationQuestion ? false : 'foo'; }); $config = new CustomizableAppConfig(); $config->setUrlShortener([ 'SCHEMA' => 'bar', 'HOSTNAME' => 'bar', 'CHARS' => 'bar', ]); $this->plugin->process(new ArrayInput([]), new NullOutput(), $config); $this->assertEquals([ 'SCHEMA' => 'foo', 'HOSTNAME' => 'foo', 'CHARS' => 'foo', ], $config->getUrlShortener()); $ask->shouldHaveBeenCalledTimes(4); } /** * @test */ public function existingValueIsKeptIfRequested() { /** @var MethodProphecy $ask */ $ask = $this->questionHelper->ask(Argument::cetera())->willReturn(true); $config = new CustomizableAppConfig(); $config->setUrlShortener([ 'SCHEMA' => 'foo', 'HOSTNAME' => 'foo', 'CHARS' => 'foo', ]); $this->plugin->process(new ArrayInput([]), new NullOutput(), $config); $this->assertEquals([ 'SCHEMA' => 'foo', 'HOSTNAME' => 'foo', 'CHARS' => 'foo', ], $config->getUrlShortener()); $ask->shouldHaveBeenCalledTimes(1); } }