Files
twenty/packages/twenty-server/test/integration/graphql/suites/all-favorites-resolvers.integration-spec.ts
gitstart-app[bot] bf0a059751 [Server Integration tests] Enrich integration GraphQL API tests #3 (#7931)
This PR was created by [GitStart](https://gitstart.com/) to address the
requirements from this ticket:
[TWNTY-7526](https://clients.gitstart.com/twenty/5449/tickets/TWNTY-7526).

 --- 

### Description

NoteTargets and MessageThreads are special cases because they do not
have a notable property that we could use in "update" the test cases,\
for NoteTargets we are using the personId, testing the relation, but for
MessageThreads we are using updatedAt. To test the relations for
MessageThreads\
we would need to update another object (Message) because the relation is
ONE_TO_MANY, updating another object in a test that would update the
current tested object sounds incorrect.\
In the NoteTargets, we can update the NoteTarget object because the
relation is MANY_TO_ONE\
for some tests we need an account ID, we are using Tim's account for all
the tests (the token in jest-integration.config.ts), so we are using a
constant to use the account ID

### Refs

#7526

### Demo


![](https://assets-service.gitstart.com/28455/7f1c520e-78e4-43c3-aa89-f6fc09e0a056.png)

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
2024-10-22 10:17:10 +02:00

410 lines
12 KiB
TypeScript

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();
});
});