Fix more tests 2 (#18293)

## Summary
- Migrate more hand-written test mocks to auto-generated data from a
real Twenty instance
- Add generators for views, billing plans, API keys; extend record
generator for workspace members, favorites, connected accounts, calendar
events
- Remove 9 hand-written mock files replaced by generated equivalents
- Update 16 test/story files to use generated data
- Fix WorkflowEditActionEmailBase story assertion to match configured
recipient email

## Test plan
- [x] Lint, typecheck, unit tests pass
- [ ] Storybook tests pass in CI
This commit is contained in:
Charles Bochet
2026-02-27 23:11:56 +01:00
committed by GitHub
parent cfad24da48
commit 9342b16aad
37 changed files with 30101 additions and 3139 deletions
+44 -143
View File
@@ -6,16 +6,15 @@ import { TRACK_ANALYTICS } from '@/analytics/graphql/queries/track';
import { FIND_MANY_OBJECT_METADATA_ITEMS } from '@/object-metadata/graphql/queries';
import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser';
import { REACT_APP_SERVER_BASE_URL } from '~/config';
import { mockedApiKeys } from '~/testing/mock-data/api-keys';
import { mockedClientConfig } from '~/testing/mock-data/config';
import { mockedFavoritesData } from '~/testing/mock-data/favorite';
import { mockedFavoriteRecords } from '~/testing/mock-data/generated/data/favorites/mock-favorites-data';
import { mockedFavoriteFoldersData } from '~/testing/mock-data/favorite-folders';
import { mockedNoteRecords } from '~/testing/mock-data/generated/data/notes/mock-notes-data';
import { mockedPersonRecords } from '~/testing/mock-data/generated/data/people/mock-people-data';
import { mockedPublicWorkspaceDataBySubdomain } from '~/testing/mock-data/publicWorkspaceDataBySubdomain';
import { mockedUserData } from '~/testing/mock-data/users';
import { mockedViewsData } from '~/testing/mock-data/views';
import { mockWorkspaceMembers } from '~/testing/mock-data/workspace-members';
import { mockedCoreViews } from '~/testing/mock-data/generated/metadata/views/mock-views-data';
import { mockedWorkspaceMemberRecords } from '~/testing/mock-data/generated/data/workspaceMembers/mock-workspaceMembers-data';
import { GET_PUBLIC_WORKSPACE_DATA_BY_DOMAIN } from '@/auth/graphql/queries/getPublicWorkspaceDataByDomain';
import { LIST_PLANS } from '@/billing/graphql/queries/listPlans';
@@ -38,7 +37,7 @@ import { getConnectionTypename } from '@/object-record/cache/utils/getConnection
import { getEdgeTypename } from '@/object-record/cache/utils/getEdgeTypename';
import { getEmptyPageInfo } from '@/object-record/cache/utils/getEmptyPageInfo';
import { getRecordFromRecordNode } from '@/object-record/cache/utils/getRecordFromRecordNode';
import { mockedViewFieldsData } from './mock-data/view-fields';
import { mockedApiKeys } from '~/testing/mock-data/generated/metadata/api-keys/mock-api-keys-data';
const peopleMock = [...mockedPersonRecords];
const companiesMock = [...mockedCompanyRecords];
@@ -289,34 +288,29 @@ export const graphqlMocks = {
const objectMetadataId = variables.filter?.objectMetadataId?.eq;
const viewType = variables.filter?.type?.eq;
const filtered = mockedCoreViews.filter(
(view) =>
(isDefined(objectMetadataId)
? view?.objectMetadataId === objectMetadataId
: true) && (isDefined(viewType) ? view?.type === viewType : true),
);
return HttpResponse.json({
data: {
views: {
edges: mockedViewsData
.filter(
(view) =>
(isDefined(objectMetadataId)
? view?.objectMetadataId === objectMetadataId
: true) &&
(isDefined(viewType) ? view?.type === viewType : true),
)
.map((view) => ({
node: {
...view,
viewFields: {
edges: mockedViewFieldsData
.filter((viewField) => viewField.viewId === view.id)
.map((viewField) => ({
node: viewField,
cursor: null,
})),
totalCount: mockedViewFieldsData.filter(
(viewField) => viewField.viewId === view.id,
).length,
},
edges: filtered.map((view) => ({
node: {
...view,
viewFields: {
edges: view.viewFields.map((viewField) => ({
node: viewField,
cursor: null,
})),
totalCount: view.viewFields.length,
},
cursor: null,
})),
},
cursor: null,
})),
pageInfo: {
hasNextPage: false,
hasPreviousPage: false,
@@ -330,61 +324,26 @@ export const graphqlMocks = {
graphql.query('SearchWorkspaceMembers', () => {
return HttpResponse.json({
data: {
searchWorkspaceMembers: {
edges: mockWorkspaceMembers.map((member) => ({
node: {
...member,
messageParticipants: {
edges: [],
__typename: 'MessageParticipantConnection',
},
authoredAttachments: {
edges: [],
__typename: 'AttachmentConnection',
},
authoredComments: {
edges: [],
__typename: 'CommentConnection',
},
accountOwnerForCompanies: {
edges: [],
__typename: 'CompanyConnection',
},
authoredActivities: {
edges: [],
__typename: 'ActivityConnection',
},
favorites: {
edges: [],
__typename: 'FavoriteConnection',
},
connectedAccounts: {
edges: [],
__typename: 'ConnectedAccountConnection',
},
assignedActivities: {
edges: [],
__typename: 'ActivityConnection',
},
},
cursor: null,
})),
},
searchWorkspaceMembers: wrapRecordsAsConnection(
'workspaceMember',
mockedWorkspaceMemberRecords as Record<string, unknown>[],
),
},
});
}),
graphql.query('FindManyViewFields', ({ variables }) => {
const viewId = variables.filter.view.eq;
const matchingView = mockedCoreViews.find((view) => view.id === viewId);
const viewFields = matchingView?.viewFields ?? [];
return HttpResponse.json({
data: {
viewFields: {
edges: mockedViewFieldsData
.filter((viewField) => viewField.viewId === viewId)
.map((viewField) => ({
node: viewField,
cursor: null,
})),
edges: viewFields.map((viewField) => ({
node: viewField,
cursor: null,
})),
pageInfo: {
hasNextPage: false,
hasPreviousPage: false,
@@ -472,16 +431,10 @@ export const graphqlMocks = {
return HttpResponse.json({
data: {
favorites: {
edges: mockedFavoritesData.map((favorite) => ({
node: favorite,
cursor: null,
})),
pageInfo: {
hasNextPage: false,
hasPreviousPage: false,
startCursor: null,
endCursor: null,
},
...wrapRecordsAsConnection(
'favorite',
mockedFavoriteRecords as Record<string, unknown>[],
),
},
},
});
@@ -504,52 +457,10 @@ export const graphqlMocks = {
graphql.query('FindManyWorkspaceMembers', () => {
return HttpResponse.json({
data: {
workspaceMembers: {
edges: mockWorkspaceMembers.map((member) => ({
node: {
...member,
messageParticipants: {
edges: [],
__typename: 'MessageParticipantConnection',
},
authoredAttachments: {
edges: [],
__typename: 'AttachmentConnection',
},
authoredComments: {
edges: [],
__typename: 'CommentConnection',
},
accountOwnerForCompanies: {
edges: [],
__typename: 'CompanyConnection',
},
authoredActivities: {
edges: [],
__typename: 'ActivityConnection',
},
favorites: {
edges: [],
__typename: 'FavoriteConnection',
},
connectedAccounts: {
edges: [],
__typename: 'ConnectedAccountConnection',
},
assignedActivities: {
edges: [],
__typename: 'ActivityConnection',
},
},
cursor: null,
})),
pageInfo: {
hasNextPage: false,
hasPreviousPage: false,
startCursor: null,
endCursor: null,
},
},
workspaceMembers: wrapRecordsAsConnection(
'workspaceMember',
mockedWorkspaceMemberRecords as Record<string, unknown>[],
),
},
});
}),
@@ -612,11 +523,7 @@ export const graphqlMocks = {
metadataGraphql.query('GetApiKeys', () => {
return HttpResponse.json({
data: {
apiKeys: mockedApiKeys.map((apiKey) => ({
__typename: 'ApiKey',
...apiKey,
revokedAt: null,
})),
apiKeys: mockedApiKeys,
},
});
}),
@@ -626,13 +533,7 @@ export const graphqlMocks = {
return HttpResponse.json({
data: {
apiKey: apiKey
? {
__typename: 'ApiKey',
...apiKey,
revokedAt: null,
}
: null,
apiKey: apiKey ?? null,
},
});
}),