From 84800242a4e9eea3962ed1d1e3999c6ba5efd75b Mon Sep 17 00:00:00 2001 From: Steven Thompson <44806974+thompsonsj@users.noreply.github.com> Date: Fri, 16 Aug 2024 10:17:06 +0100 Subject: [PATCH] fix(pluginfields): additional flag for translation sync checkboxes (#188) * refactor(virtualfields.test): nock helper * fix(pluginfields): additional flag for translation sync checkboxes * fix(pluginfields): type checks --- dev/src/lib/tests/helpers/nock.ts | 30 +++++++++++++++++ .../receive/virtual-fields.test.ts | 33 ++++--------------- plugin/src/lib/fields/pluginFields.ts | 7 ++-- 3 files changed, 40 insertions(+), 30 deletions(-) create mode 100644 dev/src/lib/tests/helpers/nock.ts diff --git a/dev/src/lib/tests/helpers/nock.ts b/dev/src/lib/tests/helpers/nock.ts new file mode 100644 index 0000000..f680739 --- /dev/null +++ b/dev/src/lib/tests/helpers/nock.ts @@ -0,0 +1,30 @@ +import nock from "nock"; +import { mockCrowdinClient } from "plugin/src/lib/api/mock/crowdin-api-responses"; +import { pluginConfig } from "../helpers/plugin-config" + +const pluginOptions = pluginConfig() +const mockClient = mockCrowdinClient(pluginOptions) + +export function nockCreateSourceTranslationFiles({ + createProjectDirectory = false, + fileCount = 1, +}) { + const directoryCount = createProjectDirectory ? 2 : 1 + + return nock('https://api.crowdin.com') + .post( + `/api/v2/projects/${pluginOptions.projectId}/directories` + ) + .times(directoryCount) + .reply(200, mockClient.createDirectory({})) + .post( + `/api/v2/storages` + ) + .times(fileCount) + .reply(200, mockClient.addStorage()) + .post( + `/api/v2/projects/${pluginOptions.projectId}/files` + ) + .times(fileCount) + .reply(200, mockClient.createFile({})) +} diff --git a/dev/src/lib/tests/translations/receive/virtual-fields.test.ts b/dev/src/lib/tests/translations/receive/virtual-fields.test.ts index 2910ca2..3a19951 100644 --- a/dev/src/lib/tests/translations/receive/virtual-fields.test.ts +++ b/dev/src/lib/tests/translations/receive/virtual-fields.test.ts @@ -4,6 +4,8 @@ import nock from "nock"; import { mockCrowdinClient } from "plugin/src/lib/api/mock/crowdin-api-responses"; import { pluginConfig } from "../../helpers/plugin-config" +import { nockCreateSourceTranslationFiles } from "../../helpers/nock" + /** * Test virtual fields * @@ -44,20 +46,9 @@ describe("Virtual fields", () => { describe("No database storage", () => { it("does not store syncTranslations", async () => { - nock('https://api.crowdin.com') - .post( - `/api/v2/projects/${pluginOptions.projectId}/directories` - ) - .twice() - .reply(200, mockClient.createDirectory({})) - .post( - `/api/v2/storages` - ) - .reply(200, mockClient.addStorage()) - .post( - `/api/v2/projects/${pluginOptions.projectId}/files` - ) - .reply(200, mockClient.createFile({})) + nockCreateSourceTranslationFiles({ + createProjectDirectory: true, + }) const post = await payload.create({ collection: "localized-posts", @@ -75,19 +66,7 @@ describe("Virtual fields", () => { }); it("does not store syncAllTranslations", async () => { - nock('https://api.crowdin.com') - .post( - `/api/v2/projects/${pluginOptions.projectId}/directories` - ) - .reply(200, mockClient.createDirectory({})) - .post( - `/api/v2/storages` - ) - .reply(200, mockClient.addStorage()) - .post( - `/api/v2/projects/${pluginOptions.projectId}/files` - ) - .reply(200, mockClient.createFile({})) + nockCreateSourceTranslationFiles({}) const post = await payload.create({ collection: "localized-posts", diff --git a/plugin/src/lib/fields/pluginFields.ts b/plugin/src/lib/fields/pluginFields.ts index 47ebbcd..601fb82 100644 --- a/plugin/src/lib/fields/pluginFields.ts +++ b/plugin/src/lib/fields/pluginFields.ts @@ -59,7 +59,7 @@ export const pluginCollectionOrGlobalFields = ({ context['articleDirectoryId'] = typeof siblingData["crowdinArticleDirectory"] === 'string' ? siblingData["crowdinArticleDirectory"] : siblingData["crowdinArticleDirectory"].id context['draft'] = draft context['excludeLocales'] = excludeLocales - + context["syncTranslations"] = true } // Mutate the sibling data to prevent DB storage // eslint-disable-next-line no-param-reassign @@ -67,7 +67,7 @@ export const pluginCollectionOrGlobalFields = ({ }], afterChange: [async ({ context, req }) => { // type check context, if valid we can safely assume translation updates are desired - if (typeof context['articleDirectoryId'] === 'string' && typeof context['draft'] === 'boolean' && Array.isArray(context['excludeLocales'])) + if (typeof context['articleDirectoryId'] === 'string' && typeof context['draft'] === 'boolean' && Array.isArray(context['excludeLocales']) && typeof context["syncTranslations"] === 'boolean') await updatePayloadTranslation({ articleDirectoryId: context['articleDirectoryId'], pluginOptions, @@ -100,6 +100,7 @@ export const pluginCollectionOrGlobalFields = ({ context['articleDirectoryId'] = typeof siblingData["crowdinArticleDirectory"] === 'string' ? siblingData["crowdinArticleDirectory"] : siblingData["crowdinArticleDirectory"].id context['draft'] = draft + context["syncAllTranslations"] = true } // Mutate the sibling data to prevent DB storage // eslint-disable-next-line no-param-reassign @@ -107,7 +108,7 @@ export const pluginCollectionOrGlobalFields = ({ }], afterChange: [async ({ context, req }) => { // type check context, if valid we can safely assume translation updates are desired - if (typeof context['articleDirectoryId'] === 'string' && typeof context['draft'] === 'boolean') + if (typeof context['articleDirectoryId'] === 'string' && typeof context['draft'] === 'boolean' && typeof context["syncAllTranslations"] === 'boolean') await updatePayloadTranslation({ articleDirectoryId: context['articleDirectoryId'], pluginOptions,