Files
piratepoet/mailpoet/tests/unit/Validator/Schema/ArraySchemaTest.php
Jan Jakes acd74d3e4b Add factory for array WP JSON schema
[MAILPOET-4195]
2022-03-30 11:29:58 +02:00

74 lines
2.4 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Validator\Schema;
use MailPoet\Validator\Schema;
use MailPoetUnitTest;
class ArraySchemaTest extends MailPoetUnitTest {
public function testPlain(): void {
$array = new ArraySchema();
$this->assertSame(['type' => 'array'], $array->toArray());
$this->assertSame('{"type":"array"}', $array->toString());
}
public function testItems(): void {
$array = (new ArraySchema())->items($this->getNumberSchemaMock());
$this->assertSame(['type' => 'array', 'items' => ['type' => 'number']], $array->toArray());
$this->assertSame('{"type":"array","items":{"type":"number"}}', $array->toString());
}
public function testMinItems(): void {
$array = (new ArraySchema())->minItems(1);
$this->assertSame(['type' => 'array', 'minItems' => 1], $array->toArray());
$this->assertSame('{"type":"array","minItems":1}', $array->toString());
}
public function testMaxItems(): void {
$array = (new ArraySchema())->maxItems(10);
$this->assertSame(['type' => 'array', 'maxItems' => 10], $array->toArray());
$this->assertSame('{"type":"array","maxItems":10}', $array->toString());
}
public function testUniqueItems(): void {
$array = (new ArraySchema())->uniqueItems();
$this->assertSame(['type' => 'array', 'uniqueItems' => true], $array->toArray());
$this->assertSame('{"type":"array","uniqueItems":true}', $array->toString());
}
public function testMixedProperties(): void {
$array = (new ArraySchema())
->items($this->getNumberSchemaMock())
->minItems(3)
->maxItems(10)
->uniqueItems();
$this->assertSame([
'type' => 'array',
'items' => ['type' => 'number'],
'minItems' => 3,
'maxItems' => 10,
'uniqueItems' => true,
], $array->toArray());
$this->assertSame(
'{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":10,"uniqueItems":true}',
$array->toString()
);
}
public function testImmutability(): void {
$array = new ArraySchema();
$this->assertNotSame($array->items($this->getNumberSchemaMock()), $array);
$this->assertNotSame($array->minItems(3), $array);
$this->assertNotSame($array->maxItems(10), $array);
$this->assertNotSame($array->uniqueItems(), $array);
}
private function getNumberSchemaMock(): Schema {
return new class extends Schema {
protected $schema = ['type' => 'number'];
};
}
}