diff --git a/packages/repository-json-schema/src/__tests__/integration/build-schema.integration.ts b/packages/repository-json-schema/src/__tests__/integration/build-schema.integration.ts index 9d47afa81167..dc0183c6c438 100644 --- a/packages/repository-json-schema/src/__tests__/integration/build-schema.integration.ts +++ b/packages/repository-json-schema/src/__tests__/integration/build-schema.integration.ts @@ -1049,20 +1049,27 @@ describe('build-schema', () => { expect(optionalNothingSchema.title).to.equal('Product'); }); - it('overrides "partial" option when "optional" options is set', () => { + it('overrides "partial" option when "optional" option is set', () => { const originalSchema = getJsonSchema(Product); expect(originalSchema.required).to.deepEqual(['id', 'name']); expect(originalSchema.title).to.equal('Product'); - const optionalNameSchema = getJsonSchema(Product, { + let optionalNameSchema = getJsonSchema(Product, { partial: true, optional: ['name'], }); expect(optionalNameSchema.required).to.deepEqual(['id']); expect(optionalNameSchema.title).to.equal('ProductOptional[name]'); + + optionalNameSchema = getJsonSchema(Product, { + partial: false, + optional: ['name'], + }); + expect(optionalNameSchema.required).to.deepEqual(['id']); + expect(optionalNameSchema.title).to.equal('ProductOptional[name]'); }); - it('uses "partial" option, if provided, when "optional" options is set but empty', () => { + it('uses "partial" option, if provided, when "optional" option is set but empty', () => { const originalSchema = getJsonSchema(Product); expect(originalSchema.required).to.deepEqual(['id', 'name']); expect(originalSchema.title).to.equal('Product'); diff --git a/packages/repository-json-schema/src/build-schema.ts b/packages/repository-json-schema/src/build-schema.ts index 423a17d6719a..80f0cdd46b89 100644 --- a/packages/repository-json-schema/src/build-schema.ts +++ b/packages/repository-json-schema/src/build-schema.ts @@ -26,7 +26,8 @@ export interface JsonSchemaOptions { /** * Set this flag to mark all model properties as optional. This is typically - * used to describe request body of PATCH endpoints. + * used to describe request body of PATCH endpoints. This option will be + * overridden by the "optional" option if it is set and non-empty. */ partial?: boolean; @@ -36,7 +37,8 @@ export interface JsonSchemaOptions { exclude?: (keyof T)[]; /** - * List of model properties to mark as optional. + * List of model properties to mark as optional. Overrides the "partial" + * option if it is not empty. */ optional?: (keyof T)[];