Skip to content

Commit bf361fc

Browse files
committed
Add tests
1 parent e636746 commit bf361fc

File tree

9 files changed

+165
-1
lines changed

9 files changed

+165
-1
lines changed

src/Exercise/ASafeSpaceForNulls.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
use PhpParser\Node\Stmt\Expression;
1717
use PhpParser\NodeFinder;
1818
use PhpParser\Parser;
19+
use PhpSchool\PhpWorkshop\Check\FileComparisonCheck;
1920
use PhpSchool\PhpWorkshop\Exercise\AbstractExercise;
2021
use PhpSchool\PhpWorkshop\Exercise\CliExercise;
2122
use PhpSchool\PhpWorkshop\Exercise\ExerciseInterface;
2223
use PhpSchool\PhpWorkshop\Exercise\ExerciseType;
2324
use PhpSchool\PhpWorkshop\Exercise\SubmissionPatchable;
2425
use PhpSchool\PhpWorkshop\ExerciseCheck\FileComparisonExerciseCheck;
2526
use PhpSchool\PhpWorkshop\ExerciseCheck\SelfCheck;
27+
use PhpSchool\PhpWorkshop\ExerciseDispatcher;
2628
use PhpSchool\PhpWorkshop\Input\Input;
2729
use PhpSchool\PhpWorkshop\Patch;
2830
use PhpSchool\PhpWorkshop\Result\Failure;
@@ -60,6 +62,11 @@ public function getArgs(): array
6062
return [];
6163
}
6264

65+
public function configure(ExerciseDispatcher $dispatcher): void
66+
{
67+
$dispatcher->requireCheck(FileComparisonCheck::class);
68+
}
69+
6370
public function getPatch(): Patch
6471
{
6572
$factory = new BuilderFactory();
@@ -172,7 +179,7 @@ public function check(Input $input): ResultInterface
172179
);
173180
}
174181

175-
if (count($addressFetch) !== 3) {
182+
if (count($addressFetch) < 3) {
176183
return new Failure(
177184
$this->getName(),
178185
'The $user->address property should always be accessed with the null safe operator'
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
<?php
2+
3+
namespace PhpSchool\PHP8AppreciateTest\Exercise;
4+
5+
use PhpSchool\PHP8Appreciate\Exercise\ASafeSpaceForNulls;
6+
use PhpSchool\PhpWorkshop\Application;
7+
use PhpSchool\PhpWorkshop\Result\Failure;
8+
use PhpSchool\PhpWorkshop\Result\FileComparisonFailure;
9+
use PhpSchool\PhpWorkshop\TestUtils\WorkshopExerciseTest;
10+
11+
class ASafeSpaceForNullsTest extends WorkshopExerciseTest
12+
{
13+
public function getExerciseClass(): string
14+
{
15+
return ASafeSpaceForNulls::class;
16+
}
17+
18+
public function getApplication(): Application
19+
{
20+
return require __DIR__ . '/../../app/bootstrap.php';
21+
}
22+
23+
public function tearDown(): void
24+
{
25+
$this->removeSolutionAsset('users.csv');
26+
}
27+
28+
public function testFailureWhenAgeAccessedWithoutNullSafe(): void
29+
{
30+
$this->runExercise('no-null-safe-age.php');
31+
32+
$this->assertVerifyWasNotSuccessful();
33+
34+
$this->assertResultsHasFailure(
35+
Failure::class,
36+
'The $user->age property should be accessed with the null safe operator'
37+
);
38+
}
39+
40+
public function testFailureWhenAddressAccessedWithoutNullSafe(): void
41+
{
42+
$this->runExercise('no-null-safe-address.php');
43+
44+
$this->assertVerifyWasNotSuccessful();
45+
46+
$this->assertResultsHasFailure(
47+
Failure::class,
48+
'The $user->address property should always be accessed with the null safe operator'
49+
);
50+
}
51+
52+
public function testFailureWhenAddressNumberAccessedWithoutNullSafe(): void
53+
{
54+
$this->runExercise('no-null-safe-address-number.php');
55+
56+
$this->assertVerifyWasNotSuccessful();
57+
58+
$this->assertResultsHasFailure(
59+
Failure::class,
60+
'The $user->address->number property should be accessed with the null safe operator'
61+
);
62+
}
63+
64+
public function testFailureWhenAddressLine1AccessedWithoutNullSafe(): void
65+
{
66+
$this->runExercise('no-null-safe-address-line1.php');
67+
68+
$this->assertVerifyWasNotSuccessful();
69+
70+
$this->assertResultsHasFailure(
71+
Failure::class,
72+
'The $user->address->addressLine1 property should be accessed with the null safe operator'
73+
);
74+
}
75+
76+
public function testFailureWhenAddressLine2AccessedWithoutNullSafe(): void
77+
{
78+
$this->runExercise('no-null-safe-address-line2.php');
79+
80+
$this->assertVerifyWasNotSuccessful();
81+
82+
$this->assertResultsHasFailure(
83+
Failure::class,
84+
'The $user->address->addressLine2 property should be accessed with the null safe operator'
85+
);
86+
}
87+
88+
public function testFailureWhenCsvNotExported(): void
89+
{
90+
$this->runExercise('no-csv-export.php');
91+
92+
$this->assertVerifyWasNotSuccessful();
93+
94+
$this->assertResultsHasFailure(
95+
Failure::class,
96+
'File: "users.csv" does not exist'
97+
);
98+
}
99+
100+
public function testFailureWhenCsvNotCorrect(): void
101+
{
102+
$this->runExercise('csv-wrong.php');
103+
104+
$this->assertVerifyWasNotSuccessful();
105+
106+
$this->assertResultsHasFailure(
107+
Failure::class,
108+
'File: "users.csv" does not exist'
109+
);
110+
111+
// $this->assertResultsHasFailureAndMatches(
112+
// FileComparisonFailure::class,
113+
// function (FileComparisonFailure $failure) {
114+
// self::assertEquals('users.csv', $failure->getFileName());
115+
//
116+
// return true;
117+
// }
118+
// );
119+
}
120+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
$fp = fopen('users.csv', 'w+');
4+
fputcsv($fp, ['Wrong column', 'Last Name', 'Age', 'House num', 'Addr 1', 'Addr 2']);
5+
fputcsv($fp, [$user->firstName, $user->lastName, $user?->age, $user?->address?->number, $user?->address?->addressLine1, $user?->address?->addressLine2]);
6+
fclose($fp);
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
echo $user?->age;
4+
echo $user?->address?->number;
5+
echo $user?->address?->addressLine1;
6+
echo $user?->address?->addressLine2;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
echo $user?->age;
4+
echo $user?->address?->number;
5+
echo $user?->address->addressLine1;
6+
echo $user?->address;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
echo $user?->age;
4+
echo $user?->address?->number;
5+
echo $user?->address?->addressLine1;
6+
echo $user?->address->addressLine2;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?php
2+
3+
echo $user?->age;
4+
echo $user?->address;
5+
echo $user?->address;
6+
echo $user?->address;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?php
2+
3+
echo $user?->age;
4+
echo $user->address;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
echo $user->age;

0 commit comments

Comments
 (0)