From fba0847f0fbc4c144ec85bb7a1ed3f2a953f5e05 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 12 Aug 2022 16:08:36 -0700 Subject: [PATCH] fix: ensures you can query on mixed schema type within blocks --- src/mongoose/buildQuery.ts | 2 ++ test/fields/collections/Blocks/index.ts | 5 +++++ test/fields/config.ts | 9 ++++++++- test/fields/int.spec.ts | 24 ++++++++++++++++++++++++ test/localization/int.spec.ts | 6 +++--- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/mongoose/buildQuery.ts b/src/mongoose/buildQuery.ts index 1d80c8e829..e0bface9a8 100644 --- a/src/mongoose/buildQuery.ts +++ b/src/mongoose/buildQuery.ts @@ -203,6 +203,8 @@ class ParamParser { if (priorSchemaType.instance === 'Mixed' || priorSchemaType.instance === 'Array') { lastIncompletePath.path = currentPath; } + } else { + lastIncompletePath.path = currentPath; } if (operator === 'near') { diff --git a/test/fields/collections/Blocks/index.ts b/test/fields/collections/Blocks/index.ts index d8b8c091cd..f0196b2415 100644 --- a/test/fields/collections/Blocks/index.ts +++ b/test/fields/collections/Blocks/index.ts @@ -14,6 +14,10 @@ export const blocksField: Field = { type: 'text', required: true, }, + { + name: 'richText', + type: 'richText', + }, ], }, { @@ -76,6 +80,7 @@ export const blocksFieldSeedData = [ blockName: 'First block', blockType: 'text', text: 'first block', + richText: [], }, { blockName: 'Second block', diff --git a/test/fields/config.ts b/test/fields/config.ts index f361cef2de..434beef4dc 100644 --- a/test/fields/config.ts +++ b/test/fields/config.ts @@ -59,7 +59,6 @@ export default buildConfig({ }); await payload.create({ collection: 'array-fields', data: arrayDoc }); - await payload.create({ collection: 'block-fields', data: blocksDoc }); await payload.create({ collection: 'collapsible-fields', data: collapsibleDoc }); await payload.create({ collection: 'conditional-logic', data: conditionalLogicDoc }); await payload.create({ collection: 'group-fields', data: groupDoc }); @@ -89,5 +88,13 @@ export default buildConfig({ await payload.create({ collection: 'rich-text-fields', data: richTextDocWithRelationship }); await payload.create({ collection: 'number-fields', data: numberDoc }); + + const blocksDocWithRichText = { ...blocksDoc }; + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + blocksDocWithRichText.blocks[0].richText = richTextDocWithRelationship.richText; + + await payload.create({ collection: 'block-fields', data: blocksDocWithRichText }); }, }); diff --git a/test/fields/int.spec.ts b/test/fields/int.spec.ts index 660b33bd4c..4eadbef796 100644 --- a/test/fields/int.spec.ts +++ b/test/fields/int.spec.ts @@ -305,6 +305,30 @@ describe('Fields', () => { expect(blockFields.docs[0].blocks[2].subBlocks[0].number).toEqual(blocksFieldSeedData[2].subBlocks[0].number); expect(blockFields.docs[0].blocks[2].subBlocks[1].text).toEqual(blocksFieldSeedData[2].subBlocks[1].text); }); + + it('should query based on richtext data within a block', async () => { + const blockFieldsSuccess = await payload.find({ + collection: 'block-fields', + where: { + 'blocks.richText.children.text': { + like: 'fun', + }, + }, + }); + + expect(blockFieldsSuccess.docs).toHaveLength(1); + + const blockFieldsFail = await payload.find({ + collection: 'block-fields', + where: { + 'blocks.richText.children.text': { + like: 'funny', + }, + }, + }); + + expect(blockFieldsFail.docs).toHaveLength(0); + }); }); describe('richText', () => { diff --git a/test/localization/int.spec.ts b/test/localization/int.spec.ts index 9e97e6b90f..9ff5cfe629 100644 --- a/test/localization/int.spec.ts +++ b/test/localization/int.spec.ts @@ -230,7 +230,7 @@ describe('Localization', () => { const result = await payload.find({ collection: withLocalizedRelSlug, where: { - 'localizedRelation.title': { + 'localizedRelationship.title': { equals: localizedRelation.title, }, }, @@ -244,7 +244,7 @@ describe('Localization', () => { collection: withLocalizedRelSlug, locale: spanishLocale, where: { - 'localizedRelation.title': { + 'localizedRelationship.title': { equals: relationSpanishTitle, }, }, @@ -258,7 +258,7 @@ describe('Localization', () => { collection: withLocalizedRelSlug, locale: 'all', where: { - 'localizedRelation.title.es': { + 'localizedRelationship.title.es': { equals: relationSpanishTitle, }, },