Esempio n. 1
0
 /**
  * @param ExerciseInterface $exercise
  * @param UserState         $userState
  * @param WorkshopType      $type
  * @return bool
  */
 private function isExerciseDisabled(ExerciseInterface $exercise, UserState $userState, WorkshopType $type)
 {
     static $previous = null;
     if (null === $previous || !$type->isTutorialMode()) {
         $previous = $exercise;
         return false;
     }
     if (in_array($previous->getName(), $userState->getCompletedExercises())) {
         $previous = $exercise;
         return false;
     }
     $previous = $exercise;
     return true;
 }
 public function testIsTutorialMode()
 {
     $tutorial = WorkshopType::TUTORIAL();
     $standard = WorkshopType::STANDARD();
     static::assertTrue($tutorial->isTutorialMode());
     static::assertFalse($standard->isTutorialMode());
 }
 public function testFactoryReturnsInstance()
 {
     $container = $this->createMock(ContainerInterface::class);
     $userStateSerializer = $this->createMock(UserStateSerializer::class);
     $userStateSerializer->expects($this->once())->method('deSerialize')->will($this->returnValue(new UserState()));
     $exerciseRepository = $this->createMock(ExerciseRepository::class);
     $exercise = $this->createMock(ExerciseInterface::class);
     $exercise->expects($this->exactly(2))->method('getName')->will($this->returnValue('Exercise'));
     $exerciseRepository->expects($this->once())->method('findAll')->will($this->returnValue([$exercise]));
     $services = [UserStateSerializer::class => $userStateSerializer, ExerciseRepository::class => $exerciseRepository, ExerciseRenderer::class => $this->createMock(ExerciseRenderer::class), HelpCommand::class => $this->createMock(HelpCommand::class), CreditsCommand::class => $this->createMock(CreditsCommand::class), ResetProgress::class => $this->createMock(ResetProgress::class), 'workshopLogo' => 'LOGO', 'bgColour' => 'black', 'fgColour' => 'green', 'workshopTitle' => 'TITLE', WorkshopType::class => WorkshopType::STANDARD(), EventDispatcher::class => $this->createMock(EventDispatcher::class)];
     $container->expects($this->any())->method('get')->will($this->returnCallback(function ($name) use($services) {
         return $services[$name];
     }));
     $factory = new MenuFactory();
     $this->assertInstanceOf(CliMenu::class, $factory($container));
 }
Esempio n. 4
0
use PhpSchool\PhpWorkshop\Command\PrintCommand;
use PhpSchool\PhpWorkshop\Command\VerifyCommand;
use PhpSchool\PhpWorkshop\Command\RunCommand;
use PhpSchool\PhpWorkshop\CommandDefinition;
use PhpSchool\PhpWorkshop\CommandRouter;
use PhpSchool\PhpWorkshop\ExerciseRenderer;
use PhpSchool\PhpWorkshop\ExerciseRepository;
use PhpSchool\PhpWorkshop\Factory\MarkdownCliRendererFactory;
use PhpSchool\PhpWorkshop\MarkdownRenderer;
use PhpSchool\PhpWorkshop\ResultRenderer\ResultsRenderer;
use PhpSchool\PhpWorkshop\UserState;
use PhpSchool\PhpWorkshop\UserStateSerializer;
use Symfony\Component\Filesystem\Filesystem;
use Faker\Factory as FakerFactory;
use Faker\Generator as FakerGenerator;
return ['appName' => basename($_SERVER['argv'][0]), WorkshopType::class => WorkshopType::STANDARD(), ExerciseDispatcher::class => function (ContainerInterface $c) {
    return new ExerciseDispatcher($c->get(RunnerManager::class), $c->get(ResultAggregator::class), $c->get(EventDispatcher::class), $c->get(CheckRepository::class));
}, ResultAggregator::class => object(ResultAggregator::class), CheckRepository::class => function (ContainerInterface $c) {
    return new CheckRepository([$c->get(FileExistsCheck::class), $c->get(PhpLintCheck::class), $c->get(CodeParseCheck::class), $c->get(ComposerCheck::class), $c->get(FunctionRequirementsCheck::class), $c->get(DatabaseCheck::class)]);
}, CommandRouter::class => function (ContainerInterface $c) {
    return new CommandRouter([new CommandDefinition('menu', [], MenuCommand::class), new CommandDefinition('help', [], HelpCommand::class), new CommandDefinition('print', [], PrintCommand::class), new CommandDefinition('verify', [], VerifyCommand::class), new CommandDefinition('run', [], RunCommand::class), new CommandDefinition('credits', [], CreditsCommand::class)], 'menu', $c->get(EventDispatcher::class), $c);
}, Color::class => function () {
    $colors = new Color();
    $colors->setForceStyle(true);
    return $colors;
}, OutputInterface::class => function (ContainerInterface $c) {
    return new StdOutput($c->get(Color::class), $c->get(TerminalInterface::class));
}, ExerciseRepository::class => function (ContainerInterface $c) {
    return new ExerciseRepository(array_map(function ($exerciseClass) use($c) {
        return $c->get($exerciseClass);
    }, $c->get('exercises')));