Skip to content

Commit 766e64e

Browse files
committed
tests for $ref resolution across schemas
1 parent 5bdf61c commit 766e64e

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

src/test/schema.test.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,96 @@ suite('JSON Schema', () => {
411411

412412
});
413413

414+
415+
test('Resolving external $ref two levels', async function () {
416+
const service = new SchemaService.JSONSchemaService(newMockRequestService(), workspaceContext);
417+
service.setSchemaContributions({
418+
schemas: {
419+
"https://myschemastore/main/schema1.json": {
420+
id: 'https://myschemastore/main/schema1.json',
421+
definitions: {
422+
"world": {
423+
$id: '#world',
424+
type: 'string',
425+
const: 'world'
426+
}
427+
},
428+
type: 'object',
429+
properties: {
430+
p1: {
431+
$ref: 'schema2.json#blue'
432+
}
433+
}
434+
},
435+
"https://myschemastore/main/schema3.json": {
436+
id: 'https://myschemastore/main/schema3.json',
437+
definitions: {
438+
"world": {
439+
$id: '#world',
440+
type: 'string',
441+
const: 'world'
442+
}
443+
}
444+
},
445+
"https://myschemastore/main/schema2.json": {
446+
id: 'https://myschemastore/main/schema2.json',
447+
definitions: {
448+
"blue": {
449+
$id: '#blue',
450+
$ref: 'schema3.json#world'
451+
}
452+
}
453+
}
454+
}
455+
});
456+
457+
const resolvedSchema = await service.getResolvedSchema('https://myschemastore/main/schema1.json');
458+
assert.deepStrictEqual(resolvedSchema?.schema.properties?.p1, {
459+
type: 'string',
460+
const: 'world'
461+
});
462+
});
463+
464+
465+
test('Resolving external $ref recursive', async function () {
466+
const service = new SchemaService.JSONSchemaService(newMockRequestService(), workspaceContext);
467+
service.setSchemaContributions({
468+
schemas: {
469+
"https://myschemastore/main/schema1.json": {
470+
id: 'https://myschemastore/main/schema1.json',
471+
definitions: {
472+
"world": {
473+
$id: '#world',
474+
type: 'string',
475+
const: 'world'
476+
}
477+
},
478+
type: 'object',
479+
properties: {
480+
p1: {
481+
$ref: 'schema2.json#blue'
482+
}
483+
}
484+
},
485+
"https://myschemastore/main/schema2.json": {
486+
id: 'https://myschemastore/main/schema2.json',
487+
definitions: {
488+
"blue": {
489+
$id: '#blue',
490+
$ref: 'schema1.json#world'
491+
}
492+
}
493+
}
494+
}
495+
});
496+
497+
const resolvedSchema = await service.getResolvedSchema('https://myschemastore/main/schema1.json');
498+
assert.deepStrictEqual(resolvedSchema?.schema.properties?.p1, {
499+
type: 'string',
500+
const: 'world'
501+
});
502+
});
503+
414504
test('Resolving $refs 5', async function() {
415505
const service = new SchemaService.JSONSchemaService(newMockRequestService(), workspaceContext);
416506
service.setSchemaContributions({

0 commit comments

Comments
 (0)