diff --git a/schemaregistry/mock-schemaregistry-client.ts b/schemaregistry/mock-schemaregistry-client.ts index 2114164b..94cbdf79 100644 --- a/schemaregistry/mock-schemaregistry-client.ts +++ b/schemaregistry/mock-schemaregistry-client.ts @@ -176,7 +176,6 @@ class MockClient implements Client { throw new RestError("Schema not found", 404, 40400); } - return { id, version, @@ -202,7 +201,6 @@ class MockClient implements Client { if (parsedKey.subject === subject && (!value.softDeleted || deleted)) { if (parsedKey.schema.metadata && this.isSubset(metadata, parsedKey.schema.metadata.properties)) { results.push({ - id: parsedKey.schema.id, version: value.version, subject, ...parsedKey.schema @@ -223,6 +221,18 @@ class MockClient implements Client { } }); + let id: number = -1; + for (const [key, value] of this.idToSchemaCache.entries()) { + const parsedKey = JSON.parse(key); + if (parsedKey.subject === subject && value.info.schema === latest.schema) { + id = parsedKey.id; + } + } + if (id === -1) { + throw new RestError("Schema not found", 404, 40400); + } + + latest.id = id; return latest; } diff --git a/schemaregistry/serde/serde.ts b/schemaregistry/serde/serde.ts index 52c6eec2..d27ea5cd 100644 --- a/schemaregistry/serde/serde.ts +++ b/schemaregistry/serde/serde.ts @@ -257,16 +257,15 @@ export abstract class Serializer extends Serde { id = await this.client.register(subject, info, Boolean(normalizeSchema)) } else if (useSchemaId != null && useSchemaId >= 0) { info = await this.client.getBySubjectAndId(subject, useSchemaId, format) - id = await this.client.getId(subject, info, false) - if (id !== useSchemaId) { - throw new SerializationError(`failed to match schema ID (${id} != ${useSchemaId})`) - } + id = useSchemaId } else if (useLatestWithMetadata != null && Object.keys(useLatestWithMetadata).length !== 0) { - info = await this.client.getLatestWithMetadata(subject, useLatestWithMetadata, true, format) - id = await this.client.getId(subject, info, false) + let metadata = await this.client.getLatestWithMetadata(subject, useLatestWithMetadata, true, format) + info = metadata + id = metadata.id } else if (useLatest) { - info = await this.client.getLatestSchemaMetadata(subject, format) - id = await this.client.getId(subject, info, false) + let metadata = await this.client.getLatestSchemaMetadata(subject, format) + info = metadata + id = metadata.id } else { id = await this.client.getId(subject, info, Boolean(normalizeSchema)) }