Fix all broken CIs (#7439)

Fix all the broken CIs :p

This includes an ongoing effort to simplify test maintenance by having 1
unique source of truth about metadata and data mocks (that will later be
generated from a unique source of seeds: dev = demo = test)

Regressions:
- Unit line coverage: 60 > 55
- Storybook Pages branch coverage: 40 > 35
We will need to write tests to increase those coverage
- RelationFieldDisplay perf: 0.2ms to 0.22ms > We might have a
regression here
- Removed perf story about RawJSON > We will need to re-add it
This commit is contained in:
Charles Bochet
2024-10-05 00:22:38 +02:00
committed by Charles Bochet
parent bd305c8432
commit d8c4af9279
148 changed files with 4357 additions and 2536 deletions

View File

@ -7,7 +7,7 @@ const jestConfig: JestConfigWithTsJest = {
displayName: 'twenty-server',
rootDir: './',
testEnvironment: 'node',
transformIgnorePatterns: ['../../node_modules/'],
transformIgnorePatterns: ['/node_modules/'],
testRegex: '.*\\.spec\\.ts$',
transform: {
'^.+\\.(t|j)s$': 'ts-jest',

View File

@ -1,6 +1,6 @@
{
"name": "twenty-server",
"version": "0.31.canary",
"version": "0.31.0-canary",
"description": "",
"author": "",
"private": true,

View File

@ -1,3 +1,8 @@
import path from 'path';
export const ASSET_PATH = path.resolve(__dirname, `../../assets`);
// If the code is built through the testing module, assets are not output to the dist/assets directory.
const IS_BUILT_THROUGH_TESTING_MODULE = !__dirname.includes('/dist/');
export const ASSET_PATH = IS_BUILT_THROUGH_TESTING_MODULE
? path.resolve(__dirname, `../`)
: path.resolve(__dirname, `../../assets`);

View File

@ -104,7 +104,7 @@ export const getDevSeedPeopleCustomFields = (
{
workspaceId,
type: FieldMetadataType.MULTI_SELECT,
name: 'workPrefereance',
name: 'workPreference',
label: 'Work Preference',
description: "Person's Work Preference",
icon: 'IconHome',

View File

@ -31,6 +31,9 @@ describe('mapFieldMetadataToGraphqlQuery', () => {
});
describe('should handle all field metadata types', () => {
Object.values(FieldMetadataType).forEach((fieldMetadataType) => {
if (fieldMetadataType === FieldMetadataType.TS_VECTOR) {
return;
}
it(`with field type ${fieldMetadataType}`, () => {
const field = {
type: fieldMetadataType,

View File

@ -10,7 +10,8 @@ describe('computeSchemaComponents', () => {
it('should test all non-deprecated field types', () => {
expect(fields.map((field) => field.type)).toEqual(
Object.keys(FieldMetadataType).filter(
(key) => key !== FieldMetadataType.LINK,
(key) =>
key !== FieldMetadataType.LINK && key !== FieldMetadataType.TS_VECTOR,
),
);
});
@ -21,6 +22,7 @@ describe('computeSchemaComponents', () => {
] as ObjectMetadataEntity[]),
).toEqual({
ObjectName: {
description: undefined,
type: 'object',
properties: {
fieldUuid: {
@ -195,6 +197,7 @@ describe('computeSchemaComponents', () => {
'API',
'IMPORT',
'MANUAL',
'SYSTEM',
],
},
},
@ -203,6 +206,7 @@ describe('computeSchemaComponents', () => {
required: ['fieldNumber'],
},
'ObjectName for Update': {
description: undefined,
type: 'object',
properties: {
fieldUuid: {
@ -377,6 +381,7 @@ describe('computeSchemaComponents', () => {
'API',
'IMPORT',
'MANUAL',
'SYSTEM',
],
},
},
@ -384,6 +389,7 @@ describe('computeSchemaComponents', () => {
},
},
'ObjectName for Response': {
description: undefined,
type: 'object',
properties: {
fieldUuid: {
@ -558,6 +564,7 @@ describe('computeSchemaComponents', () => {
'API',
'IMPORT',
'MANUAL',
'SYSTEM',
],
},
workspaceMemberId: {

View File

@ -1,5 +1,5 @@
import path, { join } from 'path';
import fs from 'fs/promises';
import path, { join } from 'path';
import { ASSET_PATH } from 'src/constants/assets-path';

View File

@ -27,7 +27,7 @@ describe('peopleResolver (integration)', () => {
whatsapp {
primaryPhoneNumber
}
workPrefereance
workPreference
performanceRating
}
}
@ -69,7 +69,7 @@ describe('peopleResolver (integration)', () => {
expect(people).toHaveProperty('companyId');
expect(people).toHaveProperty('intro');
expect(people).toHaveProperty('whatsapp');
expect(people).toHaveProperty('workPrefereance');
expect(people).toHaveProperty('workPreference');
expect(people).toHaveProperty('performanceRating');
}
});

View File

@ -1,61 +0,0 @@
import request from 'supertest';
const client = request(`http://localhost:${APP_PORT}`);
describe('serverlessFunctionsResolver (integration)', () => {
it('should find many serverlessFunctions', () => {
const queryData = {
query: `
query serverlessFunctions {
serverlessFunctions {
edges {
node {
id
name
description
sourceCodeHash
runtime
latestVersion
syncStatus
createdAt
updatedAt
}
}
}
}
`,
};
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {
expect(res.body.data).toBeDefined();
expect(res.body.errors).toBeUndefined();
})
.expect((res) => {
const data = res.body.data.serverlessFunctions;
expect(data).toBeDefined();
expect(Array.isArray(data.edges)).toBe(true);
const edges = data.edges;
if (edges.length > 0) {
const serverlessFunctions = edges[0].node;
expect(serverlessFunctions).toHaveProperty('id');
expect(serverlessFunctions).toHaveProperty('name');
expect(serverlessFunctions).toHaveProperty('description');
expect(serverlessFunctions).toHaveProperty('sourceCodeHash');
expect(serverlessFunctions).toHaveProperty('runtime');
expect(serverlessFunctions).toHaveProperty('latestVersion');
expect(serverlessFunctions).toHaveProperty('syncStatus');
expect(serverlessFunctions).toHaveProperty('createdAt');
expect(serverlessFunctions).toHaveProperty('updatedAt');
}
});
});
});

View File

@ -1,5 +1,5 @@
import 'tsconfig-paths/register';
import { JestConfigWithTsJest } from 'ts-jest';
import 'tsconfig-paths/register';
import { createApp } from './create-app';