From d9c0530dd35670c37e3b06af03d7d7929c95fdf5 Mon Sep 17 00:00:00 2001 From: Guillim Date: Thu, 7 Nov 2024 17:22:47 +0100 Subject: [PATCH] Integration test : Sync mode + db reset option + cleaning (#8376) Run the CI integrationin sync mode and add the option to run it without db reset cleaning all the useless integration test --------- Co-authored-by: guillim --- .github/workflows/ci-server.yaml | 2 +- .../twenty-server/jest-integration.config.ts | 1 + packages/twenty-server/project.json | 12 +- .../auth/strategies/jwt.auth.strategy.spec.ts | 2 +- ...all-api-keys-resolvers.integration-spec.ts | 404 ------------- ...-attachments-resolvers.integration-spec.ts | 435 -------------- ...l-audit-logs-resolvers.integration-spec.ts | 421 -------------- ...associations-resolvers.integration-spec.ts | 535 ------------------ ...participants-resolvers.integration-spec.ts | 479 ---------------- ...ted-accounts-resolvers.integration-spec.ts | 420 -------------- ...ll-favorites-resolvers.integration-spec.ts | 409 ------------- ...associations-resolvers.integration-spec.ts | 493 ---------------- ...participants-resolvers.integration-spec.ts | 466 --------------- ...sage-threads-resolvers.integration-spec.ts | 397 ------------- ...note-targets-resolvers.integration-spec.ts | 444 --------------- .../all-notes-resolvers.integration-spec.ts | 403 ------------- ...pportunities-resolvers.integration-spec.ts | 414 -------------- .../suites/all-resolvers.integration-spec.ts | 430 -------------- ...task-targets-resolvers.integration-spec.ts | 444 --------------- .../all-tasks-resolvers.integration-spec.ts | 403 ------------- ...ll-timeline-activities.integration-spec.ts | 477 ---------------- .../all-view-fields.integration-spec.ts | 407 ------------- .../all-view-filters.integration-spec.ts | 407 ------------- .../suites/all-view-sorts.integration-spec.ts | 399 ------------- .../suites/all-views.integration-spec.ts | 429 -------------- .../suites/all-webhooks.integration-spec.ts | 403 ------------- .../backend-development/server-commands.mdx | 4 +- 27 files changed, 16 insertions(+), 9524 deletions(-) delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-api-keys-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-attachments-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-audit-logs-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-calendar-channel-event-associations-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-calendar-event-participants-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-connected-accounts-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-favorites-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-message-channel-message-associations-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-message-participants-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-message-threads-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-note-targets-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-notes-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-opportunities-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-task-targets-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-tasks-resolvers.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-timeline-activities.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-view-fields.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-view-filters.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-view-sorts.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-views.integration-spec.ts delete mode 100644 packages/twenty-server/test/integration/graphql/suites/all-webhooks.integration-spec.ts diff --git a/.github/workflows/ci-server.yaml b/.github/workflows/ci-server.yaml index 9b24cacc4..b4fb89e4d 100644 --- a/.github/workflows/ci-server.yaml +++ b/.github/workflows/ci-server.yaml @@ -146,7 +146,7 @@ jobs: uses: ./.github/workflows/actions/nx-affected with: tag: scope:backend - tasks: "test:integration" + tasks: "test:integration:with-db-reset" - name: Server / Upload reset-logs file if: always() uses: actions/upload-artifact@v4 diff --git a/packages/twenty-server/jest-integration.config.ts b/packages/twenty-server/jest-integration.config.ts index 9dc26ba51..5cf3ce61f 100644 --- a/packages/twenty-server/jest-integration.config.ts +++ b/packages/twenty-server/jest-integration.config.ts @@ -14,6 +14,7 @@ const jestConfig: JestConfigWithTsJest = { globalSetup: '/test/integration/utils/setup-test.ts', globalTeardown: '/test/integration/utils/teardown-test.ts', testTimeout: 15000, + maxWorkers: 1, moduleNameMapper: { ...pathsToModuleNameMapper(tsConfig.compilerOptions.paths, { prefix: '/../..', diff --git a/packages/twenty-server/project.json b/packages/twenty-server/project.json index de8dec76a..b3c45f24a 100644 --- a/packages/twenty-server/project.json +++ b/packages/twenty-server/project.json @@ -16,10 +16,18 @@ "options": { "cwd": "packages/twenty-server", "commands": [ - "NODE_ENV=test nx database:reset > reset-logs.log && NODE_ENV=test nx jest --config ./jest-integration.config.ts" + "NODE_ENV=test nx jest --config ./jest-integration.config.ts" ] }, - "parallel": false + "parallel": false, + "configurations": { + "with-db-reset": { + "cwd": "packages/twenty-server", + "commands": [ + "NODE_ENV=test nx database:reset > reset-logs.log && NODE_ENV=test nx jest --config ./jest-integration.config.ts" + ] + } + } }, "build:packageJson": { "executor": "@nx/js:tsc", diff --git a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts index fdc4e0646..e924cd167 100644 --- a/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/auth/strategies/jwt.auth.strategy.spec.ts @@ -7,7 +7,7 @@ import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { JwtAuthStrategy } from './jwt.auth.strategy'; -xdescribe('JwtAuthStrategy', () => { +describe('JwtAuthStrategy', () => { let strategy: JwtAuthStrategy; let workspaceRepository: any; diff --git a/packages/twenty-server/test/integration/graphql/suites/all-api-keys-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-api-keys-resolvers.integration-spec.ts deleted file mode 100644 index 369ea8430..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-api-keys-resolvers.integration-spec.ts +++ /dev/null @@ -1,404 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const API_KEY_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const API_KEY_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const API_KEY_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const API_KEY_GQL_FIELDS = ` - id - name - expiresAt - revokedAt - createdAt - updatedAt - deletedAt -`; - -describe('apiKeys resolvers (integration)', () => { - it('1. should create and return API keys', async () => { - const apiKeyName1 = generateRecordName(API_KEY_1_ID); - const apiKeyName2 = generateRecordName(API_KEY_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - data: [ - { - id: API_KEY_1_ID, - name: apiKeyName1, - expiresAt: new Date(), - }, - { - id: API_KEY_2_ID, - name: apiKeyName2, - expiresAt: new Date(), - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createApiKeys).toHaveLength(2); - - response.body.data.createApiKeys.forEach((apiKey) => { - expect(apiKey).toHaveProperty('name'); - expect([apiKeyName1, apiKeyName2]).toContain(apiKey.name); - expect(apiKey).toHaveProperty('expiresAt'); - expect(apiKey).toHaveProperty('revokedAt'); - expect(apiKey).toHaveProperty('id'); - expect(apiKey).toHaveProperty('createdAt'); - expect(apiKey).toHaveProperty('updatedAt'); - expect(apiKey).toHaveProperty('deletedAt'); - }); - }); - - it('1b. should create and return one API key', async () => { - const apiKeyName = generateRecordName(API_KEY_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - data: { - id: API_KEY_3_ID, - name: apiKeyName, - expiresAt: new Date(), - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdApiKey = response.body.data.createApiKey; - - expect(createdApiKey).toHaveProperty('name'); - expect(createdApiKey.name).toEqual(apiKeyName); - expect(createdApiKey).toHaveProperty('expiresAt'); - expect(createdApiKey).toHaveProperty('revokedAt'); - expect(createdApiKey).toHaveProperty('id'); - expect(createdApiKey).toHaveProperty('createdAt'); - expect(createdApiKey).toHaveProperty('updatedAt'); - expect(createdApiKey).toHaveProperty('deletedAt'); - }); - - it('2. should find many API keys', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.apiKeys; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const apiKeys = edges[0].node; - - expect(apiKeys).toHaveProperty('name'); - expect(apiKeys).toHaveProperty('expiresAt'); - expect(apiKeys).toHaveProperty('revokedAt'); - expect(apiKeys).toHaveProperty('id'); - expect(apiKeys).toHaveProperty('createdAt'); - expect(apiKeys).toHaveProperty('updatedAt'); - expect(apiKeys).toHaveProperty('deletedAt'); - } - }); - - it('2b. should find one API key', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - eq: API_KEY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const apiKey = response.body.data.apiKey; - - expect(apiKey).toHaveProperty('name'); - expect(apiKey).toHaveProperty('expiresAt'); - expect(apiKey).toHaveProperty('revokedAt'); - expect(apiKey).toHaveProperty('id'); - expect(apiKey).toHaveProperty('createdAt'); - expect(apiKey).toHaveProperty('updatedAt'); - expect(apiKey).toHaveProperty('deletedAt'); - }); - - it('3. should update many API keys', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - data: { - name: 'Updated Name', - }, - filter: { - id: { - in: [API_KEY_1_ID, API_KEY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedApiKeys = response.body.data.updateApiKeys; - - expect(updatedApiKeys).toHaveLength(2); - - updatedApiKeys.forEach((apiKey) => { - expect(apiKey.name).toEqual('Updated Name'); - }); - }); - - it('3b. should update one API key', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - data: { - name: 'New Name', - }, - recordId: API_KEY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedApiKey = response.body.data.updateApiKey; - - expect(updatedApiKey.name).toEqual('New Name'); - }); - - it('4. should find many API keys with updated name', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - name: { - eq: 'Updated Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.apiKeys.edges).toHaveLength(2); - }); - - it('4b. should find one API key with updated name', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - name: { - eq: 'New Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.apiKey.name).toEqual('New Name'); - }); - - it('5. should delete many API keys', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - in: [API_KEY_1_ID, API_KEY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedApiKeys = response.body.data.deleteApiKeys; - - expect(deletedApiKeys).toHaveLength(2); - - deletedApiKeys.forEach((apiKey) => { - expect(apiKey.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one API key', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - recordId: API_KEY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteApiKey.deletedAt).toBeTruthy(); - }); - - it('6. should not find many API keys anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - in: [API_KEY_1_ID, API_KEY_2_ID], - }, - }, - }); - - const findApiKeysResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findApiKeysResponse.body.data.apiKeys.edges).toHaveLength(0); - }); - - it('6b. should not find one API key anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - eq: API_KEY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.apiKey).toBeNull(); - }); - - it('7. should find many deleted API keys with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - in: [API_KEY_1_ID, API_KEY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.apiKeys.edges).toHaveLength(2); - }); - - it('7b. should find one deleted API key with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - eq: API_KEY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.apiKey.id).toEqual(API_KEY_3_ID); - }); - - it('8. should destroy many API keys', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - in: [API_KEY_1_ID, API_KEY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyApiKeys).toHaveLength(2); - }); - - it('8b. should destroy one API key', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - recordId: API_KEY_3_ID, - }); - - const destroyApiKeyResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyApiKeyResponse.body.data.destroyApiKey).toBeTruthy(); - }); - - it('9. should not find many API keys anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'apiKey', - objectMetadataPluralName: 'apiKeys', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - in: [API_KEY_1_ID, API_KEY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.apiKeys.edges).toHaveLength(0); - }); - - it('9b. should not find one API key anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'apiKey', - gqlFields: API_KEY_GQL_FIELDS, - filter: { - id: { - eq: API_KEY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.apiKey).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-attachments-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-attachments-resolvers.integration-spec.ts deleted file mode 100644 index 8bfd572d4..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-attachments-resolvers.integration-spec.ts +++ /dev/null @@ -1,435 +0,0 @@ -import { TIM_ACCOUNT_ID } from 'test/integration/graphql/integration.constants'; -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const ATTACHMENT_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const ATTACHMENT_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const ATTACHMENT_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; - -const ATTACHMENT_GQL_FIELDS = ` - id - name - fullPath - type - createdAt - updatedAt - deletedAt - authorId - taskId - noteId - personId - companyId - opportunityId -`; - -describe('attachments resolvers (integration)', () => { - it('1. should create and return multiple attachments', async () => { - const attachmentName1 = generateRecordName(ATTACHMENT_1_ID); - const attachmentName2 = generateRecordName(ATTACHMENT_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - data: [ - { - id: ATTACHMENT_1_ID, - name: attachmentName1, - authorId: TIM_ACCOUNT_ID, - }, - { - id: ATTACHMENT_2_ID, - name: attachmentName2, - authorId: TIM_ACCOUNT_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createAttachments).toHaveLength(2); - - response.body.data.createAttachments.forEach((attachment) => { - expect(attachment).toHaveProperty('name'); - expect([attachmentName1, attachmentName2]).toContain(attachment.name); - expect(attachment).toHaveProperty('fullPath'); - expect(attachment).toHaveProperty('type'); - expect(attachment).toHaveProperty('id'); - expect(attachment).toHaveProperty('createdAt'); - expect(attachment).toHaveProperty('updatedAt'); - expect(attachment).toHaveProperty('deletedAt'); - expect(attachment).toHaveProperty('authorId'); - expect(attachment).toHaveProperty('taskId'); - expect(attachment).toHaveProperty('noteId'); - expect(attachment).toHaveProperty('personId'); - expect(attachment).toHaveProperty('companyId'); - expect(attachment).toHaveProperty('opportunityId'); - }); - }); - - it('2. should create and return one attachment', async () => { - const attachmentName = generateRecordName(ATTACHMENT_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - data: { - id: ATTACHMENT_3_ID, - name: attachmentName, - authorId: TIM_ACCOUNT_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdAttachment = response.body.data.createAttachment; - - expect(createdAttachment).toHaveProperty('name', attachmentName); - expect(createdAttachment).toHaveProperty('fullPath'); - expect(createdAttachment).toHaveProperty('type'); - expect(createdAttachment).toHaveProperty('id'); - expect(createdAttachment).toHaveProperty('createdAt'); - expect(createdAttachment).toHaveProperty('updatedAt'); - expect(createdAttachment).toHaveProperty('deletedAt'); - expect(createdAttachment).toHaveProperty('authorId'); - expect(createdAttachment).toHaveProperty('taskId'); - expect(createdAttachment).toHaveProperty('noteId'); - expect(createdAttachment).toHaveProperty('personId'); - expect(createdAttachment).toHaveProperty('companyId'); - expect(createdAttachment).toHaveProperty('opportunityId'); - }); - - it('2. should find many attachments', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.attachments; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const attachments = data.edges[0].node; - - expect(attachments).toHaveProperty('name'); - expect(attachments).toHaveProperty('fullPath'); - expect(attachments).toHaveProperty('type'); - expect(attachments).toHaveProperty('id'); - expect(attachments).toHaveProperty('createdAt'); - expect(attachments).toHaveProperty('updatedAt'); - expect(attachments).toHaveProperty('deletedAt'); - expect(attachments).toHaveProperty('authorId'); - expect(attachments).toHaveProperty('taskId'); - expect(attachments).toHaveProperty('noteId'); - expect(attachments).toHaveProperty('personId'); - expect(attachments).toHaveProperty('companyId'); - expect(attachments).toHaveProperty('opportunityId'); - } - }); - - it('2b. should find one attachment', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - eq: ATTACHMENT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const attachment = response.body.data.attachment; - - expect(attachment).toHaveProperty('name'); - expect(attachment).toHaveProperty('fullPath'); - expect(attachment).toHaveProperty('type'); - expect(attachment).toHaveProperty('id'); - expect(attachment).toHaveProperty('createdAt'); - expect(attachment).toHaveProperty('updatedAt'); - expect(attachment).toHaveProperty('deletedAt'); - expect(attachment).toHaveProperty('authorId'); - expect(attachment).toHaveProperty('taskId'); - expect(attachment).toHaveProperty('noteId'); - expect(attachment).toHaveProperty('personId'); - expect(attachment).toHaveProperty('companyId'); - expect(attachment).toHaveProperty('opportunityId'); - }); - - it('3. should update many attachments', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - data: { - name: 'Updated Name', - }, - filter: { - id: { - in: [ATTACHMENT_1_ID, ATTACHMENT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedAttachments = response.body.data.updateAttachments; - - expect(updatedAttachments).toHaveLength(2); - - updatedAttachments.forEach((attachment) => { - expect(attachment.name).toEqual('Updated Name'); - }); - }); - - it('3b. should update one attachment', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - data: { - name: 'New Name', - }, - recordId: ATTACHMENT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedAttachment = response.body.data.updateAttachment; - - expect(updatedAttachment.name).toEqual('New Name'); - }); - - it('4. should find many attachments with updated name', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - name: { - eq: 'Updated Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.attachments.edges).toHaveLength(2); - }); - - it('4b. should find one attachment with updated name', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - name: { - eq: 'New Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.attachment.name).toEqual('New Name'); - }); - - it('5. should delete many attachments', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - in: [ATTACHMENT_1_ID, ATTACHMENT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedAttachments = response.body.data.deleteAttachments; - - expect(deletedAttachments).toHaveLength(2); - - deletedAttachments.forEach((attachment) => { - expect(attachment.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one attachment', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - recordId: ATTACHMENT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteAttachment.deletedAt).toBeTruthy(); - }); - - it('6. should not find many attachments anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - in: [ATTACHMENT_1_ID, ATTACHMENT_2_ID], - }, - }, - }); - - const findAttachmentsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(findAttachmentsResponse.body.data.attachments.edges).toHaveLength(0); - }); - - it('6b. should not find one attachment anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - eq: ATTACHMENT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.attachment).toBeNull(); - }); - - it('7. should find many deleted attachments with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - in: [ATTACHMENT_1_ID, ATTACHMENT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.attachments.edges).toHaveLength(2); - }); - - it('7b. should find one deleted attachment with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - eq: ATTACHMENT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.attachment.id).toEqual(ATTACHMENT_3_ID); - }); - - it('8. should destroy many attachments', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - in: [ATTACHMENT_1_ID, ATTACHMENT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyAttachments).toHaveLength(2); - }); - - it('8b. should destroy one attachment', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - recordId: ATTACHMENT_3_ID, - }); - - const destroyAttachmentResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyAttachmentResponse.body.data.destroyAttachment).toBeTruthy(); - }); - - it('9. should not find many attachments anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'attachment', - objectMetadataPluralName: 'attachments', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - in: [ATTACHMENT_1_ID, ATTACHMENT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.attachments.edges).toHaveLength(0); - }); - - it('9b. should not find one attachment anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'attachment', - gqlFields: ATTACHMENT_GQL_FIELDS, - filter: { - id: { - eq: ATTACHMENT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.attachment).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-audit-logs-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-audit-logs-resolvers.integration-spec.ts deleted file mode 100644 index 4e5c74c22..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-audit-logs-resolvers.integration-spec.ts +++ /dev/null @@ -1,421 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const AUDIT_LOG_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const AUDIT_LOG_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const AUDIT_LOG_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; - -const AUDIT_LOG_GQL_FIELDS = ` - id - name - properties - context - objectName - objectMetadataId - recordId - createdAt - updatedAt - deletedAt - workspaceMemberId -`; - -describe('auditLogs resolvers (integration)', () => { - it('1. should create and return auditLogs', async () => { - const auditLogName1 = generateRecordName(AUDIT_LOG_1_ID); - const auditLogName2 = generateRecordName(AUDIT_LOG_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - data: [ - { - id: AUDIT_LOG_1_ID, - name: auditLogName1, - }, - { - id: AUDIT_LOG_2_ID, - name: auditLogName2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createAuditLogs).toHaveLength(2); - - response.body.data.createAuditLogs.forEach((auditLog) => { - expect(auditLog).toHaveProperty('name'); - expect([auditLogName1, auditLogName2]).toContain(auditLog.name); - expect(auditLog).toHaveProperty('properties'); - expect(auditLog).toHaveProperty('context'); - expect(auditLog).toHaveProperty('objectName'); - expect(auditLog).toHaveProperty('objectMetadataId'); - expect(auditLog).toHaveProperty('recordId'); - expect(auditLog).toHaveProperty('id'); - expect(auditLog).toHaveProperty('createdAt'); - expect(auditLog).toHaveProperty('updatedAt'); - expect(auditLog).toHaveProperty('deletedAt'); - expect(auditLog).toHaveProperty('workspaceMemberId'); - }); - }); - - it('1b. should create and return one auditLog', async () => { - const auditLogName = generateRecordName(AUDIT_LOG_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - data: { - id: AUDIT_LOG_3_ID, - name: auditLogName, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdAuditLog = response.body.data.createAuditLog; - - expect(createdAuditLog).toHaveProperty('name'); - expect(createdAuditLog.name).toEqual(auditLogName); - expect(createdAuditLog).toHaveProperty('properties'); - expect(createdAuditLog).toHaveProperty('context'); - expect(createdAuditLog).toHaveProperty('objectName'); - expect(createdAuditLog).toHaveProperty('objectMetadataId'); - expect(createdAuditLog).toHaveProperty('recordId'); - expect(createdAuditLog).toHaveProperty('id'); - expect(createdAuditLog).toHaveProperty('createdAt'); - expect(createdAuditLog).toHaveProperty('updatedAt'); - expect(createdAuditLog).toHaveProperty('deletedAt'); - expect(createdAuditLog).toHaveProperty('workspaceMemberId'); - }); - - it('2. should find many auditLogs', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.auditLogs; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const auditLogs = data.edges[0].node; - - expect(auditLogs).toHaveProperty('name'); - expect(auditLogs).toHaveProperty('properties'); - expect(auditLogs).toHaveProperty('context'); - expect(auditLogs).toHaveProperty('objectName'); - expect(auditLogs).toHaveProperty('objectMetadataId'); - expect(auditLogs).toHaveProperty('recordId'); - expect(auditLogs).toHaveProperty('id'); - expect(auditLogs).toHaveProperty('createdAt'); - expect(auditLogs).toHaveProperty('updatedAt'); - expect(auditLogs).toHaveProperty('deletedAt'); - expect(auditLogs).toHaveProperty('workspaceMemberId'); - } - }); - - it('2b. should find one auditLog', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - eq: AUDIT_LOG_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const auditLog = response.body.data.auditLog; - - expect(auditLog).toHaveProperty('name'); - expect(auditLog).toHaveProperty('properties'); - expect(auditLog).toHaveProperty('context'); - expect(auditLog).toHaveProperty('objectName'); - expect(auditLog).toHaveProperty('objectMetadataId'); - expect(auditLog).toHaveProperty('recordId'); - expect(auditLog).toHaveProperty('id'); - expect(auditLog).toHaveProperty('createdAt'); - expect(auditLog).toHaveProperty('updatedAt'); - expect(auditLog).toHaveProperty('deletedAt'); - expect(auditLog).toHaveProperty('workspaceMemberId'); - }); - - it('3. should update many auditLogs', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - data: { - name: 'Updated Name', - }, - filter: { - id: { - in: [AUDIT_LOG_1_ID, AUDIT_LOG_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedAuditLogs = response.body.data.updateAuditLogs; - - expect(updatedAuditLogs).toHaveLength(2); - - updatedAuditLogs.forEach((auditLog) => { - expect(auditLog.name).toEqual('Updated Name'); - }); - }); - - it('3b. should update one auditLog', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - data: { - name: 'New Name', - }, - recordId: AUDIT_LOG_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedAuditLog = response.body.data.updateAuditLog; - - expect(updatedAuditLog.name).toEqual('New Name'); - }); - - it('4. should find many auditLogs with updated name', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - name: { - eq: 'Updated Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.auditLogs.edges).toHaveLength(2); - }); - - it('4b. should find one auditLog with updated name', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - name: { - eq: 'New Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.auditLog.name).toEqual('New Name'); - }); - - it('5. should delete many auditLogs', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - in: [AUDIT_LOG_1_ID, AUDIT_LOG_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedAuditLogs = response.body.data.deleteAuditLogs; - - expect(deletedAuditLogs).toHaveLength(2); - - deletedAuditLogs.forEach((auditLog) => { - expect(auditLog.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one auditLog', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - recordId: AUDIT_LOG_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteAuditLog.deletedAt).toBeTruthy(); - }); - - it('6. should not find many auditLogs anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - in: [AUDIT_LOG_1_ID, AUDIT_LOG_2_ID], - }, - }, - }); - - const findAuditLogsResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findAuditLogsResponse.body.data.auditLogs.edges).toHaveLength(0); - }); - - it('6b. should not find one auditLog anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - eq: AUDIT_LOG_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.auditLog).toBeNull(); - }); - - it('7. should find many deleted auditLogs with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - in: [AUDIT_LOG_1_ID, AUDIT_LOG_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.auditLogs.edges).toHaveLength(2); - }); - - it('7b. should find one deleted auditLog with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - eq: AUDIT_LOG_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.auditLog.id).toEqual(AUDIT_LOG_3_ID); - }); - - it('8. should destroy many auditLogs', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - in: [AUDIT_LOG_1_ID, AUDIT_LOG_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyAuditLogs).toHaveLength(2); - }); - - it('8b. should destroy one auditLog', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - recordId: AUDIT_LOG_3_ID, - }); - - const destroyAuditLogResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyAuditLogResponse.body.data.destroyAuditLog).toBeTruthy(); - }); - - it('9. should not find many auditLogs anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'auditLog', - objectMetadataPluralName: 'auditLogs', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - in: [AUDIT_LOG_1_ID, AUDIT_LOG_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.auditLogs.edges).toHaveLength(0); - }); - - it('9b. should not find one auditLog anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'auditLog', - gqlFields: AUDIT_LOG_GQL_FIELDS, - filter: { - id: { - eq: AUDIT_LOG_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.auditLog).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-calendar-channel-event-associations-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-calendar-channel-event-associations-resolvers.integration-spec.ts deleted file mode 100644 index e24c7af99..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-calendar-channel-event-associations-resolvers.integration-spec.ts +++ /dev/null @@ -1,535 +0,0 @@ -import { TIM_ACCOUNT_ID } from 'test/integration/graphql/integration.constants'; -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID = - '777a8457-eb2d-40ac-a707-551b615b6987'; -const CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID = - '777a8457-eb2d-40ac-a707-551b615b6988'; -const CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID = - '777a8457-eb2d-40ac-a707-551b615b6989'; -const CALENDAR_EVENT_ID = '777a8457-eb2d-40ac-a707-221b615b6989'; -const CALENDAR_CHANNEL_ID = '777a8457-eb2d-40ac-a707-331b615b6989'; -const CONNECTED_ACCOUNT_ID = '777a8457-eb2d-40ac-a707-441b615b6989'; - -const CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS = ` - id - eventExternalId - createdAt - updatedAt - deletedAt - calendarChannelId - calendarEventId -`; - -describe('calendarChannelEventAssociations resolvers (integration)', () => { - beforeAll(async () => { - const connectedAccountHandle = generateRecordName(CONNECTED_ACCOUNT_ID); - const createConnectedAccountgraphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: `id`, - data: { - id: CONNECTED_ACCOUNT_ID, - accountOwnerId: TIM_ACCOUNT_ID, - handle: connectedAccountHandle, - }, - }); - - const calendarChannelHandle = generateRecordName(CALENDAR_CHANNEL_ID); - const createCalendarChannelgraphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'calendarChannel', - gqlFields: `id`, - data: { - id: CALENDAR_CHANNEL_ID, - handle: calendarChannelHandle, - connectedAccountId: CONNECTED_ACCOUNT_ID, - }, - }); - - const calendarEventTitle = generateRecordName(CALENDAR_EVENT_ID); - const createCalendarEventgraphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'calendarEvent', - gqlFields: `id`, - data: { - id: CALENDAR_EVENT_ID, - title: calendarEventTitle, - }, - }); - - await makeGraphqlAPIRequest(createConnectedAccountgraphqlOperation); - - await makeGraphqlAPIRequest(createCalendarChannelgraphqlOperation); - await makeGraphqlAPIRequest(createCalendarEventgraphqlOperation); - }); - - afterAll(async () => { - const destroyConnectedAccountGraphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: `id`, - recordId: CONNECTED_ACCOUNT_ID, - }); - - const destroyCalendarChannelGraphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'calendarChannel', - gqlFields: `id`, - recordId: CALENDAR_CHANNEL_ID, - }); - - const destroyCalendarEventGraphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'calendarEvent', - gqlFields: `id`, - recordId: CALENDAR_EVENT_ID, - }); - - await makeGraphqlAPIRequest(destroyConnectedAccountGraphqlOperation); - await makeGraphqlAPIRequest(destroyCalendarChannelGraphqlOperation); - await makeGraphqlAPIRequest(destroyCalendarEventGraphqlOperation); - }); - - it('1. should create and return calendarChannelEventAssociations', async () => { - const eventExternalId1 = generateRecordName( - CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - ); - const eventExternalId2 = generateRecordName( - CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - ); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - data: [ - { - id: CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - eventExternalId: eventExternalId1, - calendarChannelId: CALENDAR_CHANNEL_ID, - calendarEventId: CALENDAR_EVENT_ID, - }, - { - id: CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - eventExternalId: eventExternalId2, - calendarChannelId: CALENDAR_CHANNEL_ID, - calendarEventId: CALENDAR_EVENT_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.createCalendarChannelEventAssociations, - ).toHaveLength(2); - - response.body.data.createCalendarChannelEventAssociations.forEach( - (association) => { - expect(association).toHaveProperty('eventExternalId'); - expect([eventExternalId1, eventExternalId2]).toContain( - association.eventExternalId, - ); - expect(association).toHaveProperty('id'); - expect(association).toHaveProperty('createdAt'); - expect(association).toHaveProperty('updatedAt'); - expect(association).toHaveProperty('deletedAt'); - expect(association).toHaveProperty('calendarChannelId'); - expect(association).toHaveProperty('calendarEventId'); - }, - ); - }); - - it('1b. should create and return one calendarChannelEventAssociation', async () => { - const eventExternalId = generateRecordName( - CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - ); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - data: { - id: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - eventExternalId: eventExternalId, - calendarChannelId: CALENDAR_CHANNEL_ID, - calendarEventId: CALENDAR_EVENT_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdAssociation = - response.body.data.createCalendarChannelEventAssociation; - - expect(createdAssociation).toHaveProperty('eventExternalId'); - expect(createdAssociation.eventExternalId).toEqual(eventExternalId); - expect(createdAssociation).toHaveProperty('id'); - expect(createdAssociation).toHaveProperty('createdAt'); - expect(createdAssociation).toHaveProperty('updatedAt'); - expect(createdAssociation).toHaveProperty('deletedAt'); - expect(createdAssociation).toHaveProperty('calendarChannelId'); - expect(createdAssociation).toHaveProperty('calendarEventId'); - }); - - it('2. should find many calendarChannelEventAssociations', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.calendarChannelEventAssociations; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const associations = data.edges[0].node; - - expect(associations).toHaveProperty('eventExternalId'); - expect(associations).toHaveProperty('id'); - expect(associations).toHaveProperty('createdAt'); - expect(associations).toHaveProperty('updatedAt'); - expect(associations).toHaveProperty('deletedAt'); - expect(associations).toHaveProperty('calendarChannelId'); - expect(associations).toHaveProperty('calendarEventId'); - } - }); - - it('2b. should find one calendarChannelEventAssociation', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const association = response.body.data.calendarChannelEventAssociation; - - expect(association).toHaveProperty('eventExternalId'); - expect(association).toHaveProperty('id'); - expect(association).toHaveProperty('createdAt'); - expect(association).toHaveProperty('updatedAt'); - expect(association).toHaveProperty('deletedAt'); - expect(association).toHaveProperty('calendarChannelId'); - expect(association).toHaveProperty('calendarEventId'); - }); - - it('3. should update many calendarChannelEventAssociations', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - data: { - eventExternalId: 'updated-message-external-id', - }, - filter: { - id: { - in: [ - CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedAssociations = - response.body.data.updateCalendarChannelEventAssociations; - - expect(updatedAssociations).toHaveLength(2); - - updatedAssociations.forEach((association) => { - expect(association.eventExternalId).toEqual( - 'updated-message-external-id', - ); - }); - }); - - it('3b. should update one calendarChannelEventAssociation', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - data: { - eventExternalId: 'new-message-external-id', - }, - recordId: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedAssociation = - response.body.data.updateCalendarChannelEventAssociation; - - expect(updatedAssociation.eventExternalId).toEqual( - 'new-message-external-id', - ); - }); - - it('4. should find many calendarChannelEventAssociations with updated eventExternalId', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - eventExternalId: { - eq: 'updated-message-external-id', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.calendarChannelEventAssociations.edges, - ).toHaveLength(2); - }); - - it('4b. should find one calendarChannelEventAssociation with updated eventExternalId', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - eventExternalId: { - eq: 'new-message-external-id', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.calendarChannelEventAssociation.eventExternalId, - ).toEqual('new-message-external-id'); - }); - - it('5. should delete many calendarChannelEventAssociations', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedAssociations = - response.body.data.deleteCalendarChannelEventAssociations; - - expect(deletedAssociations).toHaveLength(2); - - deletedAssociations.forEach((association) => { - expect(association.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one calendarChannelEventAssociation', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - recordId: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.deleteCalendarChannelEventAssociation.deletedAt, - ).toBeTruthy(); - }); - - it('6. should not find many calendarChannelEventAssociations anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const findAssociationsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findAssociationsResponse.body.data.calendarChannelEventAssociations.edges, - ).toHaveLength(0); - }); - - it('6b. should not find one calendarChannelEventAssociation anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarChannelEventAssociation).toBeNull(); - }); - - it('7. should find many deleted calendarChannelEventAssociations with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - ], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.calendarChannelEventAssociations.edges, - ).toHaveLength(2); - }); - - it('7b. should find one deleted calendarChannelEventAssociation with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarChannelEventAssociation.id).toEqual( - CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - ); - }); - - it('8. should destroy many calendarChannelEventAssociations', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.destroyCalendarChannelEventAssociations, - ).toHaveLength(2); - }); - - it('8b. should destroy one calendarChannelEventAssociation', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - recordId: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - }); - - const destroyAssociationResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyAssociationResponse.body.data - .destroyCalendarChannelEventAssociation, - ).toBeTruthy(); - }); - - it('9. should not find many calendarChannelEventAssociations anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - objectMetadataPluralName: 'calendarChannelEventAssociations', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_CHANNEL_EVENT_ASSOCIATION_1_ID, - CALENDAR_CHANNEL_EVENT_ASSOCIATION_2_ID, - ], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.calendarChannelEventAssociations.edges, - ).toHaveLength(0); - }); - - it('9b. should not find one calendarChannelEventAssociation anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarChannelEventAssociation', - gqlFields: CALENDAR_CHANNEL_EVENT_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_CHANNEL_EVENT_ASSOCIATION_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarChannelEventAssociation).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-calendar-event-participants-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-calendar-event-participants-resolvers.integration-spec.ts deleted file mode 100644 index 118533f2f..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-calendar-event-participants-resolvers.integration-spec.ts +++ /dev/null @@ -1,479 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const CALENDAR_EVENT_PARTICIPANT_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const CALENDAR_EVENT_PARTICIPANT_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const CALENDAR_EVENT_PARTICIPANT_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const CALENDAR_EVENT_ID = '777a8457-eb2d-40ac-a707-441b615b6989'; -const CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS = ` - id - handle - displayName - isOrganizer - responseStatus - deletedAt -`; - -describe('calendarEventParticipants resolvers (integration)', () => { - beforeAll(async () => { - const calendarEventTitle = generateRecordName(CALENDAR_EVENT_ID); - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'calendarEvent', - gqlFields: `id`, - data: { - id: CALENDAR_EVENT_ID, - title: calendarEventTitle, - }, - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - - afterAll(async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'calendarEvent', - gqlFields: `id`, - recordId: CALENDAR_EVENT_ID, - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - - it('1. should create and return calendarEventParticipants', async () => { - const calendarEventParticipantDisplayName1 = generateRecordName( - CALENDAR_EVENT_PARTICIPANT_1_ID, - ); - const calendarEventParticipantDisplayName2 = generateRecordName( - CALENDAR_EVENT_PARTICIPANT_2_ID, - ); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - data: [ - { - id: CALENDAR_EVENT_PARTICIPANT_1_ID, - displayName: calendarEventParticipantDisplayName1, - calendarEventId: CALENDAR_EVENT_ID, - }, - { - id: CALENDAR_EVENT_PARTICIPANT_2_ID, - displayName: calendarEventParticipantDisplayName2, - calendarEventId: CALENDAR_EVENT_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createCalendarEventParticipants).toHaveLength(2); - - response.body.data.createCalendarEventParticipants.forEach( - (calendarEventParticipant) => { - expect(calendarEventParticipant).toHaveProperty('displayName'); - expect([ - calendarEventParticipantDisplayName1, - calendarEventParticipantDisplayName2, - ]).toContain(calendarEventParticipant.displayName); - - expect(calendarEventParticipant).toHaveProperty('id'); - expect(calendarEventParticipant).toHaveProperty('handle'); - expect(calendarEventParticipant).toHaveProperty('isOrganizer'); - expect(calendarEventParticipant).toHaveProperty('responseStatus'); - expect(calendarEventParticipant).toHaveProperty('deletedAt'); - }, - ); - }); - - it('1b. should create and return one calendarEventParticipant', async () => { - const calendarEventParticipantDisplayName = generateRecordName( - CALENDAR_EVENT_PARTICIPANT_3_ID, - ); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - data: { - id: CALENDAR_EVENT_PARTICIPANT_3_ID, - displayName: calendarEventParticipantDisplayName, - calendarEventId: CALENDAR_EVENT_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdCalendarEventParticipant = - response.body.data.createCalendarEventParticipant; - - expect(createdCalendarEventParticipant).toHaveProperty('displayName'); - expect(createdCalendarEventParticipant.displayName).toEqual( - calendarEventParticipantDisplayName, - ); - - expect(createdCalendarEventParticipant).toHaveProperty('id'); - expect(createdCalendarEventParticipant).toHaveProperty('handle'); - expect(createdCalendarEventParticipant).toHaveProperty('isOrganizer'); - expect(createdCalendarEventParticipant).toHaveProperty('responseStatus'); - expect(createdCalendarEventParticipant).toHaveProperty('deletedAt'); - }); - - it('2. should find many calendarEventParticipants', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.calendarEventParticipants; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const calendarEventParticipants = edges[0].node; - - expect(calendarEventParticipants).toHaveProperty('displayName'); - expect(calendarEventParticipants).toHaveProperty('id'); - expect(calendarEventParticipants).toHaveProperty('handle'); - expect(calendarEventParticipants).toHaveProperty('isOrganizer'); - expect(calendarEventParticipants).toHaveProperty('responseStatus'); - expect(calendarEventParticipants).toHaveProperty('deletedAt'); - } - }); - - it('2b. should find one calendarEventParticipant', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_EVENT_PARTICIPANT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const calendarEventParticipant = - response.body.data.calendarEventParticipant; - - expect(calendarEventParticipant).toHaveProperty('displayName'); - - expect(calendarEventParticipant).toHaveProperty('id'); - expect(calendarEventParticipant).toHaveProperty('handle'); - expect(calendarEventParticipant).toHaveProperty('isOrganizer'); - expect(calendarEventParticipant).toHaveProperty('responseStatus'); - expect(calendarEventParticipant).toHaveProperty('deletedAt'); - }); - - it('3. should update many calendarEventParticipants', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - data: { - displayName: 'New DisplayName', - }, - filter: { - id: { - in: [ - CALENDAR_EVENT_PARTICIPANT_1_ID, - CALENDAR_EVENT_PARTICIPANT_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedcalendarEventParticipants = - response.body.data.updateCalendarEventParticipants; - - expect(updatedcalendarEventParticipants).toHaveLength(2); - - updatedcalendarEventParticipants.forEach((calendarEventParticipant) => { - expect(calendarEventParticipant.displayName).toEqual('New DisplayName'); - }); - }); - - it('3b. should update one calendarEventParticipant', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - data: { - displayName: 'Updated DisplayName', - }, - recordId: CALENDAR_EVENT_PARTICIPANT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedcalendarEventParticipant = - response.body.data.updateCalendarEventParticipant; - - expect(updatedcalendarEventParticipant.displayName).toEqual( - 'Updated DisplayName', - ); - }); - - it('4. should find many calendarEventParticipants with updated displayName', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - displayName: { - eq: 'New DisplayName', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarEventParticipants.edges).toHaveLength(2); - }); - - it('4b. should find one calendarEventParticipant with updated displayName', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - displayName: { - eq: 'Updated DisplayName', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarEventParticipant.displayName).toEqual( - 'Updated DisplayName', - ); - }); - - it('5. should delete many calendarEventParticipants', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_EVENT_PARTICIPANT_1_ID, - CALENDAR_EVENT_PARTICIPANT_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteCalendarEventParticipants = - response.body.data.deleteCalendarEventParticipants; - - expect(deleteCalendarEventParticipants).toHaveLength(2); - - deleteCalendarEventParticipants.forEach((calendarEventParticipant) => { - expect(calendarEventParticipant.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one calendarEventParticipant', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - recordId: CALENDAR_EVENT_PARTICIPANT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.deleteCalendarEventParticipant.deletedAt, - ).toBeTruthy(); - }); - - it('6. should not find many calendarEventParticipants anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_EVENT_PARTICIPANT_1_ID, - CALENDAR_EVENT_PARTICIPANT_2_ID, - ], - }, - }, - }); - - const findCalendarEventParticipantsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findCalendarEventParticipantsResponse.body.data.calendarEventParticipants - .edges, - ).toHaveLength(0); - }); - - it('6b. should not find one calendarEventParticipant anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_EVENT_PARTICIPANT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarEventParticipant).toBeNull(); - }); - - it('7. should find many deleted calendarEventParticipants with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_EVENT_PARTICIPANT_1_ID, - CALENDAR_EVENT_PARTICIPANT_2_ID, - ], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarEventParticipants.edges).toHaveLength(2); - }); - - it('7b. should find one deleted calendarEventParticipant with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_EVENT_PARTICIPANT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarEventParticipant.id).toEqual( - CALENDAR_EVENT_PARTICIPANT_3_ID, - ); - }); - - it('8. should destroy many calendarEventParticipants', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_EVENT_PARTICIPANT_1_ID, - CALENDAR_EVENT_PARTICIPANT_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyCalendarEventParticipants).toHaveLength(2); - }); - - it('8b. should destroy one calendarEventParticipant', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - recordId: CALENDAR_EVENT_PARTICIPANT_3_ID, - }); - - const destroyCalendarEventParticipantResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyCalendarEventParticipantResponse.body.data - .destroyCalendarEventParticipant, - ).toBeTruthy(); - }); - - it('9. should not find many calendarEventParticipants anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - objectMetadataPluralName: 'calendarEventParticipants', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [ - CALENDAR_EVENT_PARTICIPANT_1_ID, - CALENDAR_EVENT_PARTICIPANT_2_ID, - ], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarEventParticipants.edges).toHaveLength(0); - }); - - it('9b. should not find one calendarEventParticipant anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'calendarEventParticipant', - gqlFields: CALENDAR_EVENT_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: CALENDAR_EVENT_PARTICIPANT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.calendarEventParticipant).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-connected-accounts-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-connected-accounts-resolvers.integration-spec.ts deleted file mode 100644 index d64e55900..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-connected-accounts-resolvers.integration-spec.ts +++ /dev/null @@ -1,420 +0,0 @@ -import { TIM_ACCOUNT_ID } from 'test/integration/graphql/integration.constants'; -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const CONNECTED_ACCOUNT_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const CONNECTED_ACCOUNT_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const CONNECTED_ACCOUNT_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const CONNECTED_ACCOUNT_GQL_FIELDS = ` - id - handle - deletedAt - createdAt - provider - accessToken - scopes -`; - -describe('connectedAccounts resolvers (integration)', () => { - it('1. should create and return connectedAccounts', async () => { - const connectedAccountHandle1 = generateRecordName(CONNECTED_ACCOUNT_1_ID); - const connectedAccountHandle2 = generateRecordName(CONNECTED_ACCOUNT_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - data: [ - { - id: CONNECTED_ACCOUNT_1_ID, - handle: connectedAccountHandle1, - accountOwnerId: TIM_ACCOUNT_ID, - }, - { - id: CONNECTED_ACCOUNT_2_ID, - handle: connectedAccountHandle2, - accountOwnerId: TIM_ACCOUNT_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createConnectedAccounts).toHaveLength(2); - - response.body.data.createConnectedAccounts.forEach((connectedAccount) => { - expect(connectedAccount).toHaveProperty('handle'); - expect([connectedAccountHandle1, connectedAccountHandle2]).toContain( - connectedAccount.handle, - ); - - expect(connectedAccount).toHaveProperty('id'); - expect(connectedAccount).toHaveProperty('deletedAt'); - expect(connectedAccount).toHaveProperty('createdAt'); - expect(connectedAccount).toHaveProperty('provider'); - expect(connectedAccount).toHaveProperty('accessToken'); - expect(connectedAccount).toHaveProperty('scopes'); - }); - }); - - it('1b. should create and return one connectedAccount', async () => { - const connectedAccountHandle = generateRecordName(CONNECTED_ACCOUNT_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - data: { - id: CONNECTED_ACCOUNT_3_ID, - handle: connectedAccountHandle, - accountOwnerId: TIM_ACCOUNT_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdConnectedAccount = response.body.data.createConnectedAccount; - - expect(createdConnectedAccount).toHaveProperty('handle'); - expect(createdConnectedAccount.handle).toEqual(connectedAccountHandle); - - expect(createdConnectedAccount).toHaveProperty('id'); - expect(createdConnectedAccount).toHaveProperty('deletedAt'); - expect(createdConnectedAccount).toHaveProperty('createdAt'); - expect(createdConnectedAccount).toHaveProperty('provider'); - expect(createdConnectedAccount).toHaveProperty('accessToken'); - expect(createdConnectedAccount).toHaveProperty('scopes'); - }); - - it('2. should find many connectedAccounts', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.connectedAccounts; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const connectedAccounts = edges[0].node; - - expect(connectedAccounts).toHaveProperty('handle'); - expect(connectedAccounts).toHaveProperty('id'); - expect(connectedAccounts).toHaveProperty('deletedAt'); - expect(connectedAccounts).toHaveProperty('createdAt'); - expect(connectedAccounts).toHaveProperty('provider'); - expect(connectedAccounts).toHaveProperty('accessToken'); - expect(connectedAccounts).toHaveProperty('scopes'); - } - }); - - it('2b. should find one connectedAccount', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - eq: CONNECTED_ACCOUNT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const connectedAccount = response.body.data.connectedAccount; - - expect(connectedAccount).toHaveProperty('handle'); - - expect(connectedAccount).toHaveProperty('id'); - expect(connectedAccount).toHaveProperty('deletedAt'); - expect(connectedAccount).toHaveProperty('createdAt'); - expect(connectedAccount).toHaveProperty('provider'); - expect(connectedAccount).toHaveProperty('accessToken'); - expect(connectedAccount).toHaveProperty('scopes'); - }); - - it('3. should update many connectedAccounts', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - data: { - handle: 'New Handle', - }, - filter: { - id: { - in: [CONNECTED_ACCOUNT_1_ID, CONNECTED_ACCOUNT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedconnectedAccounts = response.body.data.updateConnectedAccounts; - - expect(updatedconnectedAccounts).toHaveLength(2); - - updatedconnectedAccounts.forEach((connectedAccount) => { - expect(connectedAccount.handle).toEqual('New Handle'); - }); - }); - - it('3b. should update one connectedAccount', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - data: { - handle: 'Updated Handle', - }, - recordId: CONNECTED_ACCOUNT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedconnectedAccount = response.body.data.updateConnectedAccount; - - expect(updatedconnectedAccount.handle).toEqual('Updated Handle'); - }); - - it('4. should find many connectedAccounts with updated handle', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - handle: { - eq: 'New Handle', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.connectedAccounts.edges).toHaveLength(2); - }); - - it('4b. should find one connectedAccount with updated handle', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - handle: { - eq: 'Updated Handle', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.connectedAccount.handle).toEqual( - 'Updated Handle', - ); - }); - - it('5. should delete many connectedAccounts', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - in: [CONNECTED_ACCOUNT_1_ID, CONNECTED_ACCOUNT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteConnectedAccounts = response.body.data.deleteConnectedAccounts; - - expect(deleteConnectedAccounts).toHaveLength(2); - - deleteConnectedAccounts.forEach((connectedAccount) => { - expect(connectedAccount.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one connectedAccount', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - recordId: CONNECTED_ACCOUNT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteConnectedAccount.deletedAt).toBeTruthy(); - }); - - it('6. should not find many connectedAccounts anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - in: [CONNECTED_ACCOUNT_1_ID, CONNECTED_ACCOUNT_2_ID], - }, - }, - }); - - const findConnectedAccountsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findConnectedAccountsResponse.body.data.connectedAccounts.edges, - ).toHaveLength(0); - }); - - it('6b. should not find one connectedAccount anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - eq: CONNECTED_ACCOUNT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.connectedAccount).toBeNull(); - }); - - it('7. should find many deleted connectedAccounts with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - in: [CONNECTED_ACCOUNT_1_ID, CONNECTED_ACCOUNT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.connectedAccounts.edges).toHaveLength(2); - }); - - it('7b. should find one deleted connectedAccount with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - eq: CONNECTED_ACCOUNT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.connectedAccount.id).toEqual( - CONNECTED_ACCOUNT_3_ID, - ); - }); - - it('8. should destroy many connectedAccounts', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - in: [CONNECTED_ACCOUNT_1_ID, CONNECTED_ACCOUNT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyConnectedAccounts).toHaveLength(2); - }); - - it('8b. should destroy one connectedAccount', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - recordId: CONNECTED_ACCOUNT_3_ID, - }); - - const destroyConnectedAccountResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyConnectedAccountResponse.body.data.destroyConnectedAccount, - ).toBeTruthy(); - }); - - it('9. should not find many connectedAccounts anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - objectMetadataPluralName: 'connectedAccounts', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - in: [CONNECTED_ACCOUNT_1_ID, CONNECTED_ACCOUNT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.connectedAccounts.edges).toHaveLength(0); - }); - - it('9b. should not find one connectedAccount anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'connectedAccount', - gqlFields: CONNECTED_ACCOUNT_GQL_FIELDS, - filter: { - id: { - eq: CONNECTED_ACCOUNT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.connectedAccount).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-favorites-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-favorites-resolvers.integration-spec.ts deleted file mode 100644 index 5ad485258..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-favorites-resolvers.integration-spec.ts +++ /dev/null @@ -1,409 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; - -const FAVORITE_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const FAVORITE_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const FAVORITE_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const INITIAL_FAVORITE_POSITION_1 = 1111111; -const INITIAL_FAVORITE_POSITION_2 = 2222222; -const INITIAL_FAVORITE_POSITION_3 = 3333333; -const NEW_FAVORITE_POSITION_1 = 4444444; -const NEW_FAVORITE_POSITION_2 = 5555555; -const FAVORITE_GQL_FIELDS = ` - id - position - createdAt - updatedAt - deletedAt - companyId - personId -`; - -describe('favorites resolvers (integration)', () => { - it('1. should create and return favorites', async () => { - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - data: [ - { - id: FAVORITE_1_ID, - position: INITIAL_FAVORITE_POSITION_1, - }, - { - id: FAVORITE_2_ID, - position: INITIAL_FAVORITE_POSITION_2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createFavorites).toHaveLength(2); - - response.body.data.createFavorites.forEach((favorite) => { - expect(favorite).toHaveProperty('position'); - expect([ - INITIAL_FAVORITE_POSITION_1, - INITIAL_FAVORITE_POSITION_2, - ]).toContain(favorite.position); - - expect(favorite).toHaveProperty('id'); - expect(favorite).toHaveProperty('createdAt'); - expect(favorite).toHaveProperty('updatedAt'); - expect(favorite).toHaveProperty('deletedAt'); - expect(favorite).toHaveProperty('companyId'); - expect(favorite).toHaveProperty('personId'); - }); - }); - - it('1b. should create and return one favorite', async () => { - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - data: { - id: FAVORITE_3_ID, - position: INITIAL_FAVORITE_POSITION_3, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdFavorite = response.body.data.createFavorite; - - expect(createdFavorite).toHaveProperty('position'); - expect(createdFavorite.position).toEqual(INITIAL_FAVORITE_POSITION_3); - - expect(createdFavorite).toHaveProperty('id'); - expect(createdFavorite).toHaveProperty('createdAt'); - expect(createdFavorite).toHaveProperty('updatedAt'); - expect(createdFavorite).toHaveProperty('deletedAt'); - expect(createdFavorite).toHaveProperty('companyId'); - expect(createdFavorite).toHaveProperty('personId'); - }); - - it('2. should find many favorites', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.favorites; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const favorite = edges[0].node; - - expect(favorite).toHaveProperty('position'); - expect(favorite).toHaveProperty('id'); - expect(favorite).toHaveProperty('createdAt'); - expect(favorite).toHaveProperty('updatedAt'); - expect(favorite).toHaveProperty('deletedAt'); - expect(favorite).toHaveProperty('companyId'); - expect(favorite).toHaveProperty('personId'); - } - }); - - it('2b. should find one favorite', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - eq: FAVORITE_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const favorite = response.body.data.favorite; - - expect(favorite).toHaveProperty('position'); - - expect(favorite).toHaveProperty('id'); - expect(favorite).toHaveProperty('createdAt'); - expect(favorite).toHaveProperty('updatedAt'); - expect(favorite).toHaveProperty('deletedAt'); - expect(favorite).toHaveProperty('companyId'); - expect(favorite).toHaveProperty('personId'); - }); - - it('3. should update many favorites', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - data: { - position: NEW_FAVORITE_POSITION_1, - }, - filter: { - id: { - in: [FAVORITE_1_ID, FAVORITE_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedFavorites = response.body.data.updateFavorites; - - expect(updatedFavorites).toHaveLength(2); - - updatedFavorites.forEach((favorite) => { - expect(favorite.position).toEqual(NEW_FAVORITE_POSITION_1); - }); - }); - - it('3b. should update one favorite', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - data: { - position: NEW_FAVORITE_POSITION_2, - }, - recordId: FAVORITE_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedFavorite = response.body.data.updateFavorite; - - expect(updatedFavorite.position).toEqual(NEW_FAVORITE_POSITION_2); - }); - - it('4. should find many favorites with updated position', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - position: { - eq: NEW_FAVORITE_POSITION_1, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.favorites.edges).toHaveLength(2); - }); - - it('4b. should find one favorite with updated position', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - position: { - eq: NEW_FAVORITE_POSITION_2, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.favorite.position).toEqual( - NEW_FAVORITE_POSITION_2, - ); - }); - - it('5. should delete many favorites', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - in: [FAVORITE_1_ID, FAVORITE_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteFavorites = response.body.data.deleteFavorites; - - expect(deleteFavorites).toHaveLength(2); - - deleteFavorites.forEach((favorite) => { - expect(favorite.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one favorite', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - recordId: FAVORITE_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteFavorite.deletedAt).toBeTruthy(); - }); - - it('6. should not find many favorites anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - in: [FAVORITE_1_ID, FAVORITE_2_ID], - }, - }, - }); - - const findFavoritesResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findFavoritesResponse.body.data.favorites.edges).toHaveLength(0); - }); - - it('6b. should not find one favorite anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - eq: FAVORITE_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.favorite).toBeNull(); - }); - - it('7. should find many deleted favorites with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - in: [FAVORITE_1_ID, FAVORITE_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.favorites.edges).toHaveLength(2); - }); - - it('7b. should find one deleted favorite with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - eq: FAVORITE_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.favorite.id).toEqual(FAVORITE_3_ID); - }); - - it('8. should destroy many favorites', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - in: [FAVORITE_1_ID, FAVORITE_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyFavorites).toHaveLength(2); - }); - - it('8b. should destroy one favorite', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - recordId: FAVORITE_3_ID, - }); - - const destroyFavoriteResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyFavoriteResponse.body.data.destroyFavorite).toBeTruthy(); - }); - - it('9. should not find many favorites anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'favorite', - objectMetadataPluralName: 'favorites', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - in: [FAVORITE_1_ID, FAVORITE_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.favorites.edges).toHaveLength(0); - }); - - it('9b. should not find one favorite anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'favorite', - gqlFields: FAVORITE_GQL_FIELDS, - filter: { - id: { - eq: FAVORITE_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.favorite).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-message-channel-message-associations-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-message-channel-message-associations-resolvers.integration-spec.ts deleted file mode 100644 index 261331106..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-message-channel-message-associations-resolvers.integration-spec.ts +++ /dev/null @@ -1,493 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID = - '777a8457-eb2d-40ac-a707-551b615b6987'; -const MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID = - '777a8457-eb2d-40ac-a707-551b615b6988'; -const MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID = - '777a8457-eb2d-40ac-a707-551b615b6989'; - -const MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS = ` - id - messageExternalId - createdAt - updatedAt - deletedAt - messageChannelId - messageId - direction -`; - -describe('messageChannelMessageAssociations resolvers (integration)', () => { - it('1. should create and return messageChannelMessageAssociations', async () => { - const messageExternalId1 = generateRecordName( - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - ); - const messageExternalId2 = generateRecordName( - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - ); - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - data: [ - { - id: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - messageExternalId: messageExternalId1, - }, - { - id: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - messageExternalId: messageExternalId2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.createMessageChannelMessageAssociations, - ).toHaveLength(2); - - response.body.data.createMessageChannelMessageAssociations.forEach( - (messageChannelMessageAssociation) => { - expect(messageChannelMessageAssociation).toHaveProperty( - 'messageExternalId', - ); - expect([messageExternalId1, messageExternalId2]).toContain( - messageChannelMessageAssociation.messageExternalId, - ); - - expect(messageChannelMessageAssociation).toHaveProperty('id'); - expect(messageChannelMessageAssociation).toHaveProperty('createdAt'); - expect(messageChannelMessageAssociation).toHaveProperty('updatedAt'); - expect(messageChannelMessageAssociation).toHaveProperty('deletedAt'); - expect(messageChannelMessageAssociation).toHaveProperty( - 'messageChannelId', - ); - expect(messageChannelMessageAssociation).toHaveProperty('messageId'); - expect(messageChannelMessageAssociation).toHaveProperty('direction'); - }, - ); - }); - - it('1b. should create and return one messageChannelMessageAssociation', async () => { - const messageExternalId3 = generateRecordName( - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - ); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - data: { - id: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - messageExternalId: messageExternalId3, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdMessageChannelMessageAssociation = - response.body.data.createMessageChannelMessageAssociation; - - expect(createdMessageChannelMessageAssociation).toHaveProperty( - 'messageExternalId', - ); - expect(createdMessageChannelMessageAssociation.messageExternalId).toEqual( - messageExternalId3, - ); - - expect(createdMessageChannelMessageAssociation).toHaveProperty('id'); - expect(createdMessageChannelMessageAssociation).toHaveProperty('createdAt'); - expect(createdMessageChannelMessageAssociation).toHaveProperty('updatedAt'); - expect(createdMessageChannelMessageAssociation).toHaveProperty('deletedAt'); - expect(createdMessageChannelMessageAssociation).toHaveProperty( - 'messageChannelId', - ); - expect(createdMessageChannelMessageAssociation).toHaveProperty('messageId'); - expect(createdMessageChannelMessageAssociation).toHaveProperty('direction'); - }); - - it('2. should find many messageChannelMessageAssociations', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.messageChannelMessageAssociations; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const messageChannelMessageAssociation = edges[0].node; - - expect(messageChannelMessageAssociation).toHaveProperty( - 'messageExternalId', - ); - expect(messageChannelMessageAssociation).toHaveProperty('id'); - expect(messageChannelMessageAssociation).toHaveProperty('createdAt'); - expect(messageChannelMessageAssociation).toHaveProperty('updatedAt'); - expect(messageChannelMessageAssociation).toHaveProperty('deletedAt'); - expect(messageChannelMessageAssociation).toHaveProperty( - 'messageChannelId', - ); - expect(messageChannelMessageAssociation).toHaveProperty('messageId'); - expect(messageChannelMessageAssociation).toHaveProperty('direction'); - } - }); - - it('2b. should find one messageChannelMessageAssociation', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const messageChannelMessageAssociation = - response.body.data.messageChannelMessageAssociation; - - expect(messageChannelMessageAssociation).toHaveProperty( - 'messageExternalId', - ); - - expect(messageChannelMessageAssociation).toHaveProperty('id'); - expect(messageChannelMessageAssociation).toHaveProperty('createdAt'); - expect(messageChannelMessageAssociation).toHaveProperty('updatedAt'); - expect(messageChannelMessageAssociation).toHaveProperty('deletedAt'); - expect(messageChannelMessageAssociation).toHaveProperty('messageChannelId'); - expect(messageChannelMessageAssociation).toHaveProperty('messageId'); - expect(messageChannelMessageAssociation).toHaveProperty('direction'); - }); - - it('3. should update many messageChannelMessageAssociations', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - data: { - messageExternalId: 'updated-message-external-id', - }, - filter: { - id: { - in: [ - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedmessageChannelMessageAssociations = - response.body.data.updateMessageChannelMessageAssociations; - - expect(updatedmessageChannelMessageAssociations).toHaveLength(2); - - updatedmessageChannelMessageAssociations.forEach( - (messageChannelMessageAssociation) => { - expect(messageChannelMessageAssociation.messageExternalId).toEqual( - 'updated-message-external-id', - ); - }, - ); - }); - - it('3b. should update one messageChannelMessageAssociation', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - data: { - messageExternalId: 'new-message-external-id', - }, - recordId: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedmessageChannelMessageAssociation = - response.body.data.updateMessageChannelMessageAssociation; - - expect(updatedmessageChannelMessageAssociation.messageExternalId).toEqual( - 'new-message-external-id', - ); - }); - - it('4. should find many messageChannelMessageAssociations with updated messageExternalId', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - messageExternalId: { - eq: 'updated-message-external-id', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.messageChannelMessageAssociations.edges, - ).toHaveLength(2); - }); - - it('4b. should find one messageChannelMessageAssociation with updated messageExternalId', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - messageExternalId: { - eq: 'new-message-external-id', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.messageChannelMessageAssociation.messageExternalId, - ).toEqual('new-message-external-id'); - }); - - it('5. should delete many messageChannelMessageAssociations', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteMessageChannelMessageAssociations = - response.body.data.deleteMessageChannelMessageAssociations; - - expect(deleteMessageChannelMessageAssociations).toHaveLength(2); - - deleteMessageChannelMessageAssociations.forEach( - (messageChannelMessageAssociation) => { - expect(messageChannelMessageAssociation.deletedAt).toBeTruthy(); - }, - ); - }); - - it('5b. should delete one messageChannelMessageAssociation', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - recordId: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.deleteMessageChannelMessageAssociation.deletedAt, - ).toBeTruthy(); - }); - - it('6. should not find many messageChannelMessageAssociations anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const findMessageChannelMessageAssociationsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findMessageChannelMessageAssociationsResponse.body.data - .messageChannelMessageAssociations.edges, - ).toHaveLength(0); - }); - - it('6b. should not find one messageChannelMessageAssociation anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageChannelMessageAssociation).toBeNull(); - }); - - it('7. should find many deleted messageChannelMessageAssociations with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - ], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.messageChannelMessageAssociations.edges, - ).toHaveLength(2); - }); - - it('7b. should find one deleted messageChannelMessageAssociation with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageChannelMessageAssociation.id).toEqual( - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - ); - }); - - it('8. should destroy many messageChannelMessageAssociations', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - ], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.destroyMessageChannelMessageAssociations, - ).toHaveLength(2); - }); - - it('8b. should destroy one messageChannelMessageAssociation', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - recordId: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - }); - - const destroyMessageChannelMessageAssociationResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyMessageChannelMessageAssociationResponse.body.data - .destroyMessageChannelMessageAssociation, - ).toBeTruthy(); - }); - - it('9. should not find many messageChannelMessageAssociations anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - objectMetadataPluralName: 'messageChannelMessageAssociations', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - in: [ - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_1_ID, - MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_2_ID, - ], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect( - response.body.data.messageChannelMessageAssociations.edges, - ).toHaveLength(0); - }); - - it('9b. should not find one messageChannelMessageAssociation anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageChannelMessageAssociation', - gqlFields: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_CHANNEL_MESSAGE_ASSOCIATION_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageChannelMessageAssociation).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-message-participants-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-message-participants-resolvers.integration-spec.ts deleted file mode 100644 index 3c064564b..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-message-participants-resolvers.integration-spec.ts +++ /dev/null @@ -1,466 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const MESSAGE_PARTICIPANT_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const MESSAGE_PARTICIPANT_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const MESSAGE_PARTICIPANT_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const MESSAGE_ID = '777a8457-eb2d-40ac-a707-441b615b6989'; -const MESSAGE_PARTICIPANT_GQL_FIELDS = ` - id - displayName - handle - role - messageId - workspaceMemberId - createdAt - deletedAt -`; - -describe('messageParticipants resolvers (integration)', () => { - beforeAll(async () => { - const messageSubject = generateRecordName(MESSAGE_ID); - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'message', - gqlFields: `id`, - data: { - id: MESSAGE_ID, - subject: messageSubject, - }, - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - - afterAll(async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'message', - gqlFields: `id`, - recordId: MESSAGE_ID, - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - - it('1. should create and return messageParticipants', async () => { - const messageParticipantDisplayName1 = generateRecordName( - MESSAGE_PARTICIPANT_1_ID, - ); - const messageParticipantDisplayName2 = generateRecordName( - MESSAGE_PARTICIPANT_2_ID, - ); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - data: [ - { - id: MESSAGE_PARTICIPANT_1_ID, - displayName: messageParticipantDisplayName1, - messageId: MESSAGE_ID, - }, - { - id: MESSAGE_PARTICIPANT_2_ID, - displayName: messageParticipantDisplayName2, - messageId: MESSAGE_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createMessageParticipants).toHaveLength(2); - - response.body.data.createMessageParticipants.forEach( - (messageParticipant) => { - expect(messageParticipant).toHaveProperty('displayName'); - expect([ - messageParticipantDisplayName1, - messageParticipantDisplayName2, - ]).toContain(messageParticipant.displayName); - - expect(messageParticipant).toHaveProperty('id'); - expect(messageParticipant).toHaveProperty('handle'); - expect(messageParticipant).toHaveProperty('role'); - expect(messageParticipant).toHaveProperty('messageId'); - expect(messageParticipant).toHaveProperty('workspaceMemberId'); - expect(messageParticipant).toHaveProperty('createdAt'); - expect(messageParticipant).toHaveProperty('deletedAt'); - }, - ); - }); - - it('1b. should create and return one messageParticipant', async () => { - const messageParticipantDisplayName = generateRecordName( - MESSAGE_PARTICIPANT_3_ID, - ); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - data: { - id: MESSAGE_PARTICIPANT_3_ID, - displayName: messageParticipantDisplayName, - messageId: MESSAGE_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdMessageParticipant = - response.body.data.createMessageParticipant; - - expect(createdMessageParticipant).toHaveProperty('displayName'); - expect(createdMessageParticipant.displayName).toEqual( - messageParticipantDisplayName, - ); - - expect(createdMessageParticipant).toHaveProperty('id'); - expect(createdMessageParticipant).toHaveProperty('handle'); - expect(createdMessageParticipant).toHaveProperty('role'); - expect(createdMessageParticipant).toHaveProperty('messageId'); - expect(createdMessageParticipant).toHaveProperty('workspaceMemberId'); - expect(createdMessageParticipant).toHaveProperty('createdAt'); - expect(createdMessageParticipant).toHaveProperty('deletedAt'); - }); - - it('2. should find many messageParticipants', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.messageParticipants; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const messageParticipant = edges[0].node; - - expect(messageParticipant).toHaveProperty('displayName'); - expect(messageParticipant).toHaveProperty('id'); - expect(messageParticipant).toHaveProperty('handle'); - expect(messageParticipant).toHaveProperty('role'); - expect(messageParticipant).toHaveProperty('messageId'); - expect(messageParticipant).toHaveProperty('workspaceMemberId'); - expect(messageParticipant).toHaveProperty('createdAt'); - expect(messageParticipant).toHaveProperty('deletedAt'); - } - }); - - it('2b. should find one messageParticipant', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_PARTICIPANT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const messageParticipant = response.body.data.messageParticipant; - - expect(messageParticipant).toHaveProperty('displayName'); - - expect(messageParticipant).toHaveProperty('id'); - expect(messageParticipant).toHaveProperty('handle'); - expect(messageParticipant).toHaveProperty('role'); - expect(messageParticipant).toHaveProperty('messageId'); - expect(messageParticipant).toHaveProperty('workspaceMemberId'); - expect(messageParticipant).toHaveProperty('createdAt'); - expect(messageParticipant).toHaveProperty('deletedAt'); - }); - - it('3. should update many messageParticipants', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - data: { - displayName: 'New DisplayName', - }, - filter: { - id: { - in: [MESSAGE_PARTICIPANT_1_ID, MESSAGE_PARTICIPANT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedmessageParticipants = - response.body.data.updateMessageParticipants; - - expect(updatedmessageParticipants).toHaveLength(2); - - updatedmessageParticipants.forEach((messageParticipant) => { - expect(messageParticipant.displayName).toEqual('New DisplayName'); - }); - }); - - it('3b. should update one messageParticipant', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - data: { - displayName: 'Updated DisplayName', - }, - recordId: MESSAGE_PARTICIPANT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedmessageParticipant = - response.body.data.updateMessageParticipant; - - expect(updatedmessageParticipant.displayName).toEqual( - 'Updated DisplayName', - ); - }); - - it('4. should find many messageParticipants with updated displayName', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - displayName: { - eq: 'New DisplayName', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageParticipants.edges).toHaveLength(2); - }); - - it('4b. should find one messageParticipant with updated displayName', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - displayName: { - eq: 'Updated DisplayName', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageParticipant.displayName).toEqual( - 'Updated DisplayName', - ); - }); - - it('5. should delete many messageParticipants', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_PARTICIPANT_1_ID, MESSAGE_PARTICIPANT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteMessageParticipants = - response.body.data.deleteMessageParticipants; - - expect(deleteMessageParticipants).toHaveLength(2); - - deleteMessageParticipants.forEach((messageParticipant) => { - expect(messageParticipant.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one messageParticipant', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - recordId: MESSAGE_PARTICIPANT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteMessageParticipant.deletedAt).toBeTruthy(); - }); - - it('6. should not find many messageParticipants anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_PARTICIPANT_1_ID, MESSAGE_PARTICIPANT_2_ID], - }, - }, - }); - - const findMessageParticipantsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findMessageParticipantsResponse.body.data.messageParticipants.edges, - ).toHaveLength(0); - }); - - it('6b. should not find one messageParticipant anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_PARTICIPANT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageParticipant).toBeNull(); - }); - - it('7. should find many deleted messageParticipants with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_PARTICIPANT_1_ID, MESSAGE_PARTICIPANT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageParticipants.edges).toHaveLength(2); - }); - - it('7b. should find one deleted messageParticipant with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_PARTICIPANT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageParticipant.id).toEqual( - MESSAGE_PARTICIPANT_3_ID, - ); - }); - - it('8. should destroy many messageParticipants', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_PARTICIPANT_1_ID, MESSAGE_PARTICIPANT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyMessageParticipants).toHaveLength(2); - }); - - it('8b. should destroy one messageParticipant', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - recordId: MESSAGE_PARTICIPANT_3_ID, - }); - - const destroyMessageParticipantResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyMessageParticipantResponse.body.data.destroyMessageParticipant, - ).toBeTruthy(); - }); - - it('9. should not find many messageParticipants anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - objectMetadataPluralName: 'messageParticipants', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_PARTICIPANT_1_ID, MESSAGE_PARTICIPANT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageParticipants.edges).toHaveLength(0); - }); - - it('9b. should not find one messageParticipant anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageParticipant', - gqlFields: MESSAGE_PARTICIPANT_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_PARTICIPANT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageParticipant).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-message-threads-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-message-threads-resolvers.integration-spec.ts deleted file mode 100644 index a2d905cd9..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-message-threads-resolvers.integration-spec.ts +++ /dev/null @@ -1,397 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; - -const MESSAGE_THREAD_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const MESSAGE_THREAD_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const MESSAGE_THREAD_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const UPDATED_AT_1 = new Date('10/10/2024'); -const UPDATED_AT_2 = new Date('10/20/2024'); - -const MESSAGE_THREAD_GQL_FIELDS = ` - id - updatedAt - createdAt - deletedAt - messages{ - edges{ - node{ - id - } - } - } -`; - -describe('messageThreads resolvers (integration)', () => { - it('1. should create and return messageThreads', async () => { - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - data: [ - { - id: MESSAGE_THREAD_1_ID, - }, - { - id: MESSAGE_THREAD_2_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createMessageThreads).toHaveLength(2); - - response.body.data.createMessageThreads.forEach((messageThread) => { - expect(messageThread).toHaveProperty('id'); - expect(messageThread).toHaveProperty('updatedAt'); - expect(messageThread).toHaveProperty('createdAt'); - expect(messageThread).toHaveProperty('deletedAt'); - expect(messageThread).toHaveProperty('messages'); - }); - }); - - it('1b. should create and return one messageThread', async () => { - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - data: { - id: MESSAGE_THREAD_3_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdMessageThread = response.body.data.createMessageThread; - - expect(createdMessageThread).toHaveProperty('id'); - expect(createdMessageThread).toHaveProperty('updatedAt'); - expect(createdMessageThread).toHaveProperty('createdAt'); - expect(createdMessageThread).toHaveProperty('deletedAt'); - expect(createdMessageThread).toHaveProperty('messages'); - }); - - it('2. should find many messageThreads', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.messageThreads; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const messageThread = edges[0].node; - - expect(messageThread).toHaveProperty('id'); - expect(messageThread).toHaveProperty('updatedAt'); - expect(messageThread).toHaveProperty('createdAt'); - expect(messageThread).toHaveProperty('deletedAt'); - expect(messageThread).toHaveProperty('messages'); - } - }); - - it('2b. should find one messageThread', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_THREAD_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const messageThread = response.body.data.messageThread; - - expect(messageThread).toHaveProperty('id'); - expect(messageThread).toHaveProperty('updatedAt'); - expect(messageThread).toHaveProperty('createdAt'); - expect(messageThread).toHaveProperty('deletedAt'); - expect(messageThread).toHaveProperty('messages'); - }); - - it('3. should update many messageThreads', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - data: { - updatedAt: UPDATED_AT_1, - }, - filter: { - id: { - in: [MESSAGE_THREAD_1_ID, MESSAGE_THREAD_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedMessageThreads = response.body.data.updateMessageThreads; - - expect(updatedMessageThreads).toHaveLength(2); - - updatedMessageThreads.forEach((messageThread) => { - expect(messageThread.updatedAt).toEqual(UPDATED_AT_1.toISOString()); - }); - }); - - it('3b. should update one messageThread', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - data: { - updatedAt: UPDATED_AT_2, - }, - recordId: MESSAGE_THREAD_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedMessageThread = response.body.data.updateMessageThread; - - expect(updatedMessageThread.updatedAt).toEqual(UPDATED_AT_2.toISOString()); - }); - - it('4. should find many messageThreads with updated updatedAt', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - updatedAt: { - eq: UPDATED_AT_1, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageThreads.edges).toHaveLength(2); - }); - - it('4b. should find one messageThread with updated updatedAt', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - updatedAt: { - eq: UPDATED_AT_2, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageThread.updatedAt).toEqual( - UPDATED_AT_2.toISOString(), - ); - }); - - it('5. should delete many messageThreads', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_THREAD_1_ID, MESSAGE_THREAD_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteMessageThreads = response.body.data.deleteMessageThreads; - - expect(deleteMessageThreads).toHaveLength(2); - - deleteMessageThreads.forEach((messageThread) => { - expect(messageThread.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one messageThread', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - recordId: MESSAGE_THREAD_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteMessageThread.deletedAt).toBeTruthy(); - }); - - it('6. should not find many messageThreads anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_THREAD_1_ID, MESSAGE_THREAD_2_ID], - }, - }, - }); - - const findMessageThreadsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findMessageThreadsResponse.body.data.messageThreads.edges, - ).toHaveLength(0); - }); - - it('6b. should not find one messageThread anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_THREAD_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageThread).toBeNull(); - }); - - it('7. should find many deleted messageThreads with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_THREAD_1_ID, MESSAGE_THREAD_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageThreads.edges).toHaveLength(2); - }); - - it('7b. should find one deleted messageThread with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_THREAD_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageThread.id).toEqual(MESSAGE_THREAD_3_ID); - }); - - it('8. should destroy many messageThreads', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_THREAD_1_ID, MESSAGE_THREAD_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyMessageThreads).toHaveLength(2); - }); - - it('8b. should destroy one messageThread', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - recordId: MESSAGE_THREAD_3_ID, - }); - - const destroyMessageThreadsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyMessageThreadsResponse.body.data.destroyMessageThread, - ).toBeTruthy(); - }); - - it('9. should not find many messageThreads anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'messageThread', - objectMetadataPluralName: 'messageThreads', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - in: [MESSAGE_THREAD_1_ID, MESSAGE_THREAD_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageThreads.edges).toHaveLength(0); - }); - - it('9b. should not find one messageThread anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'messageThread', - gqlFields: MESSAGE_THREAD_GQL_FIELDS, - filter: { - id: { - eq: MESSAGE_THREAD_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.messageThread).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-note-targets-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-note-targets-resolvers.integration-spec.ts deleted file mode 100644 index 27faccfe6..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-note-targets-resolvers.integration-spec.ts +++ /dev/null @@ -1,444 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const NOTE_TARGET_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const NOTE_TARGET_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const NOTE_TARGET_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const PERSON_1_ID = 'f875ff46-b881-41ba-973a-b9cd5345e8f0'; -const PERSON_2_ID = '1fe0f78c-8c59-4ce6-ae02-56571331b252'; -const NOTE_TARGET_GQL_FIELDS = ` - id - createdAt - deletedAt - noteId - personId - companyId - opportunityId - person{ - id - } -`; - -describe('noteTargets resolvers (integration)', () => { - beforeAll(async () => { - const personName1 = generateRecordName(PERSON_1_ID); - const personName2 = generateRecordName(PERSON_2_ID); - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'person', - objectMetadataPluralName: 'people', - gqlFields: `id`, - data: [ - { - id: PERSON_1_ID, - name: { - firstName: personName1, - lastName: personName1, - }, - }, - { - id: PERSON_2_ID, - name: { - firstName: personName2, - lastName: personName2, - }, - }, - ], - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - - afterAll(async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'person', - objectMetadataPluralName: 'people', - gqlFields: `id`, - filter: { - id: { - in: [PERSON_1_ID, PERSON_2_ID], - }, - }, - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - it('1. should create and return noteTargets', async () => { - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - data: [ - { - id: NOTE_TARGET_1_ID, - }, - { - id: NOTE_TARGET_2_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createNoteTargets).toHaveLength(2); - - response.body.data.createNoteTargets.forEach((noteTarget) => { - expect(noteTarget).toHaveProperty('id'); - expect(noteTarget).toHaveProperty('createdAt'); - expect(noteTarget).toHaveProperty('deletedAt'); - expect(noteTarget).toHaveProperty('noteId'); - expect(noteTarget).toHaveProperty('personId'); - expect(noteTarget).toHaveProperty('companyId'); - expect(noteTarget).toHaveProperty('opportunityId'); - expect(noteTarget).toHaveProperty('person'); - }); - }); - - it('1b. should create and return one noteTarget', async () => { - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - data: { - id: NOTE_TARGET_3_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdNoteTarget = response.body.data.createNoteTarget; - - expect(createdNoteTarget).toHaveProperty('id'); - expect(createdNoteTarget).toHaveProperty('createdAt'); - expect(createdNoteTarget).toHaveProperty('deletedAt'); - expect(createdNoteTarget).toHaveProperty('noteId'); - expect(createdNoteTarget).toHaveProperty('personId'); - expect(createdNoteTarget).toHaveProperty('companyId'); - expect(createdNoteTarget).toHaveProperty('opportunityId'); - expect(createdNoteTarget).toHaveProperty('person'); - }); - - it('2. should find many noteTargets', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.noteTargets; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const noteTarget = edges[0].node; - - expect(noteTarget).toHaveProperty('id'); - expect(noteTarget).toHaveProperty('createdAt'); - expect(noteTarget).toHaveProperty('deletedAt'); - expect(noteTarget).toHaveProperty('noteId'); - expect(noteTarget).toHaveProperty('personId'); - expect(noteTarget).toHaveProperty('companyId'); - expect(noteTarget).toHaveProperty('opportunityId'); - expect(noteTarget).toHaveProperty('person'); - } - }); - - it('2b. should find one noteTarget', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - eq: NOTE_TARGET_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const noteTarget = response.body.data.noteTarget; - - expect(noteTarget).toHaveProperty('id'); - expect(noteTarget).toHaveProperty('createdAt'); - expect(noteTarget).toHaveProperty('deletedAt'); - expect(noteTarget).toHaveProperty('noteId'); - expect(noteTarget).toHaveProperty('personId'); - expect(noteTarget).toHaveProperty('companyId'); - expect(noteTarget).toHaveProperty('opportunityId'); - expect(noteTarget).toHaveProperty('person'); - }); - - it('3. should update many noteTargets', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - data: { - personId: PERSON_1_ID, - }, - filter: { - id: { - in: [NOTE_TARGET_1_ID, NOTE_TARGET_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedNoteTargets = response.body.data.updateNoteTargets; - - expect(updatedNoteTargets).toHaveLength(2); - - updatedNoteTargets.forEach((noteTarget) => { - expect(noteTarget.person.id).toEqual(PERSON_1_ID); - }); - }); - - it('3b. should update one noteTarget', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - data: { - personId: PERSON_2_ID, - }, - recordId: NOTE_TARGET_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedNoteTarget = response.body.data.updateNoteTarget; - - expect(updatedNoteTarget.person.id).toEqual(PERSON_2_ID); - }); - - it('4. should find many noteTargets with updated personId', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - personId: { - eq: PERSON_1_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.noteTargets.edges).toHaveLength(2); - }); - - it('4b. should find one noteTarget with updated personId', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - personId: { - eq: PERSON_2_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.noteTarget.person.id).toEqual(PERSON_2_ID); - }); - - it('5. should delete many noteTargets', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - in: [NOTE_TARGET_1_ID, NOTE_TARGET_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteNoteTargets = response.body.data.deleteNoteTargets; - - expect(deleteNoteTargets).toHaveLength(2); - - deleteNoteTargets.forEach((noteTarget) => { - expect(noteTarget.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one noteTarget', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - recordId: NOTE_TARGET_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteNoteTarget.deletedAt).toBeTruthy(); - }); - - it('6. should not find many noteTargets anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - in: [NOTE_TARGET_1_ID, NOTE_TARGET_2_ID], - }, - }, - }); - - const findNoteTargetsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(findNoteTargetsResponse.body.data.noteTargets.edges).toHaveLength(0); - }); - - it('6b. should not find one noteTarget anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - eq: NOTE_TARGET_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.noteTarget).toBeNull(); - }); - - it('7. should find many deleted noteTargets with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - in: [NOTE_TARGET_1_ID, NOTE_TARGET_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.noteTargets.edges).toHaveLength(2); - }); - - it('7b. should find one deleted noteTarget with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - eq: NOTE_TARGET_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.noteTarget.id).toEqual(NOTE_TARGET_3_ID); - }); - - it('8. should destroy many noteTargets', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - in: [NOTE_TARGET_1_ID, NOTE_TARGET_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyNoteTargets).toHaveLength(2); - }); - - it('8b. should destroy one noteTarget', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - recordId: NOTE_TARGET_3_ID, - }); - - const destroyNoteTargetsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyNoteTargetsResponse.body.data.destroyNoteTarget).toBeTruthy(); - }); - - it('9. should not find many noteTargets anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'noteTarget', - objectMetadataPluralName: 'noteTargets', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - in: [NOTE_TARGET_1_ID, NOTE_TARGET_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.noteTargets.edges).toHaveLength(0); - }); - - it('9b. should not find one noteTarget anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'noteTarget', - gqlFields: NOTE_TARGET_GQL_FIELDS, - filter: { - id: { - eq: NOTE_TARGET_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.noteTarget).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-notes-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-notes-resolvers.integration-spec.ts deleted file mode 100644 index 29fbe7602..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-notes-resolvers.integration-spec.ts +++ /dev/null @@ -1,403 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const NOTE_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const NOTE_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const NOTE_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; - -const NOTE_GQL_FIELDS = ` - id - title - createdAt - updatedAt - deletedAt - body - position -`; - -describe('notes resolvers (integration)', () => { - it('1. should create and return notes', async () => { - const noteTitle1 = generateRecordName(NOTE_1_ID); - const noteTitle2 = generateRecordName(NOTE_2_ID); - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - data: [ - { - id: NOTE_1_ID, - title: noteTitle1, - }, - { - id: NOTE_2_ID, - title: noteTitle2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createNotes).toHaveLength(2); - - response.body.data.createNotes.forEach((note) => { - expect(note).toHaveProperty('title'); - expect([noteTitle1, noteTitle2]).toContain(note.title); - - expect(note).toHaveProperty('id'); - expect(note).toHaveProperty('createdAt'); - expect(note).toHaveProperty('updatedAt'); - expect(note).toHaveProperty('deletedAt'); - expect(note).toHaveProperty('body'); - expect(note).toHaveProperty('position'); - }); - }); - - it('1b. should create and return one note', async () => { - const noteTitle3 = generateRecordName(NOTE_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - data: { - id: NOTE_3_ID, - title: noteTitle3, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdNote = response.body.data.createNote; - - expect(createdNote).toHaveProperty('title'); - expect(createdNote.title).toEqual(noteTitle3); - - expect(createdNote).toHaveProperty('id'); - expect(createdNote).toHaveProperty('createdAt'); - expect(createdNote).toHaveProperty('updatedAt'); - expect(createdNote).toHaveProperty('deletedAt'); - expect(createdNote).toHaveProperty('body'); - expect(createdNote).toHaveProperty('position'); - }); - - it('2. should find many notes', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.notes; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const note = edges[0].node; - - expect(note).toHaveProperty('id'); - expect(note).toHaveProperty('createdAt'); - expect(note).toHaveProperty('updatedAt'); - expect(note).toHaveProperty('deletedAt'); - expect(note).toHaveProperty('body'); - expect(note).toHaveProperty('position'); - } - }); - - it('2b. should find one note', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - eq: NOTE_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const note = response.body.data.note; - - expect(note).toHaveProperty('title'); - - expect(note).toHaveProperty('id'); - expect(note).toHaveProperty('createdAt'); - expect(note).toHaveProperty('updatedAt'); - expect(note).toHaveProperty('deletedAt'); - expect(note).toHaveProperty('body'); - expect(note).toHaveProperty('position'); - }); - - it('3. should update many notes', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - data: { - title: 'Updated Title', - }, - filter: { - id: { - in: [NOTE_1_ID, NOTE_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedNotes = response.body.data.updateNotes; - - expect(updatedNotes).toHaveLength(2); - - updatedNotes.forEach((note) => { - expect(note.title).toEqual('Updated Title'); - }); - }); - - it('3b. should update one note', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - data: { - title: 'New Title', - }, - recordId: NOTE_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedNote = response.body.data.updateNote; - - expect(updatedNote.title).toEqual('New Title'); - }); - - it('4. should find many notes with updated title', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - filter: { - title: { - eq: 'Updated Title', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.notes.edges).toHaveLength(2); - }); - - it('4b. should find one note with updated title', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - filter: { - title: { - eq: 'New Title', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.note.title).toEqual('New Title'); - }); - - it('5. should delete many notes', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - in: [NOTE_1_ID, NOTE_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteNotes = response.body.data.deleteNotes; - - expect(deleteNotes).toHaveLength(2); - - deleteNotes.forEach((note) => { - expect(note.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one note', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - recordId: NOTE_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteNote.deletedAt).toBeTruthy(); - }); - - it('6. should not find many notes anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - in: [NOTE_1_ID, NOTE_2_ID], - }, - }, - }); - - const findNotesResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findNotesResponse.body.data.notes.edges).toHaveLength(0); - }); - - it('6b. should not find one note anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - eq: NOTE_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.note).toBeNull(); - }); - - it('7. should find many deleted notes with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - in: [NOTE_1_ID, NOTE_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.notes.edges).toHaveLength(2); - }); - - it('7b. should find one deleted note with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - eq: NOTE_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.note.id).toEqual(NOTE_3_ID); - }); - - it('8. should destroy many notes', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - in: [NOTE_1_ID, NOTE_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyNotes).toHaveLength(2); - }); - - it('8b. should destroy one note', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - recordId: NOTE_3_ID, - }); - - const destroyNotesResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyNotesResponse.body.data.destroyNote).toBeTruthy(); - }); - - it('9. should not find many notes anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'note', - objectMetadataPluralName: 'notes', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - in: [NOTE_1_ID, NOTE_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.notes.edges).toHaveLength(0); - }); - - it('9b. should not find one note anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'note', - gqlFields: NOTE_GQL_FIELDS, - filter: { - id: { - eq: NOTE_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.note).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-opportunities-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-opportunities-resolvers.integration-spec.ts deleted file mode 100644 index 6c1a279be..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-opportunities-resolvers.integration-spec.ts +++ /dev/null @@ -1,414 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const OPPORTUNITY_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const OPPORTUNITY_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const OPPORTUNITY_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; - -const OPPORTUNITY_GQL_FIELDS = ` - id - name - createdAt - updatedAt - deletedAt - searchVector - stage - position -`; - -describe('opportunities resolvers (integration)', () => { - it('1. should create and return opportunities', async () => { - const opportunityName1 = generateRecordName(OPPORTUNITY_1_ID); - const opportunityName2 = generateRecordName(OPPORTUNITY_2_ID); - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - data: [ - { - id: OPPORTUNITY_1_ID, - name: opportunityName1, - }, - { - id: OPPORTUNITY_2_ID, - name: opportunityName2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createOpportunities).toHaveLength(2); - - response.body.data.createOpportunities.forEach((opportunity) => { - expect(opportunity).toHaveProperty('name'); - expect([opportunityName1, opportunityName2]).toContain(opportunity.name); - - expect(opportunity).toHaveProperty('id'); - expect(opportunity).toHaveProperty('createdAt'); - expect(opportunity).toHaveProperty('updatedAt'); - expect(opportunity).toHaveProperty('deletedAt'); - expect(opportunity).toHaveProperty('searchVector'); - expect(opportunity).toHaveProperty('stage'); - expect(opportunity).toHaveProperty('position'); - }); - }); - - it('1b. should create and return one opportunity', async () => { - const opportunityName3 = generateRecordName(OPPORTUNITY_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - data: { - id: OPPORTUNITY_3_ID, - name: opportunityName3, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdOpportunity = response.body.data.createOpportunity; - - expect(createdOpportunity).toHaveProperty('name'); - expect(createdOpportunity.name).toEqual(opportunityName3); - - expect(createdOpportunity).toHaveProperty('id'); - expect(createdOpportunity).toHaveProperty('createdAt'); - expect(createdOpportunity).toHaveProperty('updatedAt'); - expect(createdOpportunity).toHaveProperty('deletedAt'); - expect(createdOpportunity).toHaveProperty('searchVector'); - expect(createdOpportunity).toHaveProperty('stage'); - expect(createdOpportunity).toHaveProperty('position'); - }); - - it('2. should find many opportunities', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.opportunities; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const opportunity = edges[0].node; - - expect(opportunity).toHaveProperty('id'); - expect(opportunity).toHaveProperty('createdAt'); - expect(opportunity).toHaveProperty('updatedAt'); - expect(opportunity).toHaveProperty('deletedAt'); - expect(opportunity).toHaveProperty('searchVector'); - expect(opportunity).toHaveProperty('stage'); - expect(opportunity).toHaveProperty('position'); - } - }); - - it('2b. should find one opportunity', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - eq: OPPORTUNITY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const opportunity = response.body.data.opportunity; - - expect(opportunity).toHaveProperty('name'); - - expect(opportunity).toHaveProperty('id'); - expect(opportunity).toHaveProperty('createdAt'); - expect(opportunity).toHaveProperty('updatedAt'); - expect(opportunity).toHaveProperty('deletedAt'); - expect(opportunity).toHaveProperty('searchVector'); - expect(opportunity).toHaveProperty('stage'); - expect(opportunity).toHaveProperty('position'); - }); - - it('3. should update many opportunities', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - data: { - name: 'Updated Name', - }, - filter: { - id: { - in: [OPPORTUNITY_1_ID, OPPORTUNITY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedOpportunities = response.body.data.updateOpportunities; - - expect(updatedOpportunities).toHaveLength(2); - - updatedOpportunities.forEach((opportunity) => { - expect(opportunity.name).toEqual('Updated Name'); - }); - }); - - it('3b. should update one opportunity', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - data: { - name: 'New Name', - }, - recordId: OPPORTUNITY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedOpportunity = response.body.data.updateOpportunity; - - expect(updatedOpportunity.name).toEqual('New Name'); - }); - - it('4. should find many opportunities with updated name', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - name: { - eq: 'Updated Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.opportunities.edges).toHaveLength(2); - }); - - it('4b. should find one opportunity with updated name', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - name: { - eq: 'New Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.opportunity.name).toEqual('New Name'); - }); - - it('5. should delete many opportunities', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - in: [OPPORTUNITY_1_ID, OPPORTUNITY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteOpportunities = response.body.data.deleteOpportunities; - - expect(deleteOpportunities).toHaveLength(2); - - deleteOpportunities.forEach((opportunity) => { - expect(opportunity.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one opportunity', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - recordId: OPPORTUNITY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteOpportunity.deletedAt).toBeTruthy(); - }); - - it('6. should not find many opportunities anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - in: [OPPORTUNITY_1_ID, OPPORTUNITY_2_ID], - }, - }, - }); - - const findOpportunitiesResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findOpportunitiesResponse.body.data.opportunities.edges, - ).toHaveLength(0); - }); - - it('6b. should not find one opportunity anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - eq: OPPORTUNITY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.opportunity).toBeNull(); - }); - - it('7. should find many deleted opportunities with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - in: [OPPORTUNITY_1_ID, OPPORTUNITY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.opportunities.edges).toHaveLength(2); - }); - - it('7b. should find one deleted opportunity with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - eq: OPPORTUNITY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.opportunity.id).toEqual(OPPORTUNITY_3_ID); - }); - - it('8. should destroy many opportunities', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - in: [OPPORTUNITY_1_ID, OPPORTUNITY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyOpportunities).toHaveLength(2); - }); - - it('8b. should destroy one opportunity', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - recordId: OPPORTUNITY_3_ID, - }); - - const destroyOpportunitiesResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyOpportunitiesResponse.body.data.destroyOpportunity, - ).toBeTruthy(); - }); - - it('9. should not find many opportunities anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'opportunity', - objectMetadataPluralName: 'opportunities', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - in: [OPPORTUNITY_1_ID, OPPORTUNITY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.opportunities.edges).toHaveLength(0); - }); - - it('9b. should not find one opportunity anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'opportunity', - gqlFields: OPPORTUNITY_GQL_FIELDS, - filter: { - id: { - eq: OPPORTUNITY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.opportunity).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-resolvers.integration-spec.ts deleted file mode 100644 index 3b1a46f89..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-resolvers.integration-spec.ts +++ /dev/null @@ -1,430 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const COMPANY_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const COMPANY_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const COMPANY_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const COMPANY_GQL_FIELDS = ` - id - name - employees - idealCustomerProfile - position - createdAt - updatedAt - deletedAt - accountOwnerId - tagline - workPolicy - visaSponsorship -`; - -describe('companies resolvers (integration)', () => { - it('1. should create and return companies', async () => { - const companyName1 = generateRecordName(COMPANY_1_ID); - const companyName2 = generateRecordName(COMPANY_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - data: [ - { - id: COMPANY_1_ID, - name: companyName1, - }, - { - id: COMPANY_2_ID, - name: companyName2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createCompanies).toHaveLength(2); - - response.body.data.createCompanies.forEach((company) => { - expect(company).toHaveProperty('name'); - expect([companyName1, companyName2]).toContain(company.name); - - expect(company).toHaveProperty('employees'); - expect(company).toHaveProperty('idealCustomerProfile'); - expect(company).toHaveProperty('position'); - expect(company).toHaveProperty('id'); - expect(company).toHaveProperty('createdAt'); - expect(company).toHaveProperty('updatedAt'); - expect(company).toHaveProperty('deletedAt'); - expect(company).toHaveProperty('accountOwnerId'); - expect(company).toHaveProperty('tagline'); - expect(company).toHaveProperty('workPolicy'); - expect(company).toHaveProperty('visaSponsorship'); - }); - }); - - it('1b. should create and return one company', async () => { - const companyName = generateRecordName(COMPANY_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - data: { - id: COMPANY_3_ID, - name: companyName, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdCompany = response.body.data.createCompany; - - expect(createdCompany).toHaveProperty('name'); - expect(createdCompany.name).toEqual(companyName); - - expect(createdCompany).toHaveProperty('employees'); - expect(createdCompany).toHaveProperty('idealCustomerProfile'); - expect(createdCompany).toHaveProperty('position'); - expect(createdCompany).toHaveProperty('id'); - expect(createdCompany).toHaveProperty('createdAt'); - expect(createdCompany).toHaveProperty('updatedAt'); - expect(createdCompany).toHaveProperty('deletedAt'); - expect(createdCompany).toHaveProperty('accountOwnerId'); - expect(createdCompany).toHaveProperty('tagline'); - expect(createdCompany).toHaveProperty('workPolicy'); - expect(createdCompany).toHaveProperty('visaSponsorship'); - }); - - it('2. should find many companies', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.companies; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const companies = edges[0].node; - - expect(companies).toHaveProperty('name'); - expect(companies).toHaveProperty('employees'); - expect(companies).toHaveProperty('idealCustomerProfile'); - expect(companies).toHaveProperty('position'); - expect(companies).toHaveProperty('id'); - expect(companies).toHaveProperty('createdAt'); - expect(companies).toHaveProperty('updatedAt'); - expect(companies).toHaveProperty('deletedAt'); - expect(companies).toHaveProperty('accountOwnerId'); - expect(companies).toHaveProperty('tagline'); - expect(companies).toHaveProperty('workPolicy'); - expect(companies).toHaveProperty('visaSponsorship'); - } - }); - - it('2b. should find one company', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - eq: COMPANY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const company = response.body.data.company; - - expect(company).toHaveProperty('name'); - - expect(company).toHaveProperty('employees'); - expect(company).toHaveProperty('idealCustomerProfile'); - expect(company).toHaveProperty('position'); - expect(company).toHaveProperty('id'); - expect(company).toHaveProperty('createdAt'); - expect(company).toHaveProperty('updatedAt'); - expect(company).toHaveProperty('deletedAt'); - expect(company).toHaveProperty('accountOwnerId'); - expect(company).toHaveProperty('tagline'); - expect(company).toHaveProperty('workPolicy'); - expect(company).toHaveProperty('visaSponsorship'); - }); - - it('3. should update many companies', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - data: { - employees: 123, - }, - filter: { - id: { - in: [COMPANY_1_ID, COMPANY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedCompanies = response.body.data.updateCompanies; - - expect(updatedCompanies).toHaveLength(2); - - updatedCompanies.forEach((company) => { - expect(company.employees).toEqual(123); - }); - }); - - it('3b. should update one company', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - data: { - employees: 122, - }, - recordId: COMPANY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedCompany = response.body.data.updateCompany; - - expect(updatedCompany.employees).toEqual(122); - }); - - it('4. should find many companies with updated employees', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - employees: { - eq: 123, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.companies.edges).toHaveLength(2); - }); - - it('4b. should find one company with updated employees', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - employees: { - eq: 122, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.company.employees).toEqual(122); - }); - - it('5. should delete many companies', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - in: [COMPANY_1_ID, COMPANY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteCompanies = response.body.data.deleteCompanies; - - expect(deleteCompanies).toHaveLength(2); - - deleteCompanies.forEach((company) => { - expect(company.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one company', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - recordId: COMPANY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteCompany.deletedAt).toBeTruthy(); - }); - - it('6. should not find many companies anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - in: [COMPANY_1_ID, COMPANY_2_ID], - }, - }, - }); - - const findCompaniesResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findCompaniesResponse.body.data.companies.edges).toHaveLength(0); - }); - - it('6b. should not find one company anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - eq: COMPANY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.company).toBeNull(); - }); - - it('7. should find many deleted companies with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - in: [COMPANY_1_ID, COMPANY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.companies.edges).toHaveLength(2); - }); - - it('7b. should find one deleted company with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - eq: COMPANY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.company.id).toEqual(COMPANY_3_ID); - }); - - it('8. should destroy many companies', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - in: [COMPANY_1_ID, COMPANY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyCompanies).toHaveLength(2); - }); - - it('8b. should destroy one company', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - recordId: COMPANY_3_ID, - }); - - const destroyCompanyResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyCompanyResponse.body.data.destroyCompany).toBeTruthy(); - }); - - it('9. should not find many companies anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'company', - objectMetadataPluralName: 'companies', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - in: [COMPANY_1_ID, COMPANY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.companies.edges).toHaveLength(0); - }); - - it('9b. should not find one company anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'company', - gqlFields: COMPANY_GQL_FIELDS, - filter: { - id: { - eq: COMPANY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.company).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-task-targets-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-task-targets-resolvers.integration-spec.ts deleted file mode 100644 index b50f16fc6..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-task-targets-resolvers.integration-spec.ts +++ /dev/null @@ -1,444 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const TASK_TARGET_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const TASK_TARGET_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const TASK_TARGET_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const PERSON_1_ID = 'f875ff46-b881-41ba-973a-b9cd5345e8f0'; -const PERSON_2_ID = '1fe0f78c-8c59-4ce6-ae02-56571331b252'; -const TASK_TARGET_GQL_FIELDS = ` - id - createdAt - deletedAt - rocketId - personId - companyId - opportunityId - person{ - id - } -`; - -describe('taskTargets resolvers (integration)', () => { - beforeAll(async () => { - const personName1 = generateRecordName(PERSON_1_ID); - const personName2 = generateRecordName(PERSON_2_ID); - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'person', - objectMetadataPluralName: 'people', - gqlFields: `id`, - data: [ - { - id: PERSON_1_ID, - name: { - firstName: personName1, - lastName: personName1, - }, - }, - { - id: PERSON_2_ID, - name: { - firstName: personName2, - lastName: personName2, - }, - }, - ], - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - - afterAll(async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'person', - objectMetadataPluralName: 'people', - gqlFields: `id`, - filter: { - id: { - in: [PERSON_1_ID, PERSON_2_ID], - }, - }, - }); - - await makeGraphqlAPIRequest(graphqlOperation); - }); - it('1. should create and return taskTargets', async () => { - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - data: [ - { - id: TASK_TARGET_1_ID, - }, - { - id: TASK_TARGET_2_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createTaskTargets).toHaveLength(2); - - response.body.data.createTaskTargets.forEach((taskTarget) => { - expect(taskTarget).toHaveProperty('id'); - expect(taskTarget).toHaveProperty('createdAt'); - expect(taskTarget).toHaveProperty('deletedAt'); - expect(taskTarget).toHaveProperty('rocketId'); - expect(taskTarget).toHaveProperty('personId'); - expect(taskTarget).toHaveProperty('companyId'); - expect(taskTarget).toHaveProperty('opportunityId'); - expect(taskTarget).toHaveProperty('person'); - }); - }); - - it('1b. should create and return one taskTarget', async () => { - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - data: { - id: TASK_TARGET_3_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdTaskTarget = response.body.data.createTaskTarget; - - expect(createdTaskTarget).toHaveProperty('id'); - expect(createdTaskTarget).toHaveProperty('createdAt'); - expect(createdTaskTarget).toHaveProperty('deletedAt'); - expect(createdTaskTarget).toHaveProperty('rocketId'); - expect(createdTaskTarget).toHaveProperty('personId'); - expect(createdTaskTarget).toHaveProperty('companyId'); - expect(createdTaskTarget).toHaveProperty('opportunityId'); - expect(createdTaskTarget).toHaveProperty('person'); - }); - - it('2. should find many taskTargets', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.taskTargets; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const taskTarget = edges[0].node; - - expect(taskTarget).toHaveProperty('id'); - expect(taskTarget).toHaveProperty('createdAt'); - expect(taskTarget).toHaveProperty('deletedAt'); - expect(taskTarget).toHaveProperty('rocketId'); - expect(taskTarget).toHaveProperty('personId'); - expect(taskTarget).toHaveProperty('companyId'); - expect(taskTarget).toHaveProperty('opportunityId'); - expect(taskTarget).toHaveProperty('person'); - } - }); - - it('2b. should find one taskTarget', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - eq: TASK_TARGET_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const taskTarget = response.body.data.taskTarget; - - expect(taskTarget).toHaveProperty('id'); - expect(taskTarget).toHaveProperty('createdAt'); - expect(taskTarget).toHaveProperty('deletedAt'); - expect(taskTarget).toHaveProperty('rocketId'); - expect(taskTarget).toHaveProperty('personId'); - expect(taskTarget).toHaveProperty('companyId'); - expect(taskTarget).toHaveProperty('opportunityId'); - expect(taskTarget).toHaveProperty('person'); - }); - - it('3. should update many taskTargets', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - data: { - personId: PERSON_1_ID, - }, - filter: { - id: { - in: [TASK_TARGET_1_ID, TASK_TARGET_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedTaskTargets = response.body.data.updateTaskTargets; - - expect(updatedTaskTargets).toHaveLength(2); - - updatedTaskTargets.forEach((taskTarget) => { - expect(taskTarget.person.id).toEqual(PERSON_1_ID); - }); - }); - - it('3b. should update one taskTarget', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - data: { - personId: PERSON_2_ID, - }, - recordId: TASK_TARGET_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedTaskTarget = response.body.data.updateTaskTarget; - - expect(updatedTaskTarget.person.id).toEqual(PERSON_2_ID); - }); - - it('4. should find many taskTargets with updated personId', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - personId: { - eq: PERSON_1_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.taskTargets.edges).toHaveLength(2); - }); - - it('4b. should find one taskTarget with updated personId', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - personId: { - eq: PERSON_2_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.taskTarget.person.id).toEqual(PERSON_2_ID); - }); - - it('5. should delete many taskTargets', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - in: [TASK_TARGET_1_ID, TASK_TARGET_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteTaskTargets = response.body.data.deleteTaskTargets; - - expect(deleteTaskTargets).toHaveLength(2); - - deleteTaskTargets.forEach((taskTarget) => { - expect(taskTarget.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one taskTarget', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - recordId: TASK_TARGET_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteTaskTarget.deletedAt).toBeTruthy(); - }); - - it('6. should not find many taskTargets anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - in: [TASK_TARGET_1_ID, TASK_TARGET_2_ID], - }, - }, - }); - - const findTaskTargetsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(findTaskTargetsResponse.body.data.taskTargets.edges).toHaveLength(0); - }); - - it('6b. should not find one taskTarget anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - eq: TASK_TARGET_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.taskTarget).toBeNull(); - }); - - it('7. should find many deleted taskTargets with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - in: [TASK_TARGET_1_ID, TASK_TARGET_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.taskTargets.edges).toHaveLength(2); - }); - - it('7b. should find one deleted taskTarget with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - eq: TASK_TARGET_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.taskTarget.id).toEqual(TASK_TARGET_3_ID); - }); - - it('8. should destroy many taskTargets', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - in: [TASK_TARGET_1_ID, TASK_TARGET_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyTaskTargets).toHaveLength(2); - }); - - it('8b. should destroy one taskTarget', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - recordId: TASK_TARGET_3_ID, - }); - - const destroyTaskTargetsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyTaskTargetsResponse.body.data.destroyTaskTarget).toBeTruthy(); - }); - - it('9. should not find many taskTargets anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'taskTarget', - objectMetadataPluralName: 'taskTargets', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - in: [TASK_TARGET_1_ID, TASK_TARGET_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.taskTargets.edges).toHaveLength(0); - }); - - it('9b. should not find one taskTarget anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'taskTarget', - gqlFields: TASK_TARGET_GQL_FIELDS, - filter: { - id: { - eq: TASK_TARGET_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.taskTarget).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-tasks-resolvers.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-tasks-resolvers.integration-spec.ts deleted file mode 100644 index f2c5261e9..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-tasks-resolvers.integration-spec.ts +++ /dev/null @@ -1,403 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const TASK_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const TASK_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const TASK_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; - -const TASK_GQL_FIELDS = ` - id - title - createdAt - updatedAt - deletedAt - body - position -`; - -describe('tasks resolvers (integration)', () => { - it('1. should create and return tasks', async () => { - const taskTitle1 = generateRecordName(TASK_1_ID); - const taskTitle2 = generateRecordName(TASK_2_ID); - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - data: [ - { - id: TASK_1_ID, - title: taskTitle1, - }, - { - id: TASK_2_ID, - title: taskTitle2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createTasks).toHaveLength(2); - - response.body.data.createTasks.forEach((task) => { - expect(task).toHaveProperty('title'); - expect([taskTitle1, taskTitle2]).toContain(task.title); - - expect(task).toHaveProperty('id'); - expect(task).toHaveProperty('createdAt'); - expect(task).toHaveProperty('updatedAt'); - expect(task).toHaveProperty('deletedAt'); - expect(task).toHaveProperty('body'); - expect(task).toHaveProperty('position'); - }); - }); - - it('1b. should create and return one task', async () => { - const taskTitle3 = generateRecordName(TASK_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - data: { - id: TASK_3_ID, - title: taskTitle3, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdTask = response.body.data.createTask; - - expect(createdTask).toHaveProperty('title'); - expect(createdTask.title).toEqual(taskTitle3); - - expect(createdTask).toHaveProperty('id'); - expect(createdTask).toHaveProperty('createdAt'); - expect(createdTask).toHaveProperty('updatedAt'); - expect(createdTask).toHaveProperty('deletedAt'); - expect(createdTask).toHaveProperty('body'); - expect(createdTask).toHaveProperty('position'); - }); - - it('2. should find many tasks', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.tasks; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - const edges = data.edges; - - if (edges.length > 0) { - const task = edges[0].node; - - expect(task).toHaveProperty('id'); - expect(task).toHaveProperty('createdAt'); - expect(task).toHaveProperty('updatedAt'); - expect(task).toHaveProperty('deletedAt'); - expect(task).toHaveProperty('body'); - expect(task).toHaveProperty('position'); - } - }); - - it('2b. should find one task', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - eq: TASK_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const task = response.body.data.task; - - expect(task).toHaveProperty('title'); - - expect(task).toHaveProperty('id'); - expect(task).toHaveProperty('createdAt'); - expect(task).toHaveProperty('updatedAt'); - expect(task).toHaveProperty('deletedAt'); - expect(task).toHaveProperty('body'); - expect(task).toHaveProperty('position'); - }); - - it('3. should update many tasks', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - data: { - title: 'Updated Title', - }, - filter: { - id: { - in: [TASK_1_ID, TASK_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedTasks = response.body.data.updateTasks; - - expect(updatedTasks).toHaveLength(2); - - updatedTasks.forEach((task) => { - expect(task.title).toEqual('Updated Title'); - }); - }); - - it('3b. should update one task', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - data: { - title: 'New Title', - }, - recordId: TASK_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedTask = response.body.data.updateTask; - - expect(updatedTask.title).toEqual('New Title'); - }); - - it('4. should find many tasks with updated title', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - filter: { - title: { - eq: 'Updated Title', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.tasks.edges).toHaveLength(2); - }); - - it('4b. should find one task with updated title', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - filter: { - title: { - eq: 'New Title', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.task.title).toEqual('New Title'); - }); - - it('5. should delete many tasks', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - in: [TASK_1_ID, TASK_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deleteTasks = response.body.data.deleteTasks; - - expect(deleteTasks).toHaveLength(2); - - deleteTasks.forEach((task) => { - expect(task.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one task', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - recordId: TASK_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteTask.deletedAt).toBeTruthy(); - }); - - it('6. should not find many tasks anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - in: [TASK_1_ID, TASK_2_ID], - }, - }, - }); - - const findTasksResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findTasksResponse.body.data.tasks.edges).toHaveLength(0); - }); - - it('6b. should not find one task anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - eq: TASK_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.task).toBeNull(); - }); - - it('7. should find many deleted tasks with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - in: [TASK_1_ID, TASK_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.tasks.edges).toHaveLength(2); - }); - - it('7b. should find one deleted task with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - eq: TASK_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.task.id).toEqual(TASK_3_ID); - }); - - it('8. should destroy many tasks', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - in: [TASK_1_ID, TASK_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyTasks).toHaveLength(2); - }); - - it('8b. should destroy one task', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - recordId: TASK_3_ID, - }); - - const destroyTasksResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyTasksResponse.body.data.destroyTask).toBeTruthy(); - }); - - it('9. should not find many tasks anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'task', - objectMetadataPluralName: 'tasks', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - in: [TASK_1_ID, TASK_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.tasks.edges).toHaveLength(0); - }); - - it('9b. should not find one task anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'task', - gqlFields: TASK_GQL_FIELDS, - filter: { - id: { - eq: TASK_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.task).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-timeline-activities.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-timeline-activities.integration-spec.ts deleted file mode 100644 index 38a468ec7..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-timeline-activities.integration-spec.ts +++ /dev/null @@ -1,477 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const TIMELINE_ACTIVITY_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const TIMELINE_ACTIVITY_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const TIMELINE_ACTIVITY_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; - -const TIMELINE_ACTIVITY_GQL_FIELDS = ` - id - happensAt - name - properties - linkedRecordCachedName - linkedRecordId - linkedObjectMetadataId - createdAt - updatedAt - deletedAt - workspaceMemberId - personId - companyId - opportunityId - noteId - taskId - workflowId - workflowVersionId - workflowRunId - rocketId -`; - -describe('timelineActivities resolvers (integration)', () => { - it('1. should create and return timelineActivities', async () => { - const timelineActivityName1 = generateRecordName(TIMELINE_ACTIVITY_1_ID); - const timelineActivityName2 = generateRecordName(TIMELINE_ACTIVITY_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - data: [ - { - id: TIMELINE_ACTIVITY_1_ID, - name: timelineActivityName1, - }, - { - id: TIMELINE_ACTIVITY_2_ID, - name: timelineActivityName2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createTimelineActivities).toHaveLength(2); - - response.body.data.createTimelineActivities.forEach((timelineActivity) => { - expect(timelineActivity).toHaveProperty('name'); - expect([timelineActivityName1, timelineActivityName2]).toContain( - timelineActivity.name, - ); - expect(timelineActivity).toHaveProperty('id'); - expect(timelineActivity).toHaveProperty('happensAt'); - expect(timelineActivity).toHaveProperty('properties'); - expect(timelineActivity).toHaveProperty('linkedRecordCachedName'); - expect(timelineActivity).toHaveProperty('linkedRecordId'); - expect(timelineActivity).toHaveProperty('linkedObjectMetadataId'); - expect(timelineActivity).toHaveProperty('createdAt'); - expect(timelineActivity).toHaveProperty('updatedAt'); - expect(timelineActivity).toHaveProperty('deletedAt'); - expect(timelineActivity).toHaveProperty('workspaceMemberId'); - expect(timelineActivity).toHaveProperty('personId'); - expect(timelineActivity).toHaveProperty('companyId'); - expect(timelineActivity).toHaveProperty('opportunityId'); - expect(timelineActivity).toHaveProperty('noteId'); - expect(timelineActivity).toHaveProperty('taskId'); - expect(timelineActivity).toHaveProperty('workflowId'); - expect(timelineActivity).toHaveProperty('workflowVersionId'); - expect(timelineActivity).toHaveProperty('workflowRunId'); - expect(timelineActivity).toHaveProperty('rocketId'); - }); - }); - - it('1b. should create and return one timelineActivity', async () => { - const timelineActivityName = generateRecordName(TIMELINE_ACTIVITY_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - data: { - id: TIMELINE_ACTIVITY_3_ID, - name: timelineActivityName, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdTimelineActivity = response.body.data.createTimelineActivity; - - expect(createdTimelineActivity).toHaveProperty('name'); - expect(createdTimelineActivity.name).toEqual(timelineActivityName); - expect(createdTimelineActivity).toHaveProperty('id'); - expect(createdTimelineActivity).toHaveProperty('happensAt'); - expect(createdTimelineActivity).toHaveProperty('properties'); - expect(createdTimelineActivity).toHaveProperty('linkedRecordCachedName'); - expect(createdTimelineActivity).toHaveProperty('linkedRecordId'); - expect(createdTimelineActivity).toHaveProperty('linkedObjectMetadataId'); - expect(createdTimelineActivity).toHaveProperty('createdAt'); - expect(createdTimelineActivity).toHaveProperty('updatedAt'); - expect(createdTimelineActivity).toHaveProperty('deletedAt'); - expect(createdTimelineActivity).toHaveProperty('workspaceMemberId'); - expect(createdTimelineActivity).toHaveProperty('personId'); - expect(createdTimelineActivity).toHaveProperty('companyId'); - expect(createdTimelineActivity).toHaveProperty('opportunityId'); - expect(createdTimelineActivity).toHaveProperty('noteId'); - expect(createdTimelineActivity).toHaveProperty('taskId'); - expect(createdTimelineActivity).toHaveProperty('workflowId'); - expect(createdTimelineActivity).toHaveProperty('workflowVersionId'); - expect(createdTimelineActivity).toHaveProperty('workflowRunId'); - expect(createdTimelineActivity).toHaveProperty('rocketId'); - }); - - it('2. should find many timelineActivities', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.timelineActivities; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const timelineActivities = data.edges[0].node; - - expect(timelineActivities).toHaveProperty('happensAt'); - expect(timelineActivities).toHaveProperty('name'); - expect(timelineActivities).toHaveProperty('properties'); - expect(timelineActivities).toHaveProperty('linkedRecordCachedName'); - expect(timelineActivities).toHaveProperty('linkedRecordId'); - expect(timelineActivities).toHaveProperty('linkedObjectMetadataId'); - expect(timelineActivities).toHaveProperty('id'); - expect(timelineActivities).toHaveProperty('createdAt'); - expect(timelineActivities).toHaveProperty('updatedAt'); - expect(timelineActivities).toHaveProperty('deletedAt'); - expect(timelineActivities).toHaveProperty('workspaceMemberId'); - expect(timelineActivities).toHaveProperty('personId'); - expect(timelineActivities).toHaveProperty('companyId'); - expect(timelineActivities).toHaveProperty('opportunityId'); - expect(timelineActivities).toHaveProperty('noteId'); - expect(timelineActivities).toHaveProperty('taskId'); - expect(timelineActivities).toHaveProperty('workflowId'); - expect(timelineActivities).toHaveProperty('workflowVersionId'); - expect(timelineActivities).toHaveProperty('workflowRunId'); - expect(timelineActivities).toHaveProperty('rocketId'); - } - }); - - it('2b. should find one timelineActivity', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - eq: TIMELINE_ACTIVITY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const timelineActivity = response.body.data.timelineActivity; - - expect(timelineActivity).toHaveProperty('happensAt'); - expect(timelineActivity).toHaveProperty('name'); - expect(timelineActivity).toHaveProperty('properties'); - expect(timelineActivity).toHaveProperty('linkedRecordCachedName'); - expect(timelineActivity).toHaveProperty('linkedRecordId'); - expect(timelineActivity).toHaveProperty('linkedObjectMetadataId'); - expect(timelineActivity).toHaveProperty('id'); - expect(timelineActivity).toHaveProperty('createdAt'); - expect(timelineActivity).toHaveProperty('updatedAt'); - expect(timelineActivity).toHaveProperty('deletedAt'); - expect(timelineActivity).toHaveProperty('workspaceMemberId'); - expect(timelineActivity).toHaveProperty('personId'); - expect(timelineActivity).toHaveProperty('companyId'); - expect(timelineActivity).toHaveProperty('opportunityId'); - expect(timelineActivity).toHaveProperty('noteId'); - expect(timelineActivity).toHaveProperty('taskId'); - expect(timelineActivity).toHaveProperty('workflowId'); - expect(timelineActivity).toHaveProperty('workflowVersionId'); - expect(timelineActivity).toHaveProperty('workflowRunId'); - expect(timelineActivity).toHaveProperty('rocketId'); - }); - - it('3. should update many timelineActivities', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - data: { - name: 'Updated Name', - }, - filter: { - id: { - in: [TIMELINE_ACTIVITY_1_ID, TIMELINE_ACTIVITY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedTimelineActivities = - response.body.data.updateTimelineActivities; - - expect(updatedTimelineActivities).toHaveLength(2); - - updatedTimelineActivities.forEach((timelineActivity) => { - expect(timelineActivity.name).toEqual('Updated Name'); - }); - }); - - it('3b. should update one timelineActivity', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - data: { - name: 'New Name', - }, - recordId: TIMELINE_ACTIVITY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedTimelineActivity = response.body.data.updateTimelineActivity; - - expect(updatedTimelineActivity.name).toEqual('New Name'); - }); - - it('4. should find many timelineActivities with updated name', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - name: { - eq: 'Updated Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.timelineActivities.edges).toHaveLength(2); - }); - - it('4b. should find one timelineActivity with updated name', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - name: { - eq: 'New Name', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.timelineActivity.name).toEqual('New Name'); - }); - - it('5. should delete many timelineActivities', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - in: [TIMELINE_ACTIVITY_1_ID, TIMELINE_ACTIVITY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedTimelineActivities = - response.body.data.deleteTimelineActivities; - - expect(deletedTimelineActivities).toHaveLength(2); - - deletedTimelineActivities.forEach((timelineActivity) => { - expect(timelineActivity.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one timelineActivity', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - recordId: TIMELINE_ACTIVITY_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteTimelineActivity.deletedAt).toBeTruthy(); - }); - - it('6. should not find many timelineActivities anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - in: [TIMELINE_ACTIVITY_1_ID, TIMELINE_ACTIVITY_2_ID], - }, - }, - }); - - const findTimelineActivitiesResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - findTimelineActivitiesResponse.body.data.timelineActivities.edges, - ).toHaveLength(0); - }); - - it('6b. should not find one timelineActivity anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - eq: TIMELINE_ACTIVITY_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.timelineActivity).toBeNull(); - }); - - it('7. should find many deleted timelineActivities with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - in: [TIMELINE_ACTIVITY_1_ID, TIMELINE_ACTIVITY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.timelineActivities.edges).toHaveLength(2); - }); - - it('7b. should find one deleted timelineActivity with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - eq: TIMELINE_ACTIVITY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.timelineActivity.id).toEqual( - TIMELINE_ACTIVITY_3_ID, - ); - }); - - it('8. should destroy many timelineActivities', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - in: [TIMELINE_ACTIVITY_1_ID, TIMELINE_ACTIVITY_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyTimelineActivities).toHaveLength(2); - }); - - it('8b. should destroy one timelineActivity', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - recordId: TIMELINE_ACTIVITY_3_ID, - }); - - const destroyTimelineActivityResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect( - destroyTimelineActivityResponse.body.data.destroyTimelineActivity, - ).toBeTruthy(); - }); - - it('9. should not find many timelineActivities anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - objectMetadataPluralName: 'timelineActivities', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - in: [TIMELINE_ACTIVITY_1_ID, TIMELINE_ACTIVITY_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.timelineActivities.edges).toHaveLength(0); - }); - - it('9b. should not find one timelineActivity anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'timelineActivity', - gqlFields: TIMELINE_ACTIVITY_GQL_FIELDS, - filter: { - id: { - eq: TIMELINE_ACTIVITY_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.timelineActivity).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-view-fields.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-view-fields.integration-spec.ts deleted file mode 100644 index 168bad037..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-view-fields.integration-spec.ts +++ /dev/null @@ -1,407 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; - -const VIEW_FIELD_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const VIEW_FIELD_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const VIEW_FIELD_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const FIELD_METADATA_ID = '20202020-0c28-43d8-8ba5-3659924d3489'; - -const VIEW_FIELD_GQL_FIELDS = ` - id - fieldMetadataId - isVisible - size - position - createdAt - updatedAt - deletedAt - viewId -`; - -describe('viewFields resolvers (integration)', () => { - it('1. should create and return viewFields', async () => { - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - data: [ - { - id: VIEW_FIELD_1_ID, - fieldMetadataId: FIELD_METADATA_ID, - }, - { - id: VIEW_FIELD_2_ID, - fieldMetadataId: FIELD_METADATA_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createViewFields).toHaveLength(2); - - response.body.data.createViewFields.forEach((viewField) => { - expect(viewField).toHaveProperty('fieldMetadataId'); - expect(viewField.fieldMetadataId).toEqual(FIELD_METADATA_ID); - expect(viewField).toHaveProperty('id'); - expect(viewField).toHaveProperty('isVisible'); - expect(viewField).toHaveProperty('size'); - expect(viewField).toHaveProperty('position'); - expect(viewField).toHaveProperty('createdAt'); - expect(viewField).toHaveProperty('updatedAt'); - expect(viewField).toHaveProperty('deletedAt'); - expect(viewField).toHaveProperty('viewId'); - }); - }); - - it('1b. should create and return one viewField', async () => { - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - data: { - id: VIEW_FIELD_3_ID, - fieldMetadataId: FIELD_METADATA_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdViewField = response.body.data.createViewField; - - expect(createdViewField).toHaveProperty('fieldMetadataId'); - expect(createdViewField.fieldMetadataId).toEqual(FIELD_METADATA_ID); - expect(createdViewField).toHaveProperty('id'); - expect(createdViewField).toHaveProperty('isVisible'); - expect(createdViewField).toHaveProperty('size'); - expect(createdViewField).toHaveProperty('position'); - expect(createdViewField).toHaveProperty('createdAt'); - expect(createdViewField).toHaveProperty('updatedAt'); - expect(createdViewField).toHaveProperty('deletedAt'); - expect(createdViewField).toHaveProperty('viewId'); - }); - - it('2. should find many viewFields', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.viewFields; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const viewFields = data.edges[0].node; - - expect(viewFields).toHaveProperty('fieldMetadataId'); - expect(viewFields).toHaveProperty('isVisible'); - expect(viewFields).toHaveProperty('size'); - expect(viewFields).toHaveProperty('position'); - expect(viewFields).toHaveProperty('id'); - expect(viewFields).toHaveProperty('createdAt'); - expect(viewFields).toHaveProperty('updatedAt'); - expect(viewFields).toHaveProperty('deletedAt'); - expect(viewFields).toHaveProperty('viewId'); - } - }); - - it('2b. should find one viewField', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - eq: VIEW_FIELD_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const viewField = response.body.data.viewField; - - expect(viewField).toHaveProperty('fieldMetadataId'); - expect(viewField).toHaveProperty('isVisible'); - expect(viewField).toHaveProperty('size'); - expect(viewField).toHaveProperty('position'); - expect(viewField).toHaveProperty('id'); - expect(viewField).toHaveProperty('createdAt'); - expect(viewField).toHaveProperty('updatedAt'); - expect(viewField).toHaveProperty('deletedAt'); - expect(viewField).toHaveProperty('viewId'); - }); - - it('3. should update many viewFields', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - data: { - isVisible: false, - }, - filter: { - id: { - in: [VIEW_FIELD_1_ID, VIEW_FIELD_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedViewFields = response.body.data.updateViewFields; - - expect(updatedViewFields).toHaveLength(2); - - updatedViewFields.forEach((viewField) => { - expect(viewField.isVisible).toEqual(false); - }); - }); - - it('3b. should update one viewField', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - data: { - isVisible: true, - }, - recordId: VIEW_FIELD_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedViewField = response.body.data.updateViewField; - - expect(updatedViewField.isVisible).toEqual(true); - }); - - it('4. should find many viewFields with updated visibility', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - isVisible: { - eq: false, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFields.edges).toHaveLength(2); - }); - - it('4b. should find one viewField with updated visibility', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - isVisible: { - eq: true, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewField.isVisible).toEqual(true); - }); - - it('5. should delete many viewFields', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - in: [VIEW_FIELD_1_ID, VIEW_FIELD_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedViewFields = response.body.data.deleteViewFields; - - expect(deletedViewFields).toHaveLength(2); - - deletedViewFields.forEach((viewField) => { - expect(viewField.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one viewField', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - recordId: VIEW_FIELD_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteViewField.deletedAt).toBeTruthy(); - }); - - it('6. should not find many viewFields anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - in: [VIEW_FIELD_1_ID, VIEW_FIELD_2_ID], - }, - }, - }); - - const findViewFieldsResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(findViewFieldsResponse.body.data.viewFields.edges).toHaveLength(0); - }); - - it('6b. should not find one viewField anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - eq: VIEW_FIELD_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewField).toBeNull(); - }); - - it('7. should find many deleted viewFields with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - in: [VIEW_FIELD_1_ID, VIEW_FIELD_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFields.edges).toHaveLength(2); - }); - - it('7b. should find one deleted viewField with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - eq: VIEW_FIELD_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewField.id).toEqual(VIEW_FIELD_3_ID); - }); - - it('8. should destroy many viewFields', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - in: [VIEW_FIELD_1_ID, VIEW_FIELD_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyViewFields).toHaveLength(2); - }); - - it('8b. should destroy one viewField', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - recordId: VIEW_FIELD_3_ID, - }); - - const destroyViewFieldResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyViewFieldResponse.body.data.destroyViewField).toBeTruthy(); - }); - - it('9. should not find many viewFields anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewField', - objectMetadataPluralName: 'viewFields', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - in: [VIEW_FIELD_1_ID, VIEW_FIELD_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFields.edges).toHaveLength(0); - }); - - it('9b. should not find one viewField anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewField', - gqlFields: VIEW_FIELD_GQL_FIELDS, - filter: { - id: { - eq: VIEW_FIELD_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewField).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-view-filters.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-view-filters.integration-spec.ts deleted file mode 100644 index e55c654aa..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-view-filters.integration-spec.ts +++ /dev/null @@ -1,407 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; - -const VIEW_FILTER_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const VIEW_FILTER_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const VIEW_FILTER_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const FIELD_METADATA_ID = '20202020-0c28-43d8-8ba5-3659924d3489'; - -const VIEW_FILTER_FIELDS = ` - id - fieldMetadataId - operand - value - displayValue - createdAt - updatedAt - deletedAt - viewId -`; - -describe('viewFilters resolvers (integration)', () => { - it('1. should create and return viewFilters', async () => { - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - data: [ - { - id: VIEW_FILTER_1_ID, - fieldMetadataId: FIELD_METADATA_ID, - }, - { - id: VIEW_FILTER_2_ID, - fieldMetadataId: FIELD_METADATA_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createViewFilters).toHaveLength(2); - - response.body.data.createViewFilters.forEach((viewFilter) => { - expect(viewFilter).toHaveProperty('fieldMetadataId'); - expect(viewFilter.fieldMetadataId).toEqual(FIELD_METADATA_ID); - expect(viewFilter).toHaveProperty('id'); - expect(viewFilter).toHaveProperty('operand'); - expect(viewFilter).toHaveProperty('value'); - expect(viewFilter).toHaveProperty('displayValue'); - expect(viewFilter).toHaveProperty('createdAt'); - expect(viewFilter).toHaveProperty('updatedAt'); - expect(viewFilter).toHaveProperty('deletedAt'); - expect(viewFilter).toHaveProperty('viewId'); - }); - }); - - it('1b. should create and return one viewFilter', async () => { - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - data: { - id: VIEW_FILTER_3_ID, - fieldMetadataId: FIELD_METADATA_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdViewFilter = response.body.data.createViewFilter; - - expect(createdViewFilter).toHaveProperty('fieldMetadataId'); - expect(createdViewFilter.fieldMetadataId).toEqual(FIELD_METADATA_ID); - expect(createdViewFilter).toHaveProperty('id'); - expect(createdViewFilter).toHaveProperty('operand'); - expect(createdViewFilter).toHaveProperty('value'); - expect(createdViewFilter).toHaveProperty('displayValue'); - expect(createdViewFilter).toHaveProperty('createdAt'); - expect(createdViewFilter).toHaveProperty('updatedAt'); - expect(createdViewFilter).toHaveProperty('deletedAt'); - expect(createdViewFilter).toHaveProperty('viewId'); - }); - - it('2. should find many viewFilters', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.viewFilters; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const viewFilters = data.edges[0].node; - - expect(viewFilters).toHaveProperty('fieldMetadataId'); - expect(viewFilters).toHaveProperty('operand'); - expect(viewFilters).toHaveProperty('value'); - expect(viewFilters).toHaveProperty('displayValue'); - expect(viewFilters).toHaveProperty('id'); - expect(viewFilters).toHaveProperty('createdAt'); - expect(viewFilters).toHaveProperty('updatedAt'); - expect(viewFilters).toHaveProperty('deletedAt'); - expect(viewFilters).toHaveProperty('viewId'); - } - }); - - it('2b. should find one viewFilter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - eq: VIEW_FILTER_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const viewFilter = response.body.data.viewFilter; - - expect(viewFilter).toHaveProperty('fieldMetadataId'); - expect(viewFilter).toHaveProperty('operand'); - expect(viewFilter).toHaveProperty('value'); - expect(viewFilter).toHaveProperty('displayValue'); - expect(viewFilter).toHaveProperty('id'); - expect(viewFilter).toHaveProperty('createdAt'); - expect(viewFilter).toHaveProperty('updatedAt'); - expect(viewFilter).toHaveProperty('deletedAt'); - expect(viewFilter).toHaveProperty('viewId'); - }); - - it('3. should update many viewFilters', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - data: { - operand: 'Updated Operand', - }, - filter: { - id: { - in: [VIEW_FILTER_1_ID, VIEW_FILTER_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedViewFilters = response.body.data.updateViewFilters; - - expect(updatedViewFilters).toHaveLength(2); - - updatedViewFilters.forEach((viewFilter) => { - expect(viewFilter.operand).toEqual('Updated Operand'); - }); - }); - - it('3b. should update one viewFilter', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - data: { - operand: 'Updated Operand 3', - }, - recordId: VIEW_FILTER_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedViewFilter = response.body.data.updateViewFilter; - - expect(updatedViewFilter.operand).toEqual('Updated Operand 3'); - }); - - it('4. should find many viewFilters with updated operand', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - operand: { - eq: 'Updated Operand', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFilters.edges).toHaveLength(2); - }); - - it('4b. should find one viewFilter with updated operand', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - operand: { - eq: 'Updated Operand 3', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFilter.operand).toEqual('Updated Operand 3'); - }); - - it('5. should delete many viewFilters', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - in: [VIEW_FILTER_1_ID, VIEW_FILTER_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedViewFilters = response.body.data.deleteViewFilters; - - expect(deletedViewFilters).toHaveLength(2); - - deletedViewFilters.forEach((viewFilter) => { - expect(viewFilter.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one viewFilter', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - recordId: VIEW_FILTER_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteViewFilter.deletedAt).toBeTruthy(); - }); - - it('6. should not find many viewFilters anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - in: [VIEW_FILTER_1_ID, VIEW_FILTER_2_ID], - }, - }, - }); - - const findViewFiltersResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(findViewFiltersResponse.body.data.viewFilters.edges).toHaveLength(0); - }); - - it('6b. should not find one viewFilter anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - eq: VIEW_FILTER_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFilter).toBeNull(); - }); - - it('7. should find many deleted viewFilters with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - in: [VIEW_FILTER_1_ID, VIEW_FILTER_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFilters.edges).toHaveLength(2); - }); - - it('7b. should find one deleted viewFilter with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - eq: VIEW_FILTER_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFilter.id).toEqual(VIEW_FILTER_3_ID); - }); - - it('8. should destroy many viewFilters', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - in: [VIEW_FILTER_1_ID, VIEW_FILTER_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyViewFilters).toHaveLength(2); - }); - - it('8b. should destroy one viewFilter', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - recordId: VIEW_FILTER_3_ID, - }); - - const destroyViewFilterResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyViewFilterResponse.body.data.destroyViewFilter).toBeTruthy(); - }); - - it('9. should not find many viewFilters anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewFilter', - objectMetadataPluralName: 'viewFilters', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - in: [VIEW_FILTER_1_ID, VIEW_FILTER_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFilters.edges).toHaveLength(0); - }); - - it('9b. should not find one viewFilter anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewFilter', - gqlFields: VIEW_FILTER_FIELDS, - filter: { - id: { - eq: VIEW_FILTER_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewFilter).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-view-sorts.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-view-sorts.integration-spec.ts deleted file mode 100644 index 0a3830e1e..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-view-sorts.integration-spec.ts +++ /dev/null @@ -1,399 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; - -const VIEW_SORT_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const VIEW_SORT_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const VIEW_SORT_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const FIELD_METADATA_ID = '20202020-0c28-43d8-8ba5-3659924d3489'; - -const VIEW_SORT_GQL_FIELDS = ` - id - fieldMetadataId - direction - createdAt - updatedAt - deletedAt - viewId -`; - -describe('viewSorts resolvers (integration)', () => { - it('1. should create and return viewSorts', async () => { - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - data: [ - { - id: VIEW_SORT_1_ID, - fieldMetadataId: FIELD_METADATA_ID, - direction: 'ASC', - }, - { - id: VIEW_SORT_2_ID, - fieldMetadataId: FIELD_METADATA_ID, - direction: 'DESC', - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createViewSorts).toHaveLength(2); - - response.body.data.createViewSorts.forEach((viewSort) => { - expect(viewSort).toHaveProperty('fieldMetadataId'); - expect(viewSort.fieldMetadataId).toEqual(FIELD_METADATA_ID); - expect(viewSort).toHaveProperty('direction'); - expect(viewSort).toHaveProperty('id'); - expect(viewSort).toHaveProperty('createdAt'); - expect(viewSort).toHaveProperty('updatedAt'); - expect(viewSort).toHaveProperty('deletedAt'); - expect(viewSort).toHaveProperty('viewId'); - }); - }); - - it('1b. should create and return one viewSort', async () => { - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - data: { - id: VIEW_SORT_3_ID, - fieldMetadataId: FIELD_METADATA_ID, - direction: 'ASC', - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdViewSort = response.body.data.createViewSort; - - expect(createdViewSort).toHaveProperty('fieldMetadataId'); - expect(createdViewSort.fieldMetadataId).toEqual(FIELD_METADATA_ID); - expect(createdViewSort).toHaveProperty('direction'); - expect(createdViewSort).toHaveProperty('id'); - expect(createdViewSort).toHaveProperty('createdAt'); - expect(createdViewSort).toHaveProperty('updatedAt'); - expect(createdViewSort).toHaveProperty('deletedAt'); - expect(createdViewSort).toHaveProperty('viewId'); - }); - - it('2. should find many viewSorts', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.viewSorts; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const viewSorts = data.edges[0].node; - - expect(viewSorts).toHaveProperty('fieldMetadataId'); - expect(viewSorts).toHaveProperty('direction'); - expect(viewSorts).toHaveProperty('id'); - expect(viewSorts).toHaveProperty('createdAt'); - expect(viewSorts).toHaveProperty('updatedAt'); - expect(viewSorts).toHaveProperty('deletedAt'); - expect(viewSorts).toHaveProperty('viewId'); - } - }); - - it('2b. should find one viewSort', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - eq: VIEW_SORT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const viewSort = response.body.data.viewSort; - - expect(viewSort).toHaveProperty('fieldMetadataId'); - expect(viewSort).toHaveProperty('direction'); - expect(viewSort).toHaveProperty('id'); - expect(viewSort).toHaveProperty('createdAt'); - expect(viewSort).toHaveProperty('updatedAt'); - expect(viewSort).toHaveProperty('deletedAt'); - expect(viewSort).toHaveProperty('viewId'); - }); - - it('3. should update many viewSorts', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - data: { - direction: 'DESC', - }, - filter: { - id: { - in: [VIEW_SORT_1_ID, VIEW_SORT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedViewSorts = response.body.data.updateViewSorts; - - expect(updatedViewSorts).toHaveLength(2); - - updatedViewSorts.forEach((viewSort) => { - expect(viewSort.direction).toEqual('DESC'); - }); - }); - - it('3b. should update one viewSort', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - data: { - direction: 'ASC', - }, - recordId: VIEW_SORT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedViewSort = response.body.data.updateViewSort; - - expect(updatedViewSort.direction).toEqual('ASC'); - }); - - it('4. should find many viewSorts with updated direction', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - direction: { - eq: 'DESC', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewSorts.edges).toHaveLength(2); - }); - - it('4b. should find one viewSort with updated direction', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - direction: { - eq: 'ASC', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewSort.direction).toEqual('ASC'); - }); - - it('5. should delete many viewSorts', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - in: [VIEW_SORT_1_ID, VIEW_SORT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedViewSorts = response.body.data.deleteViewSorts; - - expect(deletedViewSorts).toHaveLength(2); - - deletedViewSorts.forEach((viewSort) => { - expect(viewSort.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one viewSort', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - recordId: VIEW_SORT_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteViewSort.deletedAt).toBeTruthy(); - }); - - it('6. should not find many viewSorts anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - in: [VIEW_SORT_1_ID, VIEW_SORT_2_ID], - }, - }, - }); - - const findViewSortsResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findViewSortsResponse.body.data.viewSorts.edges).toHaveLength(0); - }); - - it('6b. should not find one viewSort anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - eq: VIEW_SORT_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewSort).toBeNull(); - }); - - it('7. should find many deleted viewSorts with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - in: [VIEW_SORT_1_ID, VIEW_SORT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewSorts.edges).toHaveLength(2); - }); - - it('7b. should find one deleted viewSort with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - eq: VIEW_SORT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewSort.id).toEqual(VIEW_SORT_3_ID); - }); - - it('8. should destroy many viewSorts', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - in: [VIEW_SORT_1_ID, VIEW_SORT_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyViewSorts).toHaveLength(2); - }); - - it('8b. should destroy one viewSort', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - recordId: VIEW_SORT_3_ID, - }); - - const destroyViewSortResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyViewSortResponse.body.data.destroyViewSort).toBeTruthy(); - }); - - it('9. should not find many viewSorts anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'viewSort', - objectMetadataPluralName: 'viewSorts', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - in: [VIEW_SORT_1_ID, VIEW_SORT_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewSorts.edges).toHaveLength(0); - }); - - it('9b. should not find one viewSort anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'viewSort', - gqlFields: VIEW_SORT_GQL_FIELDS, - filter: { - id: { - eq: VIEW_SORT_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.viewSort).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-views.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-views.integration-spec.ts deleted file mode 100644 index 4caa88084..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-views.integration-spec.ts +++ /dev/null @@ -1,429 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const VIEW_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const VIEW_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const VIEW_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; -const OBJECT_METADATA_ID = '20202020-b374-4779-a561-80086cb2e17f'; - -const VIEW_GQL_FIELDS = ` - id - name - objectMetadataId - type - key - icon - kanbanFieldMetadataId - position - isCompact - createdAt - updatedAt - deletedAt -`; - -describe('views resolvers (integration)', () => { - it('1. should create and return views', async () => { - const viewName1 = generateRecordName(VIEW_1_ID); - const viewName2 = generateRecordName(VIEW_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - data: [ - { - id: VIEW_1_ID, - name: viewName1, - objectMetadataId: OBJECT_METADATA_ID, - }, - { - id: VIEW_2_ID, - name: viewName2, - objectMetadataId: OBJECT_METADATA_ID, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createViews).toHaveLength(2); - - response.body.data.createViews.forEach((view) => { - expect(view).toHaveProperty('name'); - expect([viewName1, viewName2]).toContain(view.name); - expect(view).toHaveProperty('id'); - expect(view).toHaveProperty('objectMetadataId'); - expect(view).toHaveProperty('type'); - expect(view).toHaveProperty('key'); - expect(view).toHaveProperty('icon'); - expect(view).toHaveProperty('kanbanFieldMetadataId'); - expect(view).toHaveProperty('position'); - expect(view).toHaveProperty('isCompact'); - expect(view).toHaveProperty('createdAt'); - expect(view).toHaveProperty('updatedAt'); - expect(view).toHaveProperty('deletedAt'); - }); - }); - - it('1b. should create and return one view', async () => { - const viewName = generateRecordName(VIEW_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - data: { - id: VIEW_3_ID, - name: viewName, - objectMetadataId: OBJECT_METADATA_ID, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdView = response.body.data.createView; - - expect(createdView).toHaveProperty('name'); - expect(createdView.name).toEqual(viewName); - expect(createdView).toHaveProperty('id'); - expect(createdView).toHaveProperty('objectMetadataId'); - expect(createdView).toHaveProperty('type'); - expect(createdView).toHaveProperty('key'); - expect(createdView).toHaveProperty('icon'); - expect(createdView).toHaveProperty('kanbanFieldMetadataId'); - expect(createdView).toHaveProperty('position'); - expect(createdView).toHaveProperty('isCompact'); - expect(createdView).toHaveProperty('createdAt'); - expect(createdView).toHaveProperty('updatedAt'); - expect(createdView).toHaveProperty('deletedAt'); - }); - - it('2. should find many views', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.views; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const views = data.edges[0].node; - - expect(views).toHaveProperty('name'); - expect(views).toHaveProperty('objectMetadataId'); - expect(views).toHaveProperty('type'); - expect(views).toHaveProperty('key'); - expect(views).toHaveProperty('icon'); - expect(views).toHaveProperty('kanbanFieldMetadataId'); - expect(views).toHaveProperty('position'); - expect(views).toHaveProperty('isCompact'); - expect(views).toHaveProperty('id'); - expect(views).toHaveProperty('createdAt'); - expect(views).toHaveProperty('updatedAt'); - expect(views).toHaveProperty('deletedAt'); - } - }); - - it('2b. should find one view', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - eq: VIEW_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const view = response.body.data.view; - - expect(view).toHaveProperty('name'); - expect(view).toHaveProperty('objectMetadataId'); - expect(view).toHaveProperty('type'); - expect(view).toHaveProperty('key'); - expect(view).toHaveProperty('icon'); - expect(view).toHaveProperty('kanbanFieldMetadataId'); - expect(view).toHaveProperty('position'); - expect(view).toHaveProperty('isCompact'); - expect(view).toHaveProperty('id'); - expect(view).toHaveProperty('createdAt'); - expect(view).toHaveProperty('updatedAt'); - expect(view).toHaveProperty('deletedAt'); - }); - - it('3. should update many views', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - data: { - isCompact: true, - }, - filter: { - id: { - in: [VIEW_1_ID, VIEW_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedViews = response.body.data.updateViews; - - expect(updatedViews).toHaveLength(2); - - updatedViews.forEach((view) => { - expect(view.isCompact).toEqual(true); - }); - }); - - it('3b. should update one view', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - data: { - isCompact: false, - }, - recordId: VIEW_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedView = response.body.data.updateView; - - expect(updatedView.isCompact).toEqual(false); - }); - - it('4. should find many views with updated isCompact', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - filter: { - isCompact: { - eq: true, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.views.edges).toHaveLength(2); - }); - - it('4b. should find one view with updated isCompact', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - filter: { - isCompact: { - eq: false, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.view.isCompact).toEqual(false); - }); - - it('5. should delete many views', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - in: [VIEW_1_ID, VIEW_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedViews = response.body.data.deleteViews; - - expect(deletedViews).toHaveLength(2); - - deletedViews.forEach((view) => { - expect(view.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one view', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - recordId: VIEW_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteView.deletedAt).toBeTruthy(); - }); - - it('6. should not find many views anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - in: [VIEW_1_ID, VIEW_2_ID], - }, - }, - }); - - const findViewsResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findViewsResponse.body.data.views.edges).toHaveLength(0); - }); - - it('6b. should not find one view anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - eq: VIEW_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.view).toBeNull(); - }); - - it('7. should find many deleted views with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - in: [VIEW_1_ID, VIEW_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.views.edges).toHaveLength(2); - }); - - it('7b. should find one deleted view with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - eq: VIEW_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.view.id).toEqual(VIEW_3_ID); - }); - - it('8. should destroy many views', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - in: [VIEW_1_ID, VIEW_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyViews).toHaveLength(2); - }); - - it('8b. should destroy one view', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - recordId: VIEW_3_ID, - }); - - const destroyViewResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyViewResponse.body.data.destroyView).toBeTruthy(); - }); - - it('9. should not find many views anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'view', - objectMetadataPluralName: 'views', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - in: [VIEW_1_ID, VIEW_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.views.edges).toHaveLength(0); - }); - - it('9b. should not find one view anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'view', - gqlFields: VIEW_GQL_FIELDS, - filter: { - id: { - eq: VIEW_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.view).toBeNull(); - }); -}); diff --git a/packages/twenty-server/test/integration/graphql/suites/all-webhooks.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/all-webhooks.integration-spec.ts deleted file mode 100644 index 7de793dbd..000000000 --- a/packages/twenty-server/test/integration/graphql/suites/all-webhooks.integration-spec.ts +++ /dev/null @@ -1,403 +0,0 @@ -import { createManyOperationFactory } from 'test/integration/graphql/utils/create-many-operation-factory.util'; -import { createOneOperationFactory } from 'test/integration/graphql/utils/create-one-operation-factory.util'; -import { deleteManyOperationFactory } from 'test/integration/graphql/utils/delete-many-operation-factory.util'; -import { deleteOneOperationFactory } from 'test/integration/graphql/utils/delete-one-operation-factory.util'; -import { destroyManyOperationFactory } from 'test/integration/graphql/utils/destroy-many-operation-factory.util'; -import { destroyOneOperationFactory } from 'test/integration/graphql/utils/destroy-one-operation-factory.util'; -import { findManyOperationFactory } from 'test/integration/graphql/utils/find-many-operation-factory.util'; -import { findOneOperationFactory } from 'test/integration/graphql/utils/find-one-operation-factory.util'; -import { makeGraphqlAPIRequest } from 'test/integration/graphql/utils/make-graphql-api-request.util'; -import { updateManyOperationFactory } from 'test/integration/graphql/utils/update-many-operation-factory.util'; -import { updateOneOperationFactory } from 'test/integration/graphql/utils/update-one-operation-factory.util'; -import { generateRecordName } from 'test/integration/utils/generate-record-name'; - -const WEBHOOK_1_ID = '777a8457-eb2d-40ac-a707-551b615b6987'; -const WEBHOOK_2_ID = '777a8457-eb2d-40ac-a707-551b615b6988'; -const WEBHOOK_3_ID = '777a8457-eb2d-40ac-a707-551b615b6989'; - -const WEBHOOK_GQL_FIELDS = ` - id - targetUrl - operations - description - createdAt - updatedAt - deletedAt -`; - -describe('webhooks resolvers (integration)', () => { - it('1. should create and return webhooks', async () => { - const webhookDescription1 = generateRecordName(WEBHOOK_1_ID); - const webhookDescription2 = generateRecordName(WEBHOOK_2_ID); - - const graphqlOperation = createManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - data: [ - { - id: WEBHOOK_1_ID, - description: webhookDescription1, - }, - { - id: WEBHOOK_2_ID, - description: webhookDescription2, - }, - ], - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.createWebhooks).toHaveLength(2); - - response.body.data.createWebhooks.forEach((webhook) => { - expect(webhook).toHaveProperty('description'); - expect([webhookDescription1, webhookDescription2]).toContain( - webhook.description, - ); - expect(webhook).toHaveProperty('operations'); - expect(webhook).toHaveProperty('id'); - expect(webhook).toHaveProperty('targetUrl'); - expect(webhook).toHaveProperty('createdAt'); - expect(webhook).toHaveProperty('updatedAt'); - expect(webhook).toHaveProperty('deletedAt'); - }); - }); - - it('1b. should create and return one webhook', async () => { - const webhookDescription = generateRecordName(WEBHOOK_3_ID); - - const graphqlOperation = createOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - data: { - id: WEBHOOK_3_ID, - description: webhookDescription, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const createdWebhook = response.body.data.createWebhook; - - expect(createdWebhook).toHaveProperty('description'); - expect(createdWebhook.description).toEqual(webhookDescription); - expect(createdWebhook).toHaveProperty('operations'); - expect(createdWebhook).toHaveProperty('id'); - expect(createdWebhook).toHaveProperty('targetUrl'); - expect(createdWebhook).toHaveProperty('createdAt'); - expect(createdWebhook).toHaveProperty('updatedAt'); - expect(createdWebhook).toHaveProperty('deletedAt'); - }); - - it('2. should find many webhooks', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const data = response.body.data.webhooks; - - expect(data).toBeDefined(); - expect(Array.isArray(data.edges)).toBe(true); - - if (data.edges.length > 0) { - const webhooks = data.edges[0].node; - - expect(webhooks).toHaveProperty('targetUrl'); - expect(webhooks).toHaveProperty('operations'); - expect(webhooks).toHaveProperty('id'); - expect(webhooks).toHaveProperty('description'); - expect(webhooks).toHaveProperty('createdAt'); - expect(webhooks).toHaveProperty('updatedAt'); - expect(webhooks).toHaveProperty('deletedAt'); - } - }); - - it('2b. should find one webhook', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - eq: WEBHOOK_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const webhook = response.body.data.webhook; - - expect(webhook).toHaveProperty('targetUrl'); - expect(webhook).toHaveProperty('operations'); - expect(webhook).toHaveProperty('id'); - expect(webhook).toHaveProperty('description'); - expect(webhook).toHaveProperty('createdAt'); - expect(webhook).toHaveProperty('updatedAt'); - expect(webhook).toHaveProperty('deletedAt'); - }); - - it('3. should update many webhooks', async () => { - const graphqlOperation = updateManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - data: { - description: 'Updated Description', - }, - filter: { - id: { - in: [WEBHOOK_1_ID, WEBHOOK_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedWebhooks = response.body.data.updateWebhooks; - - expect(updatedWebhooks).toHaveLength(2); - - updatedWebhooks.forEach((webhook) => { - expect(webhook.description).toEqual('Updated Description'); - }); - }); - - it('3b. should update one webhook', async () => { - const graphqlOperation = updateOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - data: { - description: 'New Description', - }, - recordId: WEBHOOK_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const updatedWebhook = response.body.data.updateWebhook; - - expect(updatedWebhook.description).toEqual('New Description'); - }); - - it('4. should find many webhooks with updated description', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - description: { - eq: 'Updated Description', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.webhooks.edges).toHaveLength(2); - }); - - it('4b. should find one webhook with updated description', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - description: { - eq: 'New Description', - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.webhook.description).toEqual('New Description'); - }); - - it('5. should delete many webhooks', async () => { - const graphqlOperation = deleteManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - in: [WEBHOOK_1_ID, WEBHOOK_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - const deletedWebhooks = response.body.data.deleteWebhooks; - - expect(deletedWebhooks).toHaveLength(2); - - deletedWebhooks.forEach((webhook) => { - expect(webhook.deletedAt).toBeTruthy(); - }); - }); - - it('5b. should delete one webhook', async () => { - const graphqlOperation = deleteOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - recordId: WEBHOOK_3_ID, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.deleteWebhook.deletedAt).toBeTruthy(); - }); - - it('6. should not find many webhooks anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - in: [WEBHOOK_1_ID, WEBHOOK_2_ID], - }, - }, - }); - - const findWebhooksResponse = await makeGraphqlAPIRequest(graphqlOperation); - - expect(findWebhooksResponse.body.data.webhooks.edges).toHaveLength(0); - }); - - it('6b. should not find one webhook anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - eq: WEBHOOK_3_ID, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.webhook).toBeNull(); - }); - - it('7. should find many deleted webhooks with deletedAt filter', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - in: [WEBHOOK_1_ID, WEBHOOK_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.webhooks.edges).toHaveLength(2); - }); - - it('7b. should find one deleted webhook with deletedAt filter', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - eq: WEBHOOK_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.webhook.id).toEqual(WEBHOOK_3_ID); - }); - - it('8. should destroy many webhooks', async () => { - const graphqlOperation = destroyManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - in: [WEBHOOK_1_ID, WEBHOOK_2_ID], - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.destroyWebhooks).toHaveLength(2); - }); - - it('8b. should destroy one webhook', async () => { - const graphqlOperation = destroyOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - recordId: WEBHOOK_3_ID, - }); - - const destroyWebhookResponse = - await makeGraphqlAPIRequest(graphqlOperation); - - expect(destroyWebhookResponse.body.data.destroyWebhook).toBeTruthy(); - }); - - it('9. should not find many webhooks anymore', async () => { - const graphqlOperation = findManyOperationFactory({ - objectMetadataSingularName: 'webhook', - objectMetadataPluralName: 'webhooks', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - in: [WEBHOOK_1_ID, WEBHOOK_2_ID], - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.webhooks.edges).toHaveLength(0); - }); - - it('9b. should not find one webhook anymore', async () => { - const graphqlOperation = findOneOperationFactory({ - objectMetadataSingularName: 'webhook', - gqlFields: WEBHOOK_GQL_FIELDS, - filter: { - id: { - eq: WEBHOOK_3_ID, - }, - not: { - deletedAt: { - is: 'NULL', - }, - }, - }, - }); - - const response = await makeGraphqlAPIRequest(graphqlOperation); - - expect(response.body.data.webhook).toBeNull(); - }); -}); diff --git a/packages/twenty-website/src/content/developers/backend-development/server-commands.mdx b/packages/twenty-website/src/content/developers/backend-development/server-commands.mdx index 075058132..424ef37a3 100644 --- a/packages/twenty-website/src/content/developers/backend-development/server-commands.mdx +++ b/packages/twenty-website/src/content/developers/backend-development/server-commands.mdx @@ -30,8 +30,10 @@ npx nx run twenty-server:lint # pass --fix to fix lint errors ### Test ``` -npx nx run twenty-server:test:unit +npx nx run twenty-server:test:unit # run unit tests +npx nx run twenty-server:test:integration # run integration tests ``` +Note : you can run `npx nx run twenty-server:test:integration:with-db-reset` in case you need to reset the database before running the integration tests. ### Resetting the database