Skip to content

Commit a7f18e0

Browse files
committed
Adjust default value for Schema:: when no type is specified
fixes #131
1 parent ba2f0cf commit a7f18e0

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

src/spec/Schema.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ protected function attributeDefaults(): array
124124
'allOf' => null,
125125
'oneOf' => null,
126126
'anyOf' => null,
127+
// nullable is only relevant, when a type is specified
128+
// return null as default when there is no type
129+
// return false as default when there is a type
130+
'nullable' => !empty($this->properties['type']) ? false : null,
127131
];
128132
}
129133

tests/spec/SchemaTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,29 @@ public function testRead()
4343
$this->assertFalse($schema->deprecated);
4444
}
4545

46+
public function testNullable()
47+
{
48+
/** @var $schema Schema */
49+
$schema = Reader::readFromJson('{"type": "string"}', Schema::class);
50+
$this->assertEquals(Type::STRING, $schema->type);
51+
$this->assertFalse($schema->nullable);
52+
53+
/** @var $schema Schema */
54+
$schema = Reader::readFromJson('{"type": "string", "nullable": false}', Schema::class);
55+
$this->assertEquals(Type::STRING, $schema->type);
56+
$this->assertFalse($schema->nullable);
57+
58+
/** @var $schema Schema */
59+
$schema = Reader::readFromJson('{"type": "string", "nullable": true}', Schema::class);
60+
$this->assertEquals(Type::STRING, $schema->type);
61+
$this->assertTrue($schema->nullable);
62+
63+
// nullable is undefined if no type is given
64+
$schema = Reader::readFromJson('{"oneOf": [{"type": "string"}, {"type": "integer"}]}', Schema::class);
65+
$this->assertNull($schema->type);
66+
$this->assertNull($schema->nullable);
67+
}
68+
4669
public function testReadObject()
4770
{
4871
/** @var $schema Schema */

0 commit comments

Comments
 (0)