From 644dc28c611de04e5cb8f423b54076cf670798b0 Mon Sep 17 00:00:00 2001 From: Aydin Hassan Date: Sat, 30 Jan 2016 19:50:50 +0000 Subject: [PATCH] Enable Database Check to work on with Run command --- src/Check/DatabaseCheck.php | 35 +++++++++++++++++++++----------- test/Check/DatabaseCheckTest.php | 33 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/src/Check/DatabaseCheck.php b/src/Check/DatabaseCheck.php index bc9609ec..c9f14943 100644 --- a/src/Check/DatabaseCheck.php +++ b/src/Check/DatabaseCheck.php @@ -91,13 +91,20 @@ public function attach(EventDispatcher $eventDispatcher) copy($this->userDatabasePath, $this->solutionDatabasePath); }); + $eventDispatcher->listen('run.start', function (Event $e) use ($db) { + $e->getParameter('exercise')->seed($db); + }); + $eventDispatcher->listen('cli.verify.solution-execute.pre', function (CliExecuteEvent $e) use ($solutionDsn) { $e->prependArg($solutionDsn); }); - $eventDispatcher->listen('cli.verify.user-execute.pre', function (CliExecuteEvent $e) use ($userDsn) { - $e->prependArg($userDsn); - }); + $eventDispatcher->listen( + ['cli.verify.user-execute.pre', 'cli.run.user-execute.pre'], + function (CliExecuteEvent $e) use ($userDsn) { + $e->prependArg($userDsn); + } + ); $eventDispatcher->insertVerifier('verify.finish', function (Event $e) use ($db) { $verifyResult = $e->getParameter('exercise')->verify($db); @@ -109,14 +116,18 @@ public function attach(EventDispatcher $eventDispatcher) return new Success('Database Verification Check'); }); - $cleanup = function () use ($db) { - unset($db); - unlink($this->userDatabasePath); - unlink($this->solutionDatabasePath); - rmdir($this->databaseDirectory); - }; - - $eventDispatcher->listen('cli.verify.solution-execute.fail', $cleanup); - $eventDispatcher->listen('verify.finish', $cleanup); + $eventDispatcher->listen( + [ + 'cli.verify.solution-execute.fail', + 'verify.finish', + 'run.finish' + ], + function (Event $e) use ($db) { + unset($db); + @unlink($this->userDatabasePath); + @unlink($this->solutionDatabasePath); + rmdir($this->databaseDirectory); + } + ); } } diff --git a/test/Check/DatabaseCheckTest.php b/test/Check/DatabaseCheckTest.php index cf6931ce..2c02946e 100644 --- a/test/Check/DatabaseCheckTest.php +++ b/test/Check/DatabaseCheckTest.php @@ -11,6 +11,8 @@ use PhpSchool\PhpWorkshop\ExerciseCheck\DatabaseExerciseCheck; use PhpSchool\PhpWorkshop\ExerciseDispatcher; use PhpSchool\PhpWorkshop\Factory\RunnerFactory; +use PhpSchool\PhpWorkshop\Output\OutputInterface; +use PhpSchool\PhpWorkshop\Output\StdOutput; use PhpSchool\PhpWorkshop\ResultAggregator; use PhpSchool\PhpWorkshop\Solution\SingleFileSolution; use PhpSchool\PhpWorkshopTest\Asset\DatabaseExercise; @@ -110,6 +112,37 @@ public function testSuccessIsReturnedIfDatabaseVerificationPassed() $this->assertTrue($results->isSuccessful()); } + public function testRunExercise() + { + $this->exercise + ->expects($this->once()) + ->method('getArgs') + ->will($this->returnValue([])); + + $this->exercise + ->expects($this->atLeastOnce()) + ->method('getType') + ->will($this->returnValue(ExerciseType::CLI())); + + $this->exercise + ->expects($this->once()) + ->method('configure') + ->will($this->returnCallback(function (ExerciseDispatcher $dispatcher) { + $dispatcher->requireListenableCheck(DatabaseCheck::class); + })); + + $results = new ResultAggregator; + $eventDispatcher = new EventDispatcher($results); + $checkRepository = new CheckRepository([$this->check]); + $dispatcher = new ExerciseDispatcher(new RunnerFactory, $results, $eventDispatcher, $checkRepository); + + $dispatcher->run( + $this->exercise, + __DIR__ . '/../res/database/user-solution-alter-db.php', + $this->getMock(OutputInterface::class) + ); + } + public function testFailureIsReturnedIfDatabaseVerificationFails() { $solution = SingleFileSolution::fromFile(realpath(__DIR__ . '/../res/database/solution.php'));