Skip to content

Commit e6f03c8

Browse files
committed
Create array schema tests
1 parent f3c0f66 commit e6f03c8

File tree

1 file changed

+54
-3
lines changed

1 file changed

+54
-3
lines changed

tests/Schemas/ArraySchemaTest.php

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,26 +3,77 @@
33
namespace Webdevcave\SchemaValidator\Tests\Schemas;
44

55
use PHPUnit\Framework\Attributes\CoversClass;
6+
use PHPUnit\Framework\TestCase;
67
use stdClass;
78
use Webdevcave\SchemaValidator\Schemas\ArraySchema;
8-
use PHPUnit\Framework\TestCase;
99
use Webdevcave\SchemaValidator\Schemas\BaseSchema;
10+
use Webdevcave\SchemaValidator\Schemas\NumericSchema;
11+
use Webdevcave\SchemaValidator\Schemas\StringSchema;
1012
use Webdevcave\SchemaValidator\Validator;
1113

1214
#[CoversClass(Validator::class)]
1315
#[CoversClass(BaseSchema::class)]
1416
#[CoversClass(ArraySchema::class)]
17+
#[CoversClass(NumericSchema::class)]
18+
#[CoversClass(StringSchema::class)]
1519
class ArraySchemaTest extends TestCase
1620
{
1721
public function testTypeCheck(): void
1822
{
19-
$schema = new ArraySchema();
23+
$schema = Validator::array();
2024

2125
$this->assertFalse($schema->validate(1), "Array schema should not validate integers");
2226
$this->assertFalse($schema->validate(1.1), "Array schema should not validate floats");
2327
$this->assertFalse($schema->validate('str'), "Array schema should not validate strings");
2428
$this->assertFalse($schema->validate(new stdClass()), "Array schema should not validate objects");
2529

26-
$this->assertTrue($schema->validate([1,2,3]), "Array schema should validate arrays");
30+
$this->assertTrue($schema->validate([1, 2, 3]), "Array schema should validate arrays");
31+
}
32+
33+
public function testDataValidation(): void
34+
{
35+
$positiveIntCheckMessage = 'must be positive';
36+
$schema = Validator::array(['name' => Validator::string()->min(3), 'age' => Validator::numeric()->integer()->positive($positiveIntCheckMessage),]);
37+
38+
$validData = ['name' => 'Carlos', 'age' => 35,];
39+
$this->assertTrue($schema->validate($validData), "Should return true when dataset is valid");
40+
41+
$invalidData = ['name' => 'John', 'age' => -10,];
42+
$this->assertFalse($schema->validate($invalidData), "Should return false when dataset is not valid");
43+
$this->assertEquals(['age' => [$positiveIntCheckMessage]], $schema->errorMessages(), 'Error messages doesn\'t match');
44+
}
45+
46+
public function testWildcardIndexValidation()
47+
{
48+
$errorMessage = 'Only integers are allowed';
49+
$schema = Validator::array(['*' => Validator::numeric()->integer($errorMessage)]);
50+
51+
$validData = [1, 2, 3];
52+
$this->assertTrue($schema->validate($validData), "Error evaluating wildcard index with valid data");
53+
54+
$invalidData = [null];
55+
$this->assertFalse($schema->validate($invalidData), "Error evaluating wildcard index with invalid data");
56+
}
57+
58+
public function testOptionalCheckShouldPassOnEmptyArray(): void
59+
{
60+
$schema = Validator::array()->optional();
61+
62+
$this->assertTrue($schema->validate([]), "Array schema should accept empty array when it's optional");
63+
}
64+
65+
public function testDoubleRuleValidation(): void
66+
{
67+
$schema = Validator::array([
68+
'name' => [
69+
Validator::string()->min(1),
70+
Validator::string()->max(10),
71+
],
72+
]);
73+
74+
$data = [
75+
'name' => str_repeat('a', 10),
76+
];
77+
$this->assertTrue($schema->validate($data), "Array schema should accept double rule");
2778
}
2879
}

0 commit comments

Comments
 (0)