Files
twenty/packages/twenty-server/test/integration/graphql/utils/view-graphql.util.ts
T
Paul RastoinandGitHub 3462a2e288 ViewGroup and ViewFilters side effect in v2 (#15096)
# Introduction

### Summary
Implements side effect handling for `ViewGroup` and `ViewFilters` when
field metadata is updated in the v2 architecture. This ensures that
view-related records are properly maintained when enum field options are
modified, deleted, or created.

### Side effects
- **Side Effect System**: Added side effect handling for field metadata
updates that manages related view groups and view filters
- **Enum Field Updates**: When enum field options are modified, the
system now:
- **View Groups**: Creates new groups for added options, updates
existing groups for modified options, and deletes groups for removed
options
- **View Filters**: Updates filter values to reflect option changes and
removes filters that reference deleted options

### Enum runner fix
Update now works for both atomic enum and array enum ( multi select for
instance )

### Compute flat entity maps from to
Standardized this method usage across v2 services
Next step is to require dependencies dynamically

## Conclusion
closes https://github.com/twentyhq/core-team-issues/issues/1649
2025-10-17 17:09:26 +02:00

37 lines
1.1 KiB
TypeScript

import { createOneCoreView } from 'test/integration/metadata/suites/view/utils/create-one-core-view.util';
import { type CreateViewInput } from 'src/engine/metadata-modules/view/dtos/inputs/create-view.input';
import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity';
import { createViewData } from './view-data-factory.util';
export const createTestViewWithGraphQL = async (
overrides: Partial<ViewEntity> = {},
): Promise<ViewEntity> => {
const viewData = createViewData(overrides);
const input: CreateViewInput = {
name: viewData.name,
objectMetadataId: viewData.objectMetadataId as string,
icon: viewData.icon,
type: viewData.type,
position: viewData.position,
isCompact: viewData.isCompact,
openRecordIn: viewData.openRecordIn,
};
const { data, errors } = await createOneCoreView({
input,
expectToFail: false,
});
if (errors) {
throw new Error(`Failed to create test view: ${JSON.stringify(errors)}`);
}
if (!data) {
throw new Error('No data returned from createTestViewWithGraphQL');
}
return data.createCoreView;
};