From 3ee384fd87c4557b7b064cf1098de99330b4141a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 23 Jun 2022 19:59:23 +0200 Subject: [PATCH] test: Fix failing tests on MySQL for Public API (#3520) * :zap: Generalize transformer * :zap: Use transformer * :test_tube: Fix expectations --- packages/cli/src/databases/entities/User.ts | 4 ++-- .../src/databases/entities/WorkflowEntity.ts | 2 ++ .../cli/src/databases/utils/transformers.ts | 17 ++++++----------- .../integration/publicApi/workflows.test.ts | 4 ++-- 4 files changed, 12 insertions(+), 15 deletions(-) diff --git a/packages/cli/src/databases/entities/User.ts b/packages/cli/src/databases/entities/User.ts index dca67a5e7c..591f26f5b7 100644 --- a/packages/cli/src/databases/entities/User.ts +++ b/packages/cli/src/databases/entities/User.ts @@ -21,7 +21,7 @@ import { Role } from './Role'; import { SharedWorkflow } from './SharedWorkflow'; import { SharedCredentials } from './SharedCredentials'; import { NoXss } from '../utils/customValidators'; -import { answersFormatter, lowerCaser } from '../utils/transformers'; +import { objectRetriever, lowerCaser } from '../utils/transformers'; export const MIN_PASSWORD_LENGTH = 8; @@ -98,7 +98,7 @@ export class User { @Column({ type: resolveDataType('json') as ColumnOptions['type'], nullable: true, - transformer: answersFormatter, + transformer: objectRetriever, }) personalizationAnswers: IPersonalizationSurveyAnswers | null; diff --git a/packages/cli/src/databases/entities/WorkflowEntity.ts b/packages/cli/src/databases/entities/WorkflowEntity.ts index f85e8625ab..069f637737 100644 --- a/packages/cli/src/databases/entities/WorkflowEntity.ts +++ b/packages/cli/src/databases/entities/WorkflowEntity.ts @@ -22,6 +22,7 @@ import * as config from '../../../config'; import { DatabaseType, IWorkflowDb } from '../..'; import { TagEntity } from './TagEntity'; import { SharedWorkflow } from './SharedWorkflow'; +import { objectRetriever } from '../utils/transformers'; function resolveDataType(dataType: string) { const dbType = config.getEnv('database.type'); @@ -95,6 +96,7 @@ export class WorkflowEntity implements IWorkflowDb { @Column({ type: resolveDataType('json') as ColumnOptions['type'], nullable: true, + transformer: objectRetriever, }) staticData?: IDataObject; diff --git a/packages/cli/src/databases/utils/transformers.ts b/packages/cli/src/databases/utils/transformers.ts index c2a9d3e0d2..e3a77fc2df 100644 --- a/packages/cli/src/databases/utils/transformers.ts +++ b/packages/cli/src/databases/utils/transformers.ts @@ -1,5 +1,4 @@ -// eslint-disable-next-line import/no-cycle -import { IPersonalizationSurveyAnswers } from '../../Interfaces'; +import { ValueTransformer } from 'typeorm'; export const idStringifier = { from: (value: number): string | number => (typeof value === 'number' ? value.toString() : value), @@ -12,14 +11,10 @@ export const lowerCaser = { }; /** - * Ensure a consistent return type for personalization answers in `User`. - * Answers currently stored as `TEXT` on Postgres. + * Unmarshal JSON as JS object. */ -export const answersFormatter = { - to: (answers: IPersonalizationSurveyAnswers): IPersonalizationSurveyAnswers => answers, - from: (answers: IPersonalizationSurveyAnswers | string): IPersonalizationSurveyAnswers => { - return typeof answers === 'string' - ? (JSON.parse(answers) as IPersonalizationSurveyAnswers) - : answers; - }, +export const objectRetriever: ValueTransformer = { + to: (value: object): object => value, + from: (value: string | object): object => + typeof value === 'string' ? (JSON.parse(value) as object) : value, }; diff --git a/packages/cli/test/integration/publicApi/workflows.test.ts b/packages/cli/test/integration/publicApi/workflows.test.ts index 27ce110908..17736af836 100644 --- a/packages/cli/test/integration/publicApi/workflows.test.ts +++ b/packages/cli/test/integration/publicApi/workflows.test.ts @@ -1160,7 +1160,7 @@ test('PUT /workflows/:id should update workflow', async () => { expect(name).toBe(payload.name); expect(connections).toEqual(payload.connections); expect(settings).toEqual(payload.settings); - expect(staticData).toEqual(payload.staticData); + expect(staticData).toMatchObject(JSON.parse(payload.staticData)); expect(nodes).toEqual(payload.nodes); expect(active).toBe(false); expect(createdAt).toBe(workflow.createdAt.toISOString()); @@ -1235,7 +1235,7 @@ test('PUT /workflows/:id should update non-owned workflow if owner', async () => expect(name).toBe(payload.name); expect(connections).toEqual(payload.connections); expect(settings).toEqual(payload.settings); - expect(staticData).toEqual(payload.staticData); + expect(staticData).toMatchObject(JSON.parse(payload.staticData)); expect(nodes).toEqual(payload.nodes); expect(active).toBe(false); expect(createdAt).toBe(workflow.createdAt.toISOString());