Skip to content

Commit 55c7490

Browse files
committed
test: copy test from json schema test suite
1 parent bac73b2 commit 55c7490

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

tests/Drafts/Draft3Test.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@
99

1010
namespace JsonSchema\Tests\Drafts;
1111

12+
use JsonSchema\Constraints\Factory;
13+
use JsonSchema\SchemaStorage;
14+
use JsonSchema\Validator;
15+
1216
/**
1317
* @package JsonSchema\Tests\Drafts
1418
*/
@@ -17,6 +21,56 @@ class Draft3Test extends BaseDraftTestCase
1721
protected $schemaSpec = 'http://json-schema.org/draft-03/schema#';
1822
protected $validateSchema = true;
1923

24+
/**
25+
* This test is a copy of https://github.com/json-schema-org/JSON-Schema-Test-Suite/blob/main/tests/draft3/ref.json#L203-L225
26+
*
27+
* @todo cleanup when #821 gets merged
28+
*
29+
* @param mixed $data
30+
* @dataProvider refPreventsASiblingIdFromChangingTheBaseUriProvider
31+
*/
32+
public function testRefPreventsASiblingIdFromChangingTheBaseUriProvider($data, bool $expectedResult): void
33+
{
34+
$schema = json_decode(<<<'JSON'
35+
{
36+
"id": "http://localhost:1234/sibling_id/base/",
37+
"definitions": {
38+
"foo": {
39+
"id": "http://localhost:1234/sibling_id/foo.json",
40+
"type": "string"
41+
},
42+
"base_foo": {
43+
"$comment": "this canonical uri is http://localhost:1234/sibling_id/base/foo.json",
44+
"id": "foo.json",
45+
"type": "number"
46+
}
47+
},
48+
"extends": [
49+
{
50+
"$comment": "$ref resolves to http://localhost:1234/sibling_id/base/foo.json, not http://localhost:1234/sibling_id/foo.json",
51+
"id": "http://localhost:1234/sibling_id/",
52+
"$ref": "foo.json"
53+
}
54+
]
55+
}
56+
JSON
57+
, false);
58+
59+
$schemaStorage = new SchemaStorage();
60+
$schemaStorage->addSchema(property_exists($schema, 'id') ? $schema->id : 'internal://mySchema', $schema);
61+
$validator = new Validator(new Factory($schemaStorage));
62+
$validator->validate($data, $schema);
63+
64+
self::assertEquals($expectedResult, $validator->isValid());
65+
}
66+
67+
public function refPreventsASiblingIdFromChangingTheBaseUriProvider(): \Generator
68+
{
69+
yield '$ref resolves to /definitions/base_foo, data does not validate' => ['data' => 'a', 'valid' => false];
70+
yield '$ref resolves to /definitions/base_foo, data validate' => ['data' => 1, 'valid' => true];
71+
}
72+
73+
2074
/**
2175
* {@inheritdoc}
2276
*/

0 commit comments

Comments
 (0)