I don't think that will solve the flaky test but at least it will cleanup the error message to avoid confusion
690 lines
21 KiB
TypeScript
690 lines
21 KiB
TypeScript
import { getOperationName } from '@apollo/client/utilities';
|
|
import { graphql, http, HttpResponse } from 'msw';
|
|
|
|
import { TRACK } from '@/analytics/graphql/queries/track';
|
|
import { GET_CLIENT_CONFIG } from '@/client-config/graphql/queries/getClientConfig';
|
|
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 {
|
|
getCompaniesMock,
|
|
getCompanyDuplicateMock,
|
|
} from '~/testing/mock-data/companies';
|
|
import { mockedClientConfig } from '~/testing/mock-data/config';
|
|
import { mockedFavoritesData } from '~/testing/mock-data/favorite';
|
|
import { mockedNotes } from '~/testing/mock-data/notes';
|
|
import { getPeopleMock } from '~/testing/mock-data/people';
|
|
import { mockedRemoteTables } from '~/testing/mock-data/remote-tables';
|
|
import { mockedUserData } from '~/testing/mock-data/users';
|
|
import { mockedViewsData } from '~/testing/mock-data/views';
|
|
import { mockWorkspaceMembers } from '~/testing/mock-data/workspace-members';
|
|
|
|
import { mockedStandardObjectMetadataQueryResult } from '~/testing/mock-data/generated/mock-metadata-query-result';
|
|
import { mockedTasks } from '~/testing/mock-data/tasks';
|
|
import { mockedRemoteServers } from './mock-data/remote-servers';
|
|
import { mockedViewFieldsData } from './mock-data/view-fields';
|
|
|
|
const peopleMock = getPeopleMock();
|
|
const companiesMock = getCompaniesMock();
|
|
const duplicateCompanyMock = getCompanyDuplicateMock();
|
|
|
|
export const metadataGraphql = graphql.link(
|
|
`${REACT_APP_SERVER_BASE_URL}/metadata`,
|
|
);
|
|
|
|
export const graphqlMocks = {
|
|
handlers: [
|
|
graphql.query(getOperationName(GET_CURRENT_USER) ?? '', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
currentUser: mockedUserData,
|
|
},
|
|
});
|
|
}),
|
|
graphql.mutation(getOperationName(TRACK) ?? '', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
track: { success: 1, __typename: 'TRACK' },
|
|
},
|
|
});
|
|
}),
|
|
graphql.query(getOperationName(GET_CLIENT_CONFIG) ?? '', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
clientConfig: mockedClientConfig,
|
|
},
|
|
});
|
|
}),
|
|
metadataGraphql.query(
|
|
getOperationName(FIND_MANY_OBJECT_METADATA_ITEMS) ?? '',
|
|
() => {
|
|
return HttpResponse.json({
|
|
data: mockedStandardObjectMetadataQueryResult,
|
|
});
|
|
},
|
|
),
|
|
graphql.query('SearchPeople', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
searchPeople: {
|
|
edges: peopleMock.slice(0, 3).map((person) => ({
|
|
node: person,
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('SearchCompanies', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
searchCompanies: {
|
|
edges: companiesMock.slice(0, 3).map((company) => ({
|
|
node: company,
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('SearchOpportunities', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
searchOpportunities: {
|
|
edges: [],
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyViews', ({ variables }) => {
|
|
const objectMetadataId = variables.filter?.objectMetadataId?.eq;
|
|
const viewType = variables.filter?.type?.eq;
|
|
|
|
return HttpResponse.json({
|
|
data: {
|
|
views: {
|
|
edges: mockedViewsData
|
|
.filter(
|
|
(view) =>
|
|
view?.objectMetadataId === objectMetadataId &&
|
|
view?.type === viewType,
|
|
)
|
|
.map((view) => ({
|
|
node: view,
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
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,
|
|
})),
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyViewFields', ({ variables }) => {
|
|
const viewId = variables.filter.view.eq;
|
|
|
|
return HttpResponse.json({
|
|
data: {
|
|
viewFields: {
|
|
edges: mockedViewFieldsData
|
|
.filter((viewField) => viewField.viewId === viewId)
|
|
.map((viewField) => ({
|
|
node: viewField,
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('CombinedFindManyRecords', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
favorites: {
|
|
edges: mockedFavoritesData.map((favorite) => ({
|
|
node: favorite,
|
|
cursor: null,
|
|
})),
|
|
totalCount: mockedFavoritesData.length,
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
views: {
|
|
edges: mockedViewsData.map((view) => ({
|
|
node: {
|
|
...view,
|
|
viewFilters: {
|
|
edges: [],
|
|
totalCount: 0,
|
|
},
|
|
viewSorts: {
|
|
edges: [],
|
|
totalCount: 0,
|
|
},
|
|
viewFields: {
|
|
edges: mockedViewFieldsData
|
|
.filter((viewField) => viewField.viewId === view.id)
|
|
.map((viewField) => ({
|
|
node: viewField,
|
|
cursor: null,
|
|
})),
|
|
totalCount: mockedViewFieldsData.filter(
|
|
(viewField) => viewField.viewId === view.id,
|
|
).length,
|
|
},
|
|
},
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
totalCount: mockedViewsData.length,
|
|
},
|
|
totalCount: mockedViewsData.length,
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyCompanies', ({ variables }) => {
|
|
const mockedData = variables.limit
|
|
? companiesMock.slice(0, variables.limit)
|
|
: companiesMock;
|
|
|
|
return HttpResponse.json({
|
|
data: {
|
|
companies: {
|
|
edges: mockedData.map((company) => ({
|
|
node: {
|
|
...company,
|
|
favorites: {
|
|
edges: [],
|
|
__typename: 'FavoriteConnection',
|
|
},
|
|
attachments: {
|
|
edges: [],
|
|
__typename: 'AttachmentConnection',
|
|
},
|
|
people: {
|
|
edges: [],
|
|
__typename: 'PersonConnection',
|
|
},
|
|
opportunities: {
|
|
edges: [],
|
|
__typename: 'OpportunityConnection',
|
|
},
|
|
taskTargets: {
|
|
edges: [],
|
|
__typename: 'TaskTargetConnection',
|
|
},
|
|
noteTargets: {
|
|
edges: [],
|
|
__typename: 'NoteTargetConnection',
|
|
},
|
|
},
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindDuplicateCompany', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
companyDuplicates: [
|
|
{
|
|
edges: [
|
|
{
|
|
node: {
|
|
...duplicateCompanyMock,
|
|
favorites: {
|
|
edges: [],
|
|
__typename: 'FavoriteConnection',
|
|
},
|
|
attachments: {
|
|
edges: [],
|
|
__typename: 'AttachmentConnection',
|
|
},
|
|
people: {
|
|
edges: [],
|
|
__typename: 'PersonConnection',
|
|
},
|
|
opportunities: {
|
|
edges: [],
|
|
__typename: 'OpportunityConnection',
|
|
},
|
|
taskTargets: {
|
|
edges: [],
|
|
__typename: 'TaskTargetConnection',
|
|
},
|
|
noteTargets: {
|
|
edges: [],
|
|
__typename: 'NoteTargetConnection',
|
|
},
|
|
},
|
|
cursor: null,
|
|
},
|
|
],
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyPeople', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
people: {
|
|
edges: peopleMock.map((person) => ({
|
|
node: person,
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyNotes', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
activities: {
|
|
edges: mockedNotes.map(({ noteTargets, ...rest }) => ({
|
|
node: {
|
|
...rest,
|
|
noteTargets: {
|
|
edges: noteTargets?.map((t) => ({ node: t })),
|
|
},
|
|
attachments: {
|
|
edges: [],
|
|
},
|
|
},
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyTasks', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
tasks: {
|
|
edges: mockedTasks.map(({ taskTargets, ...rest }) => ({
|
|
node: {
|
|
...rest,
|
|
taskTargets: {
|
|
edges: taskTargets?.map((t) => ({ node: t })),
|
|
},
|
|
attachments: {
|
|
edges: [],
|
|
},
|
|
},
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyTaskTargets', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
taskTargets: {
|
|
edges: mockedTasks.flatMap((task) =>
|
|
task.taskTargets.map((target) => ({
|
|
node: target,
|
|
cursor: null,
|
|
})),
|
|
),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyFavorites', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
favorites: {
|
|
edges: mockedFavoritesData.map((favorite) => ({
|
|
node: favorite,
|
|
cursor: null,
|
|
})),
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyOpportunities', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
opportunities: {
|
|
edges: [],
|
|
pageInfo: {
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor: null,
|
|
endCursor: null,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
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,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('GetOneDatabaseConnection', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
findOneRemoteServerById: mockedRemoteServers[0],
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('GetManyRemoteTables', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
findDistantTablesWithStatus: mockedRemoteTables,
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyWorkflows', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
workflows: {
|
|
__typename: 'WorkflowConnection',
|
|
totalCount: 1,
|
|
pageInfo: {
|
|
__typename: 'PageInfo',
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor:
|
|
'eyJpZCI6IjIwMGMxNTA4LWYxMDItNGJiOS1hZjMyLWVkYTU1MjM5YWU2MSJ9',
|
|
endCursor:
|
|
'eyJpZCI6IjIwMGMxNTA4LWYxMDItNGJiOS1hZjMyLWVkYTU1MjM5YWU2MSJ9',
|
|
},
|
|
edges: [
|
|
{
|
|
__typename: 'WorkflowEdge',
|
|
cursor:
|
|
'eyJpZCI6IjIwMGMxNTA4LWYxMDItNGJiOS1hZjMyLWVkYTU1MjM5YWU2MSJ9',
|
|
node: {
|
|
__typename: 'Workflow',
|
|
id: '200c1508-f102-4bb9-af32-eda55239ae61',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindOneWorkflow', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
workflow: {
|
|
__typename: 'Workflow',
|
|
id: '200c1508-f102-4bb9-af32-eda55239ae61',
|
|
name: '1231 qqerrt',
|
|
statuses: null,
|
|
lastPublishedVersionId: '',
|
|
deletedAt: null,
|
|
updatedAt: '2024-09-19T10:10:04.505Z',
|
|
position: 0,
|
|
createdAt: '2024-09-19T10:10:04.505Z',
|
|
favorites: {
|
|
__typename: 'FavoriteConnection',
|
|
edges: [],
|
|
},
|
|
eventListeners: {
|
|
__typename: 'WorkflowEventListenerConnection',
|
|
edges: [],
|
|
},
|
|
runs: {
|
|
__typename: 'WorkflowRunConnection',
|
|
edges: [],
|
|
},
|
|
versions: {
|
|
__typename: 'WorkflowVersionConnection',
|
|
edges: [
|
|
{
|
|
__typename: 'WorkflowVersionEdge',
|
|
node: {
|
|
__typename: 'WorkflowVersion',
|
|
updatedAt: '2024-09-19T10:13:12.075Z',
|
|
steps: null,
|
|
createdAt: '2024-09-19T10:10:04.725Z',
|
|
status: 'DRAFT',
|
|
name: 'v1',
|
|
id: 'f618843a-26be-4a54-a60f-f4ce88a594f0',
|
|
trigger: {
|
|
type: 'DATABASE_EVENT',
|
|
settings: {
|
|
eventName: 'note.created',
|
|
},
|
|
},
|
|
deletedAt: null,
|
|
workflowId: '200c1508-f102-4bb9-af32-eda55239ae61',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
graphql.query('FindManyWorkflowVersions', () => {
|
|
return HttpResponse.json({
|
|
data: {
|
|
workflowVersions: {
|
|
__typename: 'WorkflowVersionConnection',
|
|
totalCount: 1,
|
|
pageInfo: {
|
|
__typename: 'PageInfo',
|
|
hasNextPage: false,
|
|
hasPreviousPage: false,
|
|
startCursor:
|
|
'eyJjcmVhdGVkQXQiOiIyMDI0LTA5LTE5VDEwOjEwOjA0LjcyNVoiLCJpZCI6ImY2MTg4NDNhLTI2YmUtNGE1NC1hNjBmLWY0Y2U4OGE1OTRmMCJ9',
|
|
endCursor:
|
|
'eyJjcmVhdGVkQXQiOiIyMDI0LTA5LTE5VDEwOjEwOjA0LjcyNVoiLCJpZCI6ImY2MTg4NDNhLTI2YmUtNGE1NC1hNjBmLWY0Y2U4OGE1OTRmMCJ9',
|
|
},
|
|
edges: [
|
|
{
|
|
__typename: 'WorkflowVersionEdge',
|
|
cursor:
|
|
'eyJjcmVhdGVkQXQiOiIyMDI0LTA5LTE5VDEwOjEwOjA0LjcyNVoiLCJpZCI6ImY2MTg4NDNhLTI2YmUtNGE1NC1hNjBmLWY0Y2U4OGE1OTRmMCJ9',
|
|
node: {
|
|
__typename: 'WorkflowVersion',
|
|
updatedAt: '2024-09-19T10:13:12.075Z',
|
|
steps: null,
|
|
createdAt: '2024-09-19T10:10:04.725Z',
|
|
status: 'DRAFT',
|
|
name: 'v1',
|
|
id: 'f618843a-26be-4a54-a60f-f4ce88a594f0',
|
|
trigger: {
|
|
type: 'DATABASE_EVENT',
|
|
settings: {
|
|
eventName: 'note.created',
|
|
},
|
|
},
|
|
deletedAt: null,
|
|
workflowId: '200c1508-f102-4bb9-af32-eda55239ae61',
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
});
|
|
}),
|
|
http.get('https://chat-assets.frontapp.com/v1/chat.bundle.js', () => {
|
|
return HttpResponse.text(
|
|
`
|
|
window.FrontChat = () => {};
|
|
console.log("This is a mocked script response.");
|
|
// Additional JavaScript code here
|
|
`,
|
|
{ status: 200 },
|
|
);
|
|
}),
|
|
],
|
|
};
|