Skip to main content
Glama
collisions.test.js4.46 kB
'use strict' const assert = require('node:assert/strict') const { test } = require('node:test') const { RefResolver } = require('../index.js') test('should not throw if there is a same schema with a same id', () => { const refResolver = new RefResolver() const schemaId = 'schemaId' const schema = { $id: schemaId, type: 'object', properties: { foo: { type: 'string' } } } refResolver.addSchema(schema) refResolver.addSchema(schema) const resolvedSchema = refResolver.getSchema(schemaId) assert.deepStrictEqual(resolvedSchema, schema) }) test('should throw if there is a same schema with a same id (allowEqualDuplicates === false)', () => { const refResolver = new RefResolver({ allowEqualDuplicates: false }) const schemaId = 'schemaId' const schema = { $id: schemaId, type: 'object', properties: { foo: { type: 'string' } } } refResolver.addSchema(schema) try { refResolver.addSchema(schema) assert.fail('should throw') } catch (err) { assert.equal(err.message, `There is already another schema with id "${schemaId}".`) } }) test('should throw if there is another schema with a same id', () => { const refResolver = new RefResolver() const schemaId = 'schemaId' const schema1 = { $id: schemaId, type: 'object', properties: { foo: { type: 'string' } } } const schema2 = { $id: schemaId, type: 'object', properties: { bar: { type: 'string' } } } refResolver.addSchema(schema1) try { refResolver.addSchema(schema2) assert.fail('should throw') } catch (err) { assert.equal(err.message, `There is already another schema with id "${schemaId}".`) } const resolvedSchema = refResolver.getSchema(schemaId) assert.deepStrictEqual(resolvedSchema, schema1) }) test('should not throw if there is a same sub schema with a same id', () => { const refResolver = new RefResolver() const subSchemaId = 'subSchemaId' const schema1 = { $id: 'schemaId1', definitions: { subSchema: { $id: subSchemaId, type: 'object', properties: { foo: { type: 'string' } } } } } const schema2 = { $id: 'schemaId2', definitions: { subSchema: { $id: subSchemaId, type: 'object', properties: { foo: { type: 'string' } } } } } refResolver.addSchema(schema1) refResolver.addSchema(schema2) const resolvedSchema = refResolver.getSchema(subSchemaId) assert.deepStrictEqual(resolvedSchema, schema1.definitions.subSchema) assert.deepStrictEqual(resolvedSchema, schema2.definitions.subSchema) }) test('should throw if there is another different sub schema with a same id', () => { const refResolver = new RefResolver() const subSchemaId = 'subSchemaId' const schema1 = { $id: 'schemaId1', definitions: { subSchema: { $id: subSchemaId, type: 'object', properties: { foo: { type: 'string' } } } } } const schema2 = { $id: 'schemaId2', definitions: { subSchema: { $id: subSchemaId, type: 'object', properties: { bar: { type: 'string' } } } } } refResolver.addSchema(schema1) try { refResolver.addSchema(schema2) assert.fail('should throw') } catch (err) { assert.equal(err.message, `There is already another schema with id "${subSchemaId}".`) } const resolvedSchema = refResolver.getSchema(subSchemaId) assert.deepStrictEqual(resolvedSchema, schema1.definitions.subSchema) assert.notDeepStrictEqual(resolvedSchema, schema2.definitions.subSchema) }) test('should throw if there is the same anchor in the same schema', () => { const refResolver = new RefResolver() const subSchemaAnchor = '#subSchemaId' const schema = { $id: 'schemaId1', definitions: { subSchema1: { $id: subSchemaAnchor, type: 'object', properties: { foo: { type: 'string' } } }, subSchema2: { $id: subSchemaAnchor, type: 'object', properties: { bar: { type: 'string' } } } } } try { refResolver.addSchema(schema) assert.fail('should throw') } catch (err) { assert.equal(err.message, 'There is already another anchor "#subSchemaId" in schema "schemaId1".') } })

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/krtw00/search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server