From e6f1ac8907a236d8dfe0a4f08be7c8bdad92f645 Mon Sep 17 00:00:00 2001 From: sb-rohitdesai Date: Mon, 3 Jun 2024 20:17:50 +0530 Subject: [PATCH 1/6] circular reference issue resolved --- packages/cli/package.json | 2 +- packages/http/package.json | 2 +- packages/http/src/mocker/index.ts | 2 +- yarn.lock | 131 ++++++++++++++++++++++-------- 4 files changed, 102 insertions(+), 35 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index dfba5dad2..be789f41a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -8,7 +8,7 @@ "bugs": "https://github.com/stoplightio/prism/issues", "dependencies": { "@stoplight/json": "^3.18.1", - "@stoplight/json-schema-ref-parser": "9.2.7", + "@stoplight/json-schema-ref-parser": "10.0.0", "@stoplight/prism-core": "^5.8.0", "@stoplight/prism-http": "^5.8.1", "@stoplight/prism-http-server": "^5.8.1", diff --git a/packages/http/package.json b/packages/http/package.json index 1a4c6b3aa..32d52e5cb 100644 --- a/packages/http/package.json +++ b/packages/http/package.json @@ -22,7 +22,7 @@ "@stoplight/json-schema-sampler": "0.3.0", "@stoplight/prism-core": "^5.8.0", "@stoplight/http-spec": "^7.0.3", - "@stoplight/json-schema-ref-parser": "9.2.7", + "@stoplight/json-schema-ref-parser": "10.0.0", "@stoplight/types": "^14.1.0", "@stoplight/yaml": "^4.2.3", "abstract-logging": "^2.0.1", diff --git a/packages/http/src/mocker/index.ts b/packages/http/src/mocker/index.ts index ff24e2a3f..5093f89ca 100644 --- a/packages/http/src/mocker/index.ts +++ b/packages/http/src/mocker/index.ts @@ -58,7 +58,7 @@ const mock: IPrismComponents { const payloadGenerator: PayloadGenerator = config.dynamic - ? partial(generate, resource, resource['__bundle__']) + ? partial(generate, resource, resource['__bundled__']) : partial(generateStatic, resource); return pipe( diff --git a/yarn.lock b/yarn.lock index 0c634731f..78f222183 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1076,18 +1076,16 @@ json-schema-compare "^0.2.2" lodash "^4.17.4" -"@stoplight/json-schema-ref-parser@9.2.7": - version "9.2.7" - resolved "https://registry.npmjs.org/@stoplight/json-schema-ref-parser/-/json-schema-ref-parser-9.2.7.tgz" - integrity sha512-1vNzJ7iSrFTAFNbZHPyhI6GiJJw74+WaV61bARUQEDR4Jm80f9s0Tq9uCvGoMYwIFmWDJAoTiyegnUs6SvVxDw== +"@stoplight/json-schema-ref-parser@10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@stoplight/json-schema-ref-parser/-/json-schema-ref-parser-10.0.0.tgz#01c497e2033e48efecdf51a67eb725970e1bb61c" + integrity sha512-EibmayoGsMCIJOEKNvmsrAq37/M7A/rceY8ZAKX8rhwPThgkJ4QTPF0VhgGyfuq9P6i0EQQXM/x6nL7S2uPGsQ== dependencies: "@jsdevtools/ono" "^7.1.3" "@stoplight/path" "^1.3.2" "@stoplight/yaml" "^4.0.2" call-me-maybe "^1.0.1" - fastestsmallesttextencoderdecoder "^1.0.22" - isomorphic-fetch "^3.0.0" - node-abort-controller "^3.0.1" + url "^0.11.3" "@stoplight/json-schema-sampler@0.3.0": version "0.3.0" @@ -1980,6 +1978,17 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4: get-intrinsic "^1.2.1" set-function-length "^1.1.1" +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + call-me-maybe@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz" @@ -2531,6 +2540,15 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" @@ -2747,6 +2765,18 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-get-iterator@^1.1.1: version "1.1.3" resolved "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz" @@ -3051,11 +3081,6 @@ fast-xml-parser@^4.2.0: dependencies: strnum "^1.0.5" -fastestsmallesttextencoderdecoder@^1.0.22: - version "1.0.22" - resolved "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz" - integrity sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw== - fastq@^1.6.0: version "1.15.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" @@ -3308,6 +3333,17 @@ get-intrinsic@^1.0.1, get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@ has-symbols "^1.0.3" hasown "^2.0.0" +get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" @@ -3540,6 +3576,13 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.2.2" +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" @@ -4071,14 +4114,6 @@ isobject@^3.0.1: resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.2" resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" @@ -5330,11 +5365,6 @@ nock@^13.1.3: json-stringify-safe "^5.0.1" propagate "^2.0.0" -node-abort-controller@^3.0.1: - version "3.1.1" - resolved "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz" - integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== - node-addon-api@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" @@ -5347,7 +5377,7 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.1, node-fetch@^2.6.12, node-fetch@^2.6.5, node-fetch@^2.6.7: +node-fetch@^2.6.12, node-fetch@^2.6.5, node-fetch@^2.6.7: version "2.7.0" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -5593,7 +5623,7 @@ nx@16.10.0, "nx@>=16.5.1 < 17": "@nx/nx-win32-arm64-msvc" "16.10.0" "@nx/nx-win32-x64-msvc" "16.10.0" -object-inspect@^1.9.0: +object-inspect@^1.13.1, object-inspect@^1.9.0: version "1.13.1" resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -6162,6 +6192,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + punycode@^2.1.0, punycode@^2.1.1: version "2.3.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" @@ -6172,6 +6207,13 @@ pure-rand@^6.0.0: resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz" integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== +qs@^6.11.2: + version "6.12.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.1.tgz#39422111ca7cbdb70425541cba20c7d7b216599a" + integrity sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ== + dependencies: + side-channel "^1.0.6" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" @@ -6513,6 +6555,18 @@ set-function-length@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + set-function-name@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz" @@ -6555,6 +6609,16 @@ side-channel@^1.0.3, side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" @@ -7291,6 +7355,14 @@ urijs@^1.19.11: resolved "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz" integrity sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== +url@^0.11.3: + version "0.11.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" + integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== + dependencies: + punycode "^1.4.1" + qs "^6.11.2" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" @@ -7401,11 +7473,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -whatwg-fetch@^3.4.1: - version "3.6.19" - resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz" - integrity sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw== - whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" From d34584dd90a86126a390d22c0ee9919ea313be1d Mon Sep 17 00:00:00 2001 From: sb-rohitdesai Date: Mon, 24 Jun 2024 20:52:19 +0530 Subject: [PATCH 2/6] fix: added testcase for error 500 --- .../src/mocker/__tests__/HttpMocker.spec.ts | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts index 9ad103788..a4cae8abf 100644 --- a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts +++ b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts @@ -92,7 +92,7 @@ describe('mocker', () => { { id: 'example-1', key: 'invalid_1', - value: 'invalid input 1', + value: 'invalid input 2', }, { id: 'example-2', @@ -104,6 +104,19 @@ describe('mocker', () => { }, ], }, + { + id: '500', + code: '500', + headers: [], + contents: [ + { + id: 'contents', + mediaType: 'application/json', + examples: [{ id: 'example-1', key: 'internalServerError', value: { message: 'Internal Server Error' } }], + encodings: [], + }, + ], + }, ], }; @@ -676,5 +689,33 @@ describe('mocker', () => { }); }); }); + + describe('should return 404 error', () => { + it('returns a 500 error response', () => { + jest.spyOn(helpers, 'negotiateOptionsForInvalidRequest').mockReturnValue( + right({ + code: '500', + mediaType: 'application/json', + bodyExample: mockResource.responses[3].contents![0].examples![0], + headers: [], + }) + ); + const mockResult = mock({ + config: { dynamic: false }, + resource: mockResource, + input: Object.assign({}, mockInput, { + validations: [{ severity: DiagnosticSeverity.Error }], + }), + })(logger); + console.log('mockResult', mockResult); + + assertRight(mockResult, result => { + expect(result).toMatchObject({ + statusCode: 500, + body: { message: 'Internal Server Error' }, + }); + }); + }); + }); }); }); From 23d8df888d4e67dc5bf80906c63f6fa016919070 Mon Sep 17 00:00:00 2001 From: sb-rohitdesai Date: Mon, 24 Jun 2024 20:53:21 +0530 Subject: [PATCH 3/6] fix: changed the testcase name --- packages/http/src/mocker/__tests__/HttpMocker.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts index a4cae8abf..61c5197c4 100644 --- a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts +++ b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts @@ -690,7 +690,7 @@ describe('mocker', () => { }); }); - describe('should return 404 error', () => { + describe('should return 500 error', () => { it('returns a 500 error response', () => { jest.spyOn(helpers, 'negotiateOptionsForInvalidRequest').mockReturnValue( right({ From 8060af31616e4e9ee4ea427eff492a0fe74d6a2b Mon Sep 17 00:00:00 2001 From: sb-rohitdesai Date: Mon, 24 Jun 2024 20:57:08 +0530 Subject: [PATCH 4/6] fix: removed loggers --- packages/http/src/mocker/__tests__/HttpMocker.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts index 61c5197c4..7d0ecdbe4 100644 --- a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts +++ b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts @@ -707,8 +707,6 @@ describe('mocker', () => { validations: [{ severity: DiagnosticSeverity.Error }], }), })(logger); - console.log('mockResult', mockResult); - assertRight(mockResult, result => { expect(result).toMatchObject({ statusCode: 500, From e3e9a6aa1e7e10168edb3950824ef5007321c4db Mon Sep 17 00:00:00 2001 From: sb-rohitdesai Date: Mon, 24 Jun 2024 21:06:36 +0530 Subject: [PATCH 5/6] fix: removed unnecessary changes --- packages/http/src/mocker/__tests__/HttpMocker.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts index 7d0ecdbe4..f0ccbf09a 100644 --- a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts +++ b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts @@ -92,7 +92,7 @@ describe('mocker', () => { { id: 'example-1', key: 'invalid_1', - value: 'invalid input 2', + value: 'invalid input 1', }, { id: 'example-2', From 23bc796cb1a89155108a627f90e5104e42894371 Mon Sep 17 00:00:00 2001 From: sb-rohitdesai Date: Wed, 26 Jun 2024 16:29:08 +0530 Subject: [PATCH 6/6] fix: test case for dynamic response for circular ref --- .../src/mocker/__tests__/HttpMocker.spec.ts | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts index f0ccbf09a..c40e2e44f 100644 --- a/packages/http/src/mocker/__tests__/HttpMocker.spec.ts +++ b/packages/http/src/mocker/__tests__/HttpMocker.spec.ts @@ -715,5 +715,116 @@ describe('mocker', () => { }); }); }); + + describe('With __bundled__ should get response', () => { + it('With __bundled__ should get response', () => { + const BundledResource: IHttpOperation = { + ...mockResource, + // @ts-ignore - Requires update in @stoplight/types to allow for '__bundled__' + __bundled__: { + properties: { + id: { + type: 'integer', + description: 'Unique identifier for the given user.', + }, + name: { + type: 'string', + }, + surname: { + type: 'string', + }, + user: { + title: 'User', + type: 'object', + examples: [ + { + id: 142, + name: 'Alice', + surname: 'Smith', + }, + ], + required: ['id', 'name', 'surname'], + properties: { + $ref: '#/__bundled__/properties', + }, + }, + test: { + title: 'Test', + type: 'object', + properties: { + id: { + type: 'string', + }, + user: { + title: 'User', + type: 'object', + examples: [ + { + id: 142, + name: 'Alice', + surname: 'Smith', + }, + ], + required: ['id', 'name', 'surname'], + properties: { + $ref: '#/__bundled__/properties', + }, + }, + test: { + title: 'Test', + type: 'object', + properties: { + $ref: '#/__bundled__/properties_2', + }, + }, + }, + }, + }, + properties_2: { + id: { + type: 'string', + }, + user: { + title: 'User', + type: 'object', + examples: [ + { + id: 142, + name: 'Alice', + surname: 'Smith', + }, + ], + required: ['id', 'name', 'surname'], + properties: { + $ref: '#/__bundled__/properties', + }, + }, + test: { + title: 'Test', + type: 'object', + properties: { + $ref: '#/__bundled__/properties_2', + }, + }, + }, + }, + }; + + const mockResult = mock({ + config: { dynamic: true }, + resource: BundledResource, + input: mockInput, + })(logger); + assertRight(mockResult, result => { + expect(result).toMatchObject({ + statusCode: 200, + }); + expect(result).toHaveProperty('body', { + name: expect.any(String), + surname: expect.any(String), + }); + }); + }); + }); }); });