diff --git a/app/config.php b/app/config.php index f0d85155..cbd495fc 100644 --- a/app/config.php +++ b/app/config.php @@ -246,10 +246,7 @@ SyntaxHighlighter::class => factory(PsxFactory::class), PsxFactory::class => object(), ResetProgress::class => function (ContainerInterface $c) { - return new ResetProgress( - $c->get(UserStateSerializer::class), - $c->get(OutputInterface::class) - ); + return new ResetProgress($c->get(UserStateSerializer::class)); }, ResultRendererFactory::class => object(), ResultsRenderer::class => function (ContainerInterface $c) { diff --git a/composer.json b/composer.json index fc6223e6..24e67c79 100644 --- a/composer.json +++ b/composer.json @@ -23,9 +23,9 @@ "symfony/process": "^2.3|^3.0", "symfony/filesystem": "^2.3|^3.0", "fzaninotto/faker": "^1.5", - "aydin-hassan/cli-md-renderer": "^2.0", + "aydin-hassan/cli-md-renderer": "^2.1", "php-school/psx": "~1.0", - "php-school/cli-menu": "^1.2.0", + "php-school/cli-menu": "^2.0", "beberlei/assert": "^2.4", "psr/http-message": "^1.0", "zendframework/zend-diactoros": "^1.1.3", diff --git a/composer.lock b/composer.lock index 514e0ecb..7882cc32 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "6131dd4336b6da5ef329e0c40ecd285e", + "content-hash": "87289bfee8ab370b8af121daeef32638", "packages": [ { "name": "aydin-hassan/cli-md-renderer", @@ -536,20 +536,21 @@ }, { "name": "php-school/cli-menu", - "version": "1.2.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-school/cli-menu.git", - "reference": "c7bdb1b67a9d394151b8c4bc78f8d1594d21c0c5" + "reference": "5472d7d4fc7b5753820cfb2628f4bf907937e90c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-school/cli-menu/zipball/c7bdb1b67a9d394151b8c4bc78f8d1594d21c0c5", - "reference": "c7bdb1b67a9d394151b8c4bc78f8d1594d21c0c5", + "url": "https://api.github.com/repos/php-school/cli-menu/zipball/5472d7d4fc7b5753820cfb2628f4bf907937e90c", + "reference": "5472d7d4fc7b5753820cfb2628f4bf907937e90c", "shasum": "" }, "require": { "beberlei/assert": "^2.4", + "ext-posix": "*", "php": ">=5.6" }, "require-dev": { @@ -585,7 +586,7 @@ "phpschool", "terminal" ], - "time": "2016-10-03T18:37:45+00:00" + "time": "2016-10-27T21:31:02+00:00" }, { "name": "php-school/psx", diff --git a/src/MenuItem/ResetProgress.php b/src/MenuItem/ResetProgress.php index 53ef6be4..e5f82703 100644 --- a/src/MenuItem/ResetProgress.php +++ b/src/MenuItem/ResetProgress.php @@ -18,20 +18,13 @@ class ResetProgress * @var UserStateSerializer */ private $userStateSerializer; - - /** - * @var OutputInterface - */ - private $output; /** * @param UserStateSerializer $userStateSerializer - * @param OutputInterface $output */ - public function __construct(UserStateSerializer $userStateSerializer, OutputInterface $output) + public function __construct(UserStateSerializer $userStateSerializer) { $this->userStateSerializer = $userStateSerializer; - $this->output = $output; } /** @@ -40,6 +33,17 @@ public function __construct(UserStateSerializer $userStateSerializer, OutputInte public function __invoke(CliMenu $menu) { $this->userStateSerializer->serialize(new UserState); - $this->output->writeLine("Status Reset!"); + + $items = $menu + ->getParent() + ->getItems(); + + foreach ($items as $item) { + $item->hideItemExtra(); + } + + $confirm = $menu->confirm('Status Reset!'); + $confirm->getStyle()->setBg('magenta')->setFg('black'); + $confirm->display('OK'); } } diff --git a/test/MenuItem/ResetProgressTest.php b/test/MenuItem/ResetProgressTest.php index 0ba0f985..654bcd16 100644 --- a/test/MenuItem/ResetProgressTest.php +++ b/test/MenuItem/ResetProgressTest.php @@ -3,6 +3,10 @@ namespace PhpSchool\PhpWorkshopTest\MenuItem; use PhpSchool\CliMenu\CliMenu; +use PhpSchool\CliMenu\Dialogue\Confirm; +use PhpSchool\CliMenu\MenuItem\MenuItemInterface; +use PhpSchool\CliMenu\MenuStyle; +use PhpSchool\CliMenu\Terminal\TerminalInterface; use PhpSchool\PhpWorkshop\MenuItem\ResetProgress; use PhpSchool\PhpWorkshop\Output\OutputInterface; use PhpSchool\PhpWorkshop\UserState; @@ -16,22 +20,53 @@ */ class ResetProgressTest extends PHPUnit_Framework_TestCase { - public function testResetProgress() + public function testResetProgressDisablesParentMenuItems() { - $menu = $this->createMock(CliMenu::class); + $item1 = $this->createMock(MenuItemInterface::class); + $item2 = $this->createMock(MenuItemInterface::class); + + $item1 + ->expects($this->once()) + ->method('hideItemExtra'); + + $item2 + ->expects($this->once()) + ->method('hideItemExtra'); + + $terminal = $this->createMock(TerminalInterface::class); + + $menu = new CliMenu('Menu', [$item1, $item2], $terminal); + + $confirm = $this->createMock(Confirm::class); + $confirm + ->expects($this->once()) + ->method('getStyle') + ->willReturn(new MenuStyle($terminal)); + + $confirm + ->expects($this->once()) + ->method('display') + ->with('OK'); + + $subMenu = $this->getMockBuilder(CliMenu::class) + ->setMethods(['confirm']) + ->setConstructorArgs(['Sub Menu', [], $terminal]) + ->getMock(); + + $subMenu->setParent($menu); + + $subMenu + ->expects($this->once()) + ->method('confirm') + ->willReturn($confirm); + $userStateSerializer = $this->createMock(UserStateSerializer::class); $userStateSerializer ->expects($this->once()) ->method('serialize') ->with($this->isInstanceOf(UserState::class)); - $output = $this->createMock(OutputInterface::class); - $output - ->expects($this->once()) - ->method('writeLine') - ->with(("Status Reset!")); - - $resetProgress = new ResetProgress($userStateSerializer, $output); - $resetProgress->__invoke($menu); + $resetProgress = new ResetProgress($userStateSerializer); + $resetProgress->__invoke($subMenu); } }