Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
295 lines
7.9 KiB
TypeScript
295 lines
7.9 KiB
TypeScript
import { makeRestAPIRequest } from 'test/integration/rest/utils/make-rest-api-request.util';
|
|
import { generateRecordName } from 'test/integration/utils/generate-record-name';
|
|
import {
|
|
ViewOpenRecordIn,
|
|
ViewType,
|
|
ViewVisibility,
|
|
} from 'twenty-shared/types';
|
|
|
|
import { type ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity';
|
|
import { type ViewFilterGroupEntity } from 'src/engine/metadata-modules/view-filter-group/entities/view-filter-group.entity';
|
|
import { type ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity';
|
|
import { type ViewGroupEntity } from 'src/engine/metadata-modules/view-group/entities/view-group.entity';
|
|
import { type ViewSortEntity } from 'src/engine/metadata-modules/view-sort/entities/view-sort.entity';
|
|
import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
|
|
|
|
export const findViewByIdWithRestApi = async (
|
|
viewId: string,
|
|
): Promise<ViewEntity | null> => {
|
|
const response = await makeRestAPIRequest({
|
|
method: 'get',
|
|
path: `/metadata/views/${viewId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status === 404) {
|
|
return null;
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const findViewFilterWithRestApi = async (
|
|
viewFilterId: string,
|
|
): Promise<ViewFilterEntity | null> => {
|
|
const response = await makeRestAPIRequest({
|
|
method: 'get',
|
|
path: `/metadata/viewFilters/${viewFilterId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status === 404) {
|
|
return null;
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const createTestViewWithRestApi = async (
|
|
params: {
|
|
objectMetadataId: string;
|
|
} & Partial<Omit<ViewEntity, 'objectMetadataId'>>,
|
|
): Promise<ViewEntity> => {
|
|
const { objectMetadataId, name, ...restParams } = params;
|
|
const viewData = {
|
|
name: name || generateRecordName('Test View'),
|
|
objectMetadataId,
|
|
icon: 'IconTable',
|
|
type: ViewType.TABLE,
|
|
key: null,
|
|
position: 0,
|
|
isCompact: false,
|
|
openRecordIn: ViewOpenRecordIn.SIDE_PANEL,
|
|
visibility: ViewVisibility.WORKSPACE,
|
|
...restParams,
|
|
};
|
|
|
|
const response = await makeRestAPIRequest({
|
|
method: 'post',
|
|
path: '/metadata/views',
|
|
body: viewData,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status !== 201) {
|
|
throw new Error(
|
|
`Failed to create test view: ${response.status} - ${JSON.stringify(response.body)}`,
|
|
);
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const createTestViewFieldWithRestApi = async (
|
|
params: {
|
|
viewId: string;
|
|
fieldMetadataId: string;
|
|
} & Partial<Omit<ViewFieldEntity, 'viewId' | 'fieldMetadataId'>>,
|
|
): Promise<ViewFieldEntity> => {
|
|
const { viewId, fieldMetadataId, ...restParams } = params;
|
|
const viewFieldData = {
|
|
viewId,
|
|
fieldMetadataId,
|
|
position: 0,
|
|
isVisible: true,
|
|
size: 150,
|
|
...restParams,
|
|
};
|
|
|
|
const response = await makeRestAPIRequest({
|
|
method: 'post',
|
|
path: '/metadata/viewFields',
|
|
body: viewFieldData,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status !== 201) {
|
|
throw new Error(
|
|
`Failed to create test view field: ${response.status} - ${JSON.stringify(response.body)}`,
|
|
);
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const createTestViewFilterWithRestApi = async (
|
|
params: {
|
|
viewId: string;
|
|
fieldMetadataId: string;
|
|
} & Partial<Omit<ViewFilterEntity, 'viewId' | 'fieldMetadataId'>>,
|
|
): Promise<ViewFilterEntity> => {
|
|
const { viewId, fieldMetadataId, operand, value, ...restParams } = params;
|
|
const viewFilterData = {
|
|
viewId,
|
|
fieldMetadataId,
|
|
operand: operand || 'Is',
|
|
value: value || 'test-value',
|
|
...restParams,
|
|
};
|
|
|
|
const response = await makeRestAPIRequest({
|
|
method: 'post',
|
|
path: '/metadata/viewFilters',
|
|
body: viewFilterData,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status !== 201) {
|
|
throw new Error(
|
|
`Failed to create test view filter: ${response.status} - ${JSON.stringify(response.body)}`,
|
|
);
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const createTestViewSortWithRestApi = async (
|
|
params: {
|
|
viewId: string;
|
|
fieldMetadataId: string;
|
|
} & Partial<Omit<ViewSortEntity, 'viewId' | 'fieldMetadataId'>>,
|
|
): Promise<ViewSortEntity> => {
|
|
const { viewId, fieldMetadataId, direction, ...restParams } = params;
|
|
const viewSortData = {
|
|
viewId,
|
|
fieldMetadataId,
|
|
direction: direction || 'ASC',
|
|
...restParams,
|
|
};
|
|
|
|
const response = await makeRestAPIRequest({
|
|
method: 'post',
|
|
path: '/metadata/viewSorts',
|
|
body: viewSortData,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status !== 201) {
|
|
throw new Error(
|
|
`Failed to create test view sort: ${response.status} - ${JSON.stringify(response.body)}`,
|
|
);
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const createTestViewGroupWithRestApi = async (
|
|
params: {
|
|
viewId: string;
|
|
fieldMetadataId: string;
|
|
} & Partial<Omit<ViewGroupEntity, 'viewId' | 'fieldMetadataId'>>,
|
|
): Promise<ViewGroupEntity> => {
|
|
const { viewId, fieldMetadataId, fieldValue, ...restParams } = params;
|
|
const viewGroupData = {
|
|
viewId,
|
|
fieldMetadataId,
|
|
isVisible: true,
|
|
fieldValue: fieldValue || 'test-group-value',
|
|
position: 0,
|
|
...restParams,
|
|
};
|
|
|
|
const response = await makeRestAPIRequest({
|
|
method: 'post',
|
|
path: '/metadata/viewGroups',
|
|
body: viewGroupData,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status !== 201) {
|
|
throw new Error(
|
|
`Failed to create test view group: ${response.status} - ${JSON.stringify(response.body)}`,
|
|
);
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const createTestViewFilterGroupWithRestApi = async (
|
|
params: {
|
|
viewId: string;
|
|
} & Partial<Omit<ViewFilterGroupEntity, 'viewId'>>,
|
|
): Promise<ViewFilterGroupEntity> => {
|
|
const { viewId, logicalOperator, ...restParams } = params;
|
|
const viewFilterGroupData = {
|
|
viewId,
|
|
logicalOperator: logicalOperator || 'AND',
|
|
...restParams,
|
|
};
|
|
|
|
const response = await makeRestAPIRequest({
|
|
method: 'post',
|
|
path: '/metadata/viewFilterGroups',
|
|
body: viewFilterGroupData,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
});
|
|
|
|
if (response.status !== 201) {
|
|
throw new Error(
|
|
`Failed to create test view filter group: ${response.status} - ${JSON.stringify(response.body)}`,
|
|
);
|
|
}
|
|
|
|
return response.body;
|
|
};
|
|
|
|
export const deleteTestViewWithRestApi = async (
|
|
viewId: string,
|
|
): Promise<void> => {
|
|
await makeRestAPIRequest({
|
|
method: 'delete',
|
|
path: `/metadata/views/${viewId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
}).catch(() => {});
|
|
};
|
|
|
|
export const deleteTestViewFieldWithRestApi = async (
|
|
viewFieldId: string,
|
|
): Promise<void> => {
|
|
await makeRestAPIRequest({
|
|
method: 'delete',
|
|
path: `/metadata/viewFields/${viewFieldId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
}).catch(() => {});
|
|
};
|
|
|
|
export const deleteTestViewFilterWithRestApi = async (
|
|
viewFilterId: string,
|
|
): Promise<void> => {
|
|
await makeRestAPIRequest({
|
|
method: 'delete',
|
|
path: `/metadata/viewFilters/${viewFilterId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
}).catch(() => {});
|
|
};
|
|
|
|
export const deleteTestViewSortWithRestApi = async (
|
|
viewSortId: string,
|
|
): Promise<void> => {
|
|
await makeRestAPIRequest({
|
|
method: 'delete',
|
|
path: `/metadata/viewSorts/${viewSortId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
}).catch(() => {});
|
|
};
|
|
|
|
export const deleteTestViewGroupWithRestApi = async (
|
|
viewGroupId: string,
|
|
): Promise<void> => {
|
|
await makeRestAPIRequest({
|
|
method: 'delete',
|
|
path: `/metadata/viewGroups/${viewGroupId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
}).catch(() => {});
|
|
};
|
|
|
|
export const deleteTestViewFilterGroupWithRestApi = async (
|
|
viewFilterGroupId: string,
|
|
): Promise<void> => {
|
|
await makeRestAPIRequest({
|
|
method: 'delete',
|
|
path: `/metadata/viewFilterGroups/${viewFilterGroupId}`,
|
|
bearer: APPLE_JANE_ADMIN_ACCESS_TOKEN,
|
|
}).catch(() => {});
|
|
};
|