breaking (soft) - Migrate viewGroup.fieldMetadataId -> view.mainGroupByFieldMetadataId (2/3) (#16277)
Should be merged once https://github.com/twentyhq/twenty/pull/16206 has been released + command run to prod In this PR - Remove usage of viewGroup.fieldMetadataId, both in BE and FE states. - But we still need to properly populate it until we fully remove viewGroup.fieldMetadataId from db and ORM entity (upcoming 3rd PR out of 3). fieldMetadataId was removed from CoreViewGroup type and CreateViewGroupInput and is determined BE-side based on the associated view's mainGroupByFieldMetadataId. **I expect this means a downtime on viewGroup creation, until both FE and BE are deployed and cache is flushed.** This seems acceptable to me as it only regards viewGroup creation. - this information is replaced by view.mainGroupByFieldMetadataID - Handle view group creation, update and deletion in the BE as a side-effect of a view creation, update or deletion. Optimistic effects are still used - Add validation at view creation or update regarding mainGroupByFieldMetadata Left to do in 3rd PR - Remove viewGroup.fieldMetadataId from db and ORM entity - Restore feature allowing to update an existing grouped view's group by field (already OK on BE side but need to rebuild FE optimistic)
This commit is contained in:
+1
@@ -9,6 +9,7 @@ exports[`successful find view with all sub-relations (e2e) Company View Structur
|
||||
"id": Any<String>,
|
||||
"isCompact": false,
|
||||
"key": "INDEX",
|
||||
"mainGroupByFieldMetadataId": null,
|
||||
"name": "All Companies",
|
||||
"objectMetadataId": Any<String>,
|
||||
"openRecordIn": "SIDE_PANEL",
|
||||
|
||||
+14
@@ -1,3 +1,4 @@
|
||||
import { createOneSelectFieldMetadataForIntegrationTests } from 'test/integration/metadata/suites/field-metadata/utils/create-one-select-field-metadata-for-integration-tests.util';
|
||||
import { createOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata.util';
|
||||
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
|
||||
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
|
||||
@@ -9,6 +10,7 @@ import { ViewType } from 'src/engine/metadata-modules/view/enums/view-type.enum'
|
||||
|
||||
describe('Create core view', () => {
|
||||
let testObjectMetadataId: string;
|
||||
let testSelectFieldMetadataId: string;
|
||||
|
||||
beforeAll(async () => {
|
||||
const {
|
||||
@@ -27,6 +29,15 @@ describe('Create core view', () => {
|
||||
});
|
||||
|
||||
testObjectMetadataId = objectMetadataId;
|
||||
|
||||
const { selectFieldMetadataId } =
|
||||
await createOneSelectFieldMetadataForIntegrationTests({
|
||||
input: {
|
||||
objectMetadataId,
|
||||
},
|
||||
});
|
||||
|
||||
testSelectFieldMetadataId = selectFieldMetadataId;
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
@@ -52,6 +63,7 @@ describe('Create core view', () => {
|
||||
objectMetadataId: testObjectMetadataId,
|
||||
icon: 'IconDeal',
|
||||
type: ViewType.KANBAN,
|
||||
mainGroupByFieldMetadataId: testSelectFieldMetadataId,
|
||||
position: 1,
|
||||
isCompact: true,
|
||||
openRecordIn: ViewOpenRecordIn.SIDE_PANEL,
|
||||
@@ -63,6 +75,7 @@ describe('Create core view', () => {
|
||||
assertViewStructure(data.createCoreView, {
|
||||
name: 'Kanban View',
|
||||
objectMetadataId: testObjectMetadataId,
|
||||
mainGroupByFieldMetadataId: testSelectFieldMetadataId,
|
||||
type: ViewType.KANBAN,
|
||||
key: null,
|
||||
icon: 'IconDeal',
|
||||
@@ -90,6 +103,7 @@ describe('Create core view', () => {
|
||||
objectMetadataId: input.objectMetadataId,
|
||||
icon: input.icon,
|
||||
type: ViewType.TABLE,
|
||||
mainGroupByFieldMetadataId: null,
|
||||
key: null,
|
||||
position: 0,
|
||||
isCompact: false,
|
||||
|
||||
+27
@@ -1,4 +1,5 @@
|
||||
import { expectOneNotInternalServerErrorSnapshot } from 'test/integration/graphql/utils/expect-one-not-internal-server-error-snapshot.util';
|
||||
import { createOneSelectFieldMetadataForIntegrationTests } from 'test/integration/metadata/suites/field-metadata/utils/create-one-select-field-metadata-for-integration-tests.util';
|
||||
import { createOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata.util';
|
||||
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
|
||||
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
|
||||
@@ -11,6 +12,7 @@ const TEST_NOT_EXISTING_VIEW_ID = '20202020-0000-4000-8000-000000000000';
|
||||
|
||||
describe('Update core view', () => {
|
||||
let testObjectMetadataId: string;
|
||||
let testSelectFieldMetadataId: string;
|
||||
|
||||
beforeAll(async () => {
|
||||
const {
|
||||
@@ -28,7 +30,31 @@ describe('Update core view', () => {
|
||||
},
|
||||
});
|
||||
|
||||
const { selectFieldMetadataId } =
|
||||
await createOneSelectFieldMetadataForIntegrationTests({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
objectMetadataId,
|
||||
options: [
|
||||
{
|
||||
label: 'Option 1',
|
||||
value: 'OPTION_1',
|
||||
color: 'blue',
|
||||
position: 0,
|
||||
},
|
||||
{ label: 'Option 2', value: 'OPTION_2', color: 'red', position: 1 },
|
||||
{
|
||||
label: 'Option 3',
|
||||
value: 'OPTION_3',
|
||||
color: 'green',
|
||||
position: 2,
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
testObjectMetadataId = objectMetadataId;
|
||||
testSelectFieldMetadataId = selectFieldMetadataId;
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
@@ -65,6 +91,7 @@ describe('Update core view', () => {
|
||||
id: view.id,
|
||||
name: 'Updated View',
|
||||
type: ViewType.KANBAN,
|
||||
mainGroupByFieldMetadataId: testSelectFieldMetadataId,
|
||||
isCompact: true,
|
||||
};
|
||||
|
||||
|
||||
+9
-63
@@ -1,17 +1,15 @@
|
||||
import { expectOneNotInternalServerErrorSnapshot } from 'test/integration/graphql/utils/expect-one-not-internal-server-error-snapshot.util';
|
||||
import { createTestViewWithGraphQL } from 'test/integration/graphql/utils/view-graphql.util';
|
||||
import { createOneFieldMetadata } from 'test/integration/metadata/suites/field-metadata/utils/create-one-field-metadata.util';
|
||||
import { createOneSelectFieldMetadataForIntegrationTests } from 'test/integration/metadata/suites/field-metadata/utils/create-one-select-field-metadata-for-integration-tests.util';
|
||||
import { createOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata.util';
|
||||
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
|
||||
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
|
||||
import { createOneCoreViewGroup } from 'test/integration/metadata/suites/view-group/utils/create-one-core-view-group.util';
|
||||
import { deleteOneCoreViewGroup } from 'test/integration/metadata/suites/view-group/utils/delete-one-core-view-group.util';
|
||||
import { destroyOneCoreViewGroup } from 'test/integration/metadata/suites/view-group/utils/destroy-one-core-view-group.util';
|
||||
import { findCoreViewGroups } from 'test/integration/metadata/suites/view-group/utils/find-core-view-groups.util';
|
||||
import { updateOneCoreViewGroup } from 'test/integration/metadata/suites/view-group/utils/update-one-core-view-group.util';
|
||||
import { destroyOneCoreView } from 'test/integration/metadata/suites/view/utils/destroy-one-core-view.util';
|
||||
import { assertViewGroupStructure } from 'test/integration/utils/view-test.util';
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
|
||||
const TEST_NOT_EXISTING_VIEW_GROUP_ID = '20202020-0000-4000-8000-000000000003';
|
||||
|
||||
@@ -38,22 +36,14 @@ describe('View Group Resolver', () => {
|
||||
|
||||
testObjectMetadataId = objectMetadataId;
|
||||
|
||||
const {
|
||||
data: {
|
||||
createOneField: { id: fieldMetadataId },
|
||||
},
|
||||
} = await createOneFieldMetadata({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
name: 'testField',
|
||||
label: 'Test Field',
|
||||
type: FieldMetadataType.TEXT,
|
||||
objectMetadataId: testObjectMetadataId,
|
||||
isLabelSyncedWithName: true,
|
||||
},
|
||||
});
|
||||
const { selectFieldMetadataId } =
|
||||
await createOneSelectFieldMetadataForIntegrationTests({
|
||||
input: {
|
||||
objectMetadataId: testObjectMetadataId,
|
||||
},
|
||||
});
|
||||
|
||||
testFieldMetadataId = fieldMetadataId;
|
||||
testFieldMetadataId = selectFieldMetadataId;
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
@@ -76,6 +66,7 @@ describe('View Group Resolver', () => {
|
||||
const view = await createTestViewWithGraphQL({
|
||||
name: 'Test View for Groups',
|
||||
objectMetadataId: testObjectMetadataId,
|
||||
mainGroupByFieldMetadataId: testFieldMetadataId,
|
||||
});
|
||||
|
||||
testViewId = view.id;
|
||||
@@ -88,51 +79,12 @@ describe('View Group Resolver', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('getCoreViewGroups', () => {
|
||||
it('should return empty array when no view groups exist', async () => {
|
||||
const { data } = await findCoreViewGroups({
|
||||
viewId: testViewId,
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
expect(data.getCoreViewGroups).toEqual([]);
|
||||
});
|
||||
|
||||
it('should return view groups for a specific view', async () => {
|
||||
await createOneCoreViewGroup({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
viewId: testViewId,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: true,
|
||||
fieldValue: 'active',
|
||||
position: 0,
|
||||
},
|
||||
});
|
||||
|
||||
const { data } = await findCoreViewGroups({
|
||||
viewId: testViewId,
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
expect(data.getCoreViewGroups).toHaveLength(1);
|
||||
assertViewGroupStructure(data.getCoreViewGroups[0], {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: true,
|
||||
fieldValue: 'active',
|
||||
position: 0,
|
||||
viewId: testViewId,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('createCoreViewGroup', () => {
|
||||
it('should create a new view group', async () => {
|
||||
const { data } = await createOneCoreViewGroup({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
viewId: testViewId,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: false,
|
||||
fieldValue: 'inactive',
|
||||
position: 1,
|
||||
@@ -140,7 +92,6 @@ describe('View Group Resolver', () => {
|
||||
});
|
||||
|
||||
assertViewGroupStructure(data.createCoreViewGroup, {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: false,
|
||||
fieldValue: 'inactive',
|
||||
position: 1,
|
||||
@@ -153,7 +104,6 @@ describe('View Group Resolver', () => {
|
||||
expectToFail: false,
|
||||
input: {
|
||||
viewId: testViewId,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: true,
|
||||
fieldValue: '',
|
||||
position: 2,
|
||||
@@ -161,7 +111,6 @@ describe('View Group Resolver', () => {
|
||||
});
|
||||
|
||||
assertViewGroupStructure(data.createCoreViewGroup, {
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: true,
|
||||
fieldValue: '',
|
||||
position: 2,
|
||||
@@ -175,7 +124,6 @@ describe('View Group Resolver', () => {
|
||||
expectToFail: false,
|
||||
input: {
|
||||
viewId: testViewId,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: true,
|
||||
fieldValue: 'original',
|
||||
position: 0,
|
||||
@@ -224,7 +172,6 @@ describe('View Group Resolver', () => {
|
||||
expectToFail: false,
|
||||
input: {
|
||||
viewId: testViewId,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: true,
|
||||
fieldValue: 'to delete',
|
||||
position: 0,
|
||||
@@ -263,7 +210,6 @@ describe('View Group Resolver', () => {
|
||||
expectToFail: false,
|
||||
input: {
|
||||
viewId: testViewId,
|
||||
fieldMetadataId: testFieldMetadataId,
|
||||
isVisible: true,
|
||||
fieldValue: 'to destroy',
|
||||
position: 0,
|
||||
|
||||
-104
@@ -1,104 +0,0 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`View Group Resolver - Failing Create Many Operations - v2 should accumulate multiple validation errors when some inputs are invalid 1`] = `
|
||||
{
|
||||
"extensions": {
|
||||
"code": "METADATA_VALIDATION_FAILED",
|
||||
"errors": {
|
||||
"agent": [],
|
||||
"cronTrigger": [],
|
||||
"databaseEventTrigger": [],
|
||||
"fieldMetadata": [],
|
||||
"index": [],
|
||||
"objectMetadata": [],
|
||||
"pageLayoutTab": [],
|
||||
"pageLayoutWidget": [],
|
||||
"role": [],
|
||||
"roleTarget": [],
|
||||
"routeTrigger": [],
|
||||
"serverlessFunction": [],
|
||||
"view": [],
|
||||
"viewField": [],
|
||||
"viewFilter": [],
|
||||
"viewGroup": [
|
||||
{
|
||||
"errors": [
|
||||
{
|
||||
"code": "INVALID_VIEW_DATA",
|
||||
"message": "Field metadata not found",
|
||||
"userFriendlyMessage": "Field metadata not found",
|
||||
},
|
||||
],
|
||||
"flatEntityMinimalInformation": {
|
||||
"fieldMetadataId": Any<String>,
|
||||
"id": Any<String>,
|
||||
"viewId": Any<String>,
|
||||
},
|
||||
"status": "fail",
|
||||
"type": "create_view_group",
|
||||
},
|
||||
{
|
||||
"errors": [
|
||||
{
|
||||
"code": "INVALID_VIEW_DATA",
|
||||
"message": "View not found",
|
||||
"userFriendlyMessage": "View not found",
|
||||
},
|
||||
],
|
||||
"flatEntityMinimalInformation": {
|
||||
"fieldMetadataId": Any<String>,
|
||||
"id": Any<String>,
|
||||
"viewId": Any<String>,
|
||||
},
|
||||
"status": "fail",
|
||||
"type": "create_view_group",
|
||||
},
|
||||
{
|
||||
"errors": [
|
||||
{
|
||||
"code": "INVALID_VIEW_DATA",
|
||||
"message": "Field metadata not found",
|
||||
"userFriendlyMessage": "Field metadata not found",
|
||||
},
|
||||
{
|
||||
"code": "INVALID_VIEW_DATA",
|
||||
"message": "View not found",
|
||||
"userFriendlyMessage": "View not found",
|
||||
},
|
||||
],
|
||||
"flatEntityMinimalInformation": {
|
||||
"fieldMetadataId": Any<String>,
|
||||
"id": Any<String>,
|
||||
"viewId": Any<String>,
|
||||
},
|
||||
"status": "fail",
|
||||
"type": "create_view_group",
|
||||
},
|
||||
],
|
||||
},
|
||||
"message": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
"summary": {
|
||||
"invalidAgent": 0,
|
||||
"invalidCronTrigger": 0,
|
||||
"invalidDatabaseEventTrigger": 0,
|
||||
"invalidFieldMetadata": 0,
|
||||
"invalidIndex": 0,
|
||||
"invalidObjectMetadata": 0,
|
||||
"invalidPageLayoutTab": 0,
|
||||
"invalidPageLayoutWidget": 0,
|
||||
"invalidRole": 0,
|
||||
"invalidRoleTarget": 0,
|
||||
"invalidRouteTrigger": 0,
|
||||
"invalidServerlessFunction": 0,
|
||||
"invalidView": 0,
|
||||
"invalidViewField": 0,
|
||||
"invalidViewFilter": 0,
|
||||
"invalidViewGroup": 0,
|
||||
"totalErrors": 0,
|
||||
},
|
||||
"userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",
|
||||
},
|
||||
"message": "Multiple validation errors occurred while creating view groups",
|
||||
"name": "GraphQLError",
|
||||
}
|
||||
`;
|
||||
-152
@@ -1,152 +0,0 @@
|
||||
import { createManyCoreViewGroups } from 'test/integration/metadata/suites/view-group/utils/create-many-core-view-groups.util';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import { expectOneNotInternalServerErrorSnapshot } from 'test/integration/graphql/utils/expect-one-not-internal-server-error-snapshot.util';
|
||||
import { createOneFieldMetadata } from 'test/integration/metadata/suites/field-metadata/utils/create-one-field-metadata.util';
|
||||
import { createOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata.util';
|
||||
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
|
||||
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
|
||||
import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util';
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
|
||||
import { type CreateViewGroupInput } from 'src/engine/metadata-modules/view-group/dtos/inputs/create-view-group.input';
|
||||
|
||||
describe('View Group Resolver - Failing Create Many Operations - v2', () => {
|
||||
let testSetup: {
|
||||
testViewId: string;
|
||||
testObjectMetadataId: string;
|
||||
firstTestFieldMetadataId: string;
|
||||
secondTestFieldMetadataId: string;
|
||||
};
|
||||
|
||||
beforeAll(async () => {
|
||||
const {
|
||||
data: {
|
||||
createOneObject: { id: objectMetadataId },
|
||||
},
|
||||
} = await createOneObjectMetadata({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
nameSingular: 'myGroupTestObjectV2',
|
||||
namePlural: 'myGroupTestObjectsV2',
|
||||
labelSingular: 'My Group Test Object v2',
|
||||
labelPlural: 'My Group Test Objects v2',
|
||||
icon: 'Icon123',
|
||||
},
|
||||
});
|
||||
|
||||
const {
|
||||
data: {
|
||||
createOneField: { id: firstTestFieldMetadataId },
|
||||
},
|
||||
} = await createOneFieldMetadata({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
name: 'testField',
|
||||
label: 'Test Field',
|
||||
type: FieldMetadataType.TEXT,
|
||||
objectMetadataId,
|
||||
isLabelSyncedWithName: true,
|
||||
},
|
||||
gqlFields: `
|
||||
id
|
||||
name
|
||||
label
|
||||
isLabelSyncedWithName
|
||||
`,
|
||||
});
|
||||
|
||||
const {
|
||||
data: {
|
||||
createOneField: { id: secondTestFieldMetadataId },
|
||||
},
|
||||
} = await createOneFieldMetadata({
|
||||
expectToFail: false,
|
||||
input: {
|
||||
name: 'secondTestField',
|
||||
label: 'Test Field',
|
||||
type: FieldMetadataType.TEXT,
|
||||
objectMetadataId,
|
||||
isLabelSyncedWithName: false,
|
||||
},
|
||||
gqlFields: `
|
||||
id
|
||||
name
|
||||
label
|
||||
isLabelSyncedWithName
|
||||
`,
|
||||
});
|
||||
|
||||
const {
|
||||
data: {
|
||||
createCoreView: { id: testViewId },
|
||||
},
|
||||
} = await createOneCoreView({
|
||||
input: {
|
||||
icon: 'icon123',
|
||||
objectMetadataId,
|
||||
name: 'TestViewForGroups',
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
|
||||
testSetup = {
|
||||
testViewId,
|
||||
testObjectMetadataId: objectMetadataId,
|
||||
firstTestFieldMetadataId,
|
||||
secondTestFieldMetadataId,
|
||||
};
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await updateOneObjectMetadata({
|
||||
input: {
|
||||
idToUpdate: testSetup.testObjectMetadataId,
|
||||
updatePayload: {
|
||||
isActive: false,
|
||||
},
|
||||
},
|
||||
});
|
||||
await deleteOneObjectMetadata({
|
||||
expectToFail: false,
|
||||
input: { idToDelete: testSetup.testObjectMetadataId },
|
||||
});
|
||||
});
|
||||
|
||||
it('should accumulate multiple validation errors when some inputs are invalid', async () => {
|
||||
const invalidViewId = uuidv4();
|
||||
const invalidFieldMetadataId = uuidv4();
|
||||
|
||||
const inputs: CreateViewGroupInput[] = [
|
||||
{
|
||||
fieldMetadataId: invalidFieldMetadataId,
|
||||
viewId: testSetup.testViewId,
|
||||
position: 0,
|
||||
isVisible: true,
|
||||
fieldValue: 'Invalid Group A',
|
||||
},
|
||||
{
|
||||
fieldMetadataId: testSetup.firstTestFieldMetadataId,
|
||||
viewId: invalidViewId,
|
||||
position: 1,
|
||||
isVisible: true,
|
||||
fieldValue: 'Invalid Group B',
|
||||
},
|
||||
{
|
||||
fieldMetadataId: invalidFieldMetadataId,
|
||||
viewId: invalidViewId,
|
||||
position: 2,
|
||||
isVisible: true,
|
||||
fieldValue: 'Invalid Group C',
|
||||
},
|
||||
];
|
||||
|
||||
const { errors } = await createManyCoreViewGroups({
|
||||
inputs,
|
||||
expectToFail: true,
|
||||
});
|
||||
|
||||
expectOneNotInternalServerErrorSnapshot({
|
||||
errors,
|
||||
});
|
||||
});
|
||||
});
|
||||
+9
-6
@@ -1,4 +1,5 @@
|
||||
import { createOneFieldMetadata } from 'test/integration/metadata/suites/field-metadata/utils/create-one-field-metadata.util';
|
||||
import { createOneSelectFieldMetadataForIntegrationTests } from 'test/integration/metadata/suites/field-metadata/utils/create-one-select-field-metadata-for-integration-tests.util';
|
||||
import { createOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/create-one-object-metadata.util';
|
||||
import { deleteOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/delete-one-object-metadata.util';
|
||||
import { updateOneObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/update-one-object-metadata.util';
|
||||
@@ -100,6 +101,13 @@ describe('View Group Resolver - Successful Create Many Operations - v2', () => {
|
||||
`,
|
||||
});
|
||||
|
||||
const { selectFieldMetadataId } =
|
||||
await createOneSelectFieldMetadataForIntegrationTests({
|
||||
input: {
|
||||
objectMetadataId,
|
||||
},
|
||||
});
|
||||
|
||||
const {
|
||||
data: {
|
||||
createCoreView: { id: testViewId },
|
||||
@@ -109,6 +117,7 @@ describe('View Group Resolver - Successful Create Many Operations - v2', () => {
|
||||
icon: 'icon123',
|
||||
objectMetadataId,
|
||||
name: 'TestViewForGroups',
|
||||
mainGroupByFieldMetadataId: selectFieldMetadataId,
|
||||
},
|
||||
expectToFail: false,
|
||||
});
|
||||
@@ -164,21 +173,18 @@ describe('View Group Resolver - Successful Create Many Operations - v2', () => {
|
||||
it('should successfully create multiple view groups in batch', async () => {
|
||||
const inputs: CreateViewGroupInput[] = [
|
||||
{
|
||||
fieldMetadataId: testSetup.firstTestFieldMetadataId,
|
||||
viewId: testSetup.testViewId,
|
||||
position: 0,
|
||||
isVisible: true,
|
||||
fieldValue: 'Group A',
|
||||
},
|
||||
{
|
||||
fieldMetadataId: testSetup.secondTestFieldMetadataId,
|
||||
viewId: testSetup.testViewId,
|
||||
position: 1,
|
||||
isVisible: false,
|
||||
fieldValue: 'Group B',
|
||||
},
|
||||
{
|
||||
fieldMetadataId: testSetup.thirdTestFieldMetadataId,
|
||||
viewId: testSetup.testViewId,
|
||||
position: 2,
|
||||
isVisible: true,
|
||||
@@ -200,7 +206,6 @@ describe('View Group Resolver - Successful Create Many Operations - v2', () => {
|
||||
|
||||
createdViewGroups.forEach((viewGroup, index) => {
|
||||
expect(viewGroup).toMatchObject({
|
||||
fieldMetadataId: inputs[index].fieldMetadataId,
|
||||
viewId: testSetup.testViewId,
|
||||
position: inputs[index].position,
|
||||
isVisible: inputs[index].isVisible,
|
||||
@@ -214,7 +219,6 @@ describe('View Group Resolver - Successful Create Many Operations - v2', () => {
|
||||
it('should successfully create single view group using batch endpoint', async () => {
|
||||
const inputs: CreateViewGroupInput[] = [
|
||||
{
|
||||
fieldMetadataId: testSetup.firstTestFieldMetadataId,
|
||||
viewId: testSetup.testViewId,
|
||||
position: 5,
|
||||
isVisible: true,
|
||||
@@ -237,7 +241,6 @@ describe('View Group Resolver - Successful Create Many Operations - v2', () => {
|
||||
const viewGroup = createdViewGroups[0];
|
||||
|
||||
expect(viewGroup).toMatchObject({
|
||||
fieldMetadataId: testSetup.firstTestFieldMetadataId,
|
||||
viewId: testSetup.testViewId,
|
||||
position: 5,
|
||||
isVisible: true,
|
||||
|
||||
@@ -15,6 +15,8 @@ export const createTestViewWithGraphQL = async (
|
||||
icon: viewData.icon,
|
||||
type: viewData.type,
|
||||
position: viewData.position,
|
||||
mainGroupByFieldMetadataId:
|
||||
viewData.mainGroupByFieldMetadataId ?? undefined,
|
||||
isCompact: viewData.isCompact,
|
||||
openRecordIn: viewData.openRecordIn,
|
||||
visibility: viewData.visibility,
|
||||
|
||||
Reference in New Issue
Block a user