Skip to content

Commit dc62895

Browse files
authored
Merge pull request #194 from php-school/more-test-helpers
Add more test helpers
2 parents b5fe20a + 5097bfa commit dc62895

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

src/TestUtils/WorkshopExerciseTest.php

+33-4
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
use PhpSchool\PhpWorkshop\Result\Cli\CliResult;
1616
use PhpSchool\PhpWorkshop\Result\Failure;
1717
use PhpSchool\PhpWorkshop\Result\FailureInterface;
18+
use PhpSchool\PhpWorkshop\Result\ResultGroupInterface;
1819
use PhpSchool\PhpWorkshop\Result\ResultInterface;
1920
use PhpSchool\PhpWorkshop\ResultAggregator;
2021
use PhpSchool\PhpWorkshop\Utils\Collection;
22+
use PHPUnit\Framework\ExpectationFailedException;
2123
use PHPUnit\Framework\TestCase;
2224
use Psr\Container\ContainerInterface;
2325
use PhpSchool\PhpWorkshop\Input\Input;
@@ -126,11 +128,21 @@ public function assertResultsHasFailure(string $resultClass, string $reason): vo
126128
}
127129

128130
public function assertOutputWasIncorrect(): void
131+
{
132+
$this->assertFalse($this->getOutputResult()->isSuccessful());
133+
}
134+
135+
public function assertOutputWasCorrect(): void
136+
{
137+
$this->assertTrue($this->getOutputResult()->isSuccessful());
138+
}
139+
140+
private function getOutputResult(): ResultGroupInterface
129141
{
130142
$exerciseType = $this->getExercise()->getType();
131143

132144
if ($exerciseType->equals(ExerciseType::CLI())) {
133-
$results = (new Collection($this->results->getIterator()->getArrayCopy()))
145+
$results = collect($this->results->getIterator()->getArrayCopy())
134146
->filter(function (ResultInterface $result) {
135147
return $result instanceof CliResult;
136148
});
@@ -139,16 +151,33 @@ public function assertOutputWasIncorrect(): void
139151
}
140152

141153
if ($exerciseType->equals(ExerciseType::CGI())) {
142-
$results = (new Collection($this->results->getIterator()->getArrayCopy()))
154+
$results = collect($this->results->getIterator()->getArrayCopy())
143155
->filter(function (ResultInterface $result) {
144156
return $result instanceof CgiResult;
145157
});
146158

147159
$this->assertCount(1, $results);
148160
}
149161

150-
$outputResults = $results->values()->get(0);
162+
return $results->values()->get(0);
163+
}
164+
165+
public function assertResultsHasFailureAndMatches(string $resultClass, callable $matcher): void
166+
{
167+
$failures = collect($this->results->getIterator()->getArrayCopy())
168+
->filter(function (ResultInterface $result) {
169+
return $result instanceof FailureInterface;
170+
})
171+
->filter(function (FailureInterface $failure) use ($resultClass) {
172+
return $failure instanceof $resultClass;
173+
});
174+
175+
if ($failures->count() === 0) {
176+
throw new ExpectationFailedException("No failures found for class: '$resultClass'");
177+
}
151178

152-
$this->assertFalse($outputResults->isSuccessful());
179+
$failures->each(function ($failure) use ($matcher) {
180+
$this->assertTrue($matcher($failure));
181+
});
153182
}
154183
}

0 commit comments

Comments
 (0)