Skip to content

Commit 94b1cdb

Browse files
authored
Merge pull request #131 from php-school/reset-menu-after-reset-progress
Reset menu after reset progress
2 parents fdb3457 + c3db48b commit 94b1cdb

File tree

5 files changed

+68
-31
lines changed

5 files changed

+68
-31
lines changed

app/config.php

+1-4
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,7 @@
246246
SyntaxHighlighter::class => factory(PsxFactory::class),
247247
PsxFactory::class => object(),
248248
ResetProgress::class => function (ContainerInterface $c) {
249-
return new ResetProgress(
250-
$c->get(UserStateSerializer::class),
251-
$c->get(OutputInterface::class)
252-
);
249+
return new ResetProgress($c->get(UserStateSerializer::class));
253250
},
254251
ResultRendererFactory::class => object(),
255252
ResultsRenderer::class => function (ContainerInterface $c) {

composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
"symfony/process": "^2.3|^3.0",
2424
"symfony/filesystem": "^2.3|^3.0",
2525
"fzaninotto/faker": "^1.5",
26-
"aydin-hassan/cli-md-renderer": "^2.0",
26+
"aydin-hassan/cli-md-renderer": "^2.1",
2727
"php-school/psx": "~1.0",
28-
"php-school/cli-menu": "^1.2.0",
28+
"php-school/cli-menu": "^2.0",
2929
"beberlei/assert": "^2.4",
3030
"psr/http-message": "^1.0",
3131
"zendframework/zend-diactoros": "^1.1.3",

composer.lock

+7-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/MenuItem/ResetProgress.php

+13-9
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,13 @@ class ResetProgress
1818
* @var UserStateSerializer
1919
*/
2020
private $userStateSerializer;
21-
22-
/**
23-
* @var OutputInterface
24-
*/
25-
private $output;
2621

2722
/**
2823
* @param UserStateSerializer $userStateSerializer
29-
* @param OutputInterface $output
3024
*/
31-
public function __construct(UserStateSerializer $userStateSerializer, OutputInterface $output)
25+
public function __construct(UserStateSerializer $userStateSerializer)
3226
{
3327
$this->userStateSerializer = $userStateSerializer;
34-
$this->output = $output;
3528
}
3629

3730
/**
@@ -40,6 +33,17 @@ public function __construct(UserStateSerializer $userStateSerializer, OutputInte
4033
public function __invoke(CliMenu $menu)
4134
{
4235
$this->userStateSerializer->serialize(new UserState);
43-
$this->output->writeLine("Status Reset!");
36+
37+
$items = $menu
38+
->getParent()
39+
->getItems();
40+
41+
foreach ($items as $item) {
42+
$item->hideItemExtra();
43+
}
44+
45+
$confirm = $menu->confirm('Status Reset!');
46+
$confirm->getStyle()->setBg('magenta')->setFg('black');
47+
$confirm->display('OK');
4448
}
4549
}

test/MenuItem/ResetProgressTest.php

+45-10
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
namespace PhpSchool\PhpWorkshopTest\MenuItem;
44

55
use PhpSchool\CliMenu\CliMenu;
6+
use PhpSchool\CliMenu\Dialogue\Confirm;
7+
use PhpSchool\CliMenu\MenuItem\MenuItemInterface;
8+
use PhpSchool\CliMenu\MenuStyle;
9+
use PhpSchool\CliMenu\Terminal\TerminalInterface;
610
use PhpSchool\PhpWorkshop\MenuItem\ResetProgress;
711
use PhpSchool\PhpWorkshop\Output\OutputInterface;
812
use PhpSchool\PhpWorkshop\UserState;
@@ -16,22 +20,53 @@
1620
*/
1721
class ResetProgressTest extends PHPUnit_Framework_TestCase
1822
{
19-
public function testResetProgress()
23+
public function testResetProgressDisablesParentMenuItems()
2024
{
21-
$menu = $this->createMock(CliMenu::class);
25+
$item1 = $this->createMock(MenuItemInterface::class);
26+
$item2 = $this->createMock(MenuItemInterface::class);
27+
28+
$item1
29+
->expects($this->once())
30+
->method('hideItemExtra');
31+
32+
$item2
33+
->expects($this->once())
34+
->method('hideItemExtra');
35+
36+
$terminal = $this->createMock(TerminalInterface::class);
37+
38+
$menu = new CliMenu('Menu', [$item1, $item2], $terminal);
39+
40+
$confirm = $this->createMock(Confirm::class);
41+
$confirm
42+
->expects($this->once())
43+
->method('getStyle')
44+
->willReturn(new MenuStyle($terminal));
45+
46+
$confirm
47+
->expects($this->once())
48+
->method('display')
49+
->with('OK');
50+
51+
$subMenu = $this->getMockBuilder(CliMenu::class)
52+
->setMethods(['confirm'])
53+
->setConstructorArgs(['Sub Menu', [], $terminal])
54+
->getMock();
55+
56+
$subMenu->setParent($menu);
57+
58+
$subMenu
59+
->expects($this->once())
60+
->method('confirm')
61+
->willReturn($confirm);
62+
2263
$userStateSerializer = $this->createMock(UserStateSerializer::class);
2364
$userStateSerializer
2465
->expects($this->once())
2566
->method('serialize')
2667
->with($this->isInstanceOf(UserState::class));
2768

28-
$output = $this->createMock(OutputInterface::class);
29-
$output
30-
->expects($this->once())
31-
->method('writeLine')
32-
->with(("Status Reset!"));
33-
34-
$resetProgress = new ResetProgress($userStateSerializer, $output);
35-
$resetProgress->__invoke($menu);
69+
$resetProgress = new ResetProgress($userStateSerializer);
70+
$resetProgress->__invoke($subMenu);
3671
}
3772
}

0 commit comments

Comments
 (0)