Fix all broken CIs (#7439)

Fix all the broken CIs :p

This includes an ongoing effort to simplify test maintenance by having 1
unique source of truth about metadata and data mocks (that will later be
generated from a unique source of seeds: dev = demo = test)

Regressions:
- Unit line coverage: 60 > 55
- Storybook Pages branch coverage: 40 > 35
We will need to write tests to increase those coverage
- RelationFieldDisplay perf: 0.2ms to 0.22ms > We might have a
regression here
- Removed perf story about RawJSON > We will need to re-add it
This commit is contained in:
Charles Bochet
2024-10-05 00:22:38 +02:00
committed by Charles Bochet
parent bd305c8432
commit d8c4af9279
148 changed files with 4357 additions and 2536 deletions

View File

@ -1,48 +0,0 @@
export const PERSON_FRAGMENT = `
__typename
name {
firstName
lastName
}
linkedinLink {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
deletedAt
createdAt
updatedAt
jobTitle
intro
workPrefereance
performanceRating
xLink {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
city
companyId
phones {
primaryPhoneNumber
primaryPhoneCountryCode
additionalPhones
}
createdBy {
source
workspaceMemberId
name
}
id
position
emails {
primaryEmail
additionalEmails
}
avatarUrl
whatsapp {
primaryPhoneNumber
primaryPhoneCountryCode
additionalPhones
}
`

View File

@ -0,0 +1,327 @@
export const PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS = `
__typename
avatarUrl
city
companyId
createdAt
createdBy {
source
workspaceMemberId
name
}
deletedAt
emails {
primaryEmail
additionalEmails
}
id
intro
jobTitle
linkedinLink{
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
name {
firstName
lastName
}
performanceRating
phones {
primaryPhoneNumber
primaryPhoneCountryCode
additionalPhones
}
position
updatedAt
whatsapp {
primaryPhoneNumber
primaryPhoneCountryCode
additionalPhones
}
workPreference
xLink {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
`
export const PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS = `
__typename
activityTargets {
edges {
node {
__typename
activityId
companyId
createdAt
deletedAt
id
opportunityId
personId
rocketId
updatedAt
}
}
}
attachments {
edges {
node {
__typename
activityId
authorId
companyId
createdAt
deletedAt
fullPath
id
name
noteId
opportunityId
personId
rocketId
taskId
type
updatedAt
}
}
}
avatarUrl
calendarEventParticipants {
edges {
node {
__typename
calendarEventId
createdAt
deletedAt
displayName
handle
id
isOrganizer
personId
responseStatus
updatedAt
workspaceMemberId
}
}
}
city
company {
__typename
accountOwnerId
address {
addressStreet1
addressStreet2
addressCity
addressState
addressCountry
addressPostcode
addressLat
addressLng
}
annualRecurringRevenue {
amountMicros
currencyCode
}
createdAt
createdBy {
source
workspaceMemberId
name
}
deletedAt
domainName {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
employees
id
idealCustomerProfile
introVideo {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
linkedinLink {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
name
position
tagline
updatedAt
visaSponsorship
workPolicy
xLink {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
}
companyId
createdAt
createdBy {
source
workspaceMemberId
name
}
deletedAt
emails {
primaryEmail
additionalEmails
}
favorites {
edges {
node {
__typename
companyId
createdAt
deletedAt
id
noteId
opportunityId
personId
position
rocketId
taskId
updatedAt
viewId
workflowId
workspaceMemberId
}
}
}
id
intro
jobTitle
linkedinLink {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
messageParticipants {
edges {
node {
__typename
createdAt
deletedAt
displayName
handle
id
messageId
personId
role
updatedAt
workspaceMemberId
}
}
}
name {
firstName
lastName
}
noteTargets {
edges {
node {
__typename
companyId
createdAt
deletedAt
id
noteId
opportunityId
personId
rocketId
updatedAt
}
}
}
performanceRating
phones {
primaryPhoneNumber
primaryPhoneCountryCode
additionalPhones
}
pointOfContactForOpportunities {
edges {
node {
__typename
amount {
amountMicros
currencyCode
}
closeDate
companyId
createdAt
createdBy {
source
workspaceMemberId
name
}
deletedAt
id
name
pointOfContactId
position
stage
updatedAt
}
}
}
position
taskTargets {
edges {
node {
__typename
companyId
createdAt
deletedAt
id
opportunityId
personId
rocketId
taskId
updatedAt
}
}
}
timelineActivities {
edges {
node {
__typename
companyId
createdAt
deletedAt
happensAt
id
linkedObjectMetadataId
linkedRecordCachedName
linkedRecordId
name
noteId
opportunityId
personId
properties
rocketId
taskId
updatedAt
workspaceMemberId
}
}
}
updatedAt
whatsapp {
primaryPhoneNumber
primaryPhoneCountryCode
additionalPhones
}
workPreference
xLink {
primaryLinkUrl
primaryLinkLabel
secondaryLinks
}
`

View File

@ -1,12 +1,12 @@
import { gql } from '@apollo/client';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { Person } from '@/people/types/Person';
export const query = gql`
mutation CreatePeople($data: [PersonCreateInput!]!, $upsert: Boolean) {
createPeople(data: $data, upsert: $upsert) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS}
}
}
`;

View File

@ -1,10 +1,10 @@
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { gql } from '@apollo/client';
export const query = gql`
mutation CreateOnePerson($input: PersonCreateInput!) {
createPerson(data: $input) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS}
}
}
`;

View File

@ -3,6 +3,8 @@ import { gql } from '@apollo/client';
export const query = gql`
mutation DeleteOnePerson($idToDelete: ID!) {
deletePerson(id: $idToDelete) {
__typename
deletedAt
id
}
}

View File

@ -1,4 +1,4 @@
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { gql } from '@apollo/client';
import { getPeopleMock } from '~/testing/mock-data/people';
@ -9,7 +9,7 @@ export const query = gql`
personDuplicates(ids: $ids) {
edges {
node {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS}
}
cursor
}

View File

@ -1,12 +1,12 @@
import { gql } from '@apollo/client';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { responseData as person } from './useUpdateOneRecord';
export const query = gql`
query FindOnePerson($objectRecordId: ID!) {
person(filter: { id: { eq: $objectRecordId } }) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS}
}
}
`;

View File

@ -1,10 +1,10 @@
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { gql } from '@apollo/client';
export const query = gql`
mutation UpdateOnePerson($idToUpdate: ID!, $input: PersonUpdateInput!) {
updatePerson(id: $idToUpdate, data: $input) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS}
}
}
`;

View File

@ -1,8 +1,5 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { mocked } from '@storybook/test';
import { act, renderHook } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import { v4 } from 'uuid';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
@ -12,6 +9,7 @@ import {
variables,
} from '@/object-record/hooks/__mocks__/useCreateManyRecords';
import { useCreateManyRecords } from '@/object-record/hooks/useCreateManyRecords';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
jest.mock('uuid', () => ({
v4: jest.fn(),
@ -37,13 +35,9 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
describe('useCreateManyRecords', () => {
it('works as expected', async () => {

View File

@ -1,18 +1,22 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { useCreateManyRecordsMutation } from '@/object-record/hooks/useCreateManyRecordsMutation';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const expectedQueryTemplate = `
mutation CreatePeople($data: [PersonCreateInput!]!, $upsert: Boolean) {
createPeople(data: $data, upsert: $upsert) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS}
}
}
`.replace(/\s/g, '');
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useCreateManyRecordsMutation', () => {
it('should return a valid createManyRecordsMutation', () => {
const objectNameSingular = 'person';
@ -23,7 +27,7 @@ describe('useCreateManyRecordsMutation', () => {
objectNameSingular,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -1,7 +1,4 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import {
@ -9,6 +6,7 @@ import {
responseData,
} from '@/object-record/hooks/__mocks__/useCreateOneRecord';
import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const personId = 'a7286b9a-c039-4a89-9567-2dfa7953cda9';
const input = { name: { firstName: 'John', lastName: 'Doe' } };
@ -31,13 +29,9 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
describe('useCreateOneRecord', () => {
it('works as expected', async () => {

View File

@ -1,18 +1,22 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { useCreateOneRecordMutation } from '@/object-record/hooks/useCreateOneRecordMutation';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const expectedQueryTemplate = `
mutation CreateOnePerson($input: PersonCreateInput!) {
createPerson(data: $input) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ONE_RELATIONS}
}
}
`.replace(/\s/g, '');
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useCreateOneRecordMutation', () => {
it('should return a valid createOneRecordMutation', () => {
const objectNameSingular = 'person';
@ -23,7 +27,7 @@ describe('useCreateOneRecordMutation', () => {
objectNameSingular,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -1,7 +1,4 @@
import { MockedProvider } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
import { ReactNode } from 'react';
import { RecoilRoot } from 'recoil';
import {
query,
@ -9,6 +6,7 @@ import {
variables,
} from '@/object-record/hooks/__mocks__/useDeleteManyRecords';
import { useDeleteManyRecords } from '@/object-record/hooks/useDeleteManyRecords';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const people = [
'a7286b9a-c039-4a89-9567-2dfa7953cda9',
@ -29,13 +27,9 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
describe('useDeleteManyRecords', () => {
it('works as expected', async () => {

View File

@ -1,8 +1,8 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { useDeleteManyRecordsMutation } from '@/object-record/hooks/useDeleteManyRecordsMutation';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const expectedQueryTemplate = `
mutation DeleteManyPeople($filter: PersonFilterInput!) {
@ -12,6 +12,10 @@ const expectedQueryTemplate = `
}
`.replace(/\s/g, '');
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useDeleteManyRecordsMutation', () => {
it('should return a valid deleteManyRecordsMutation', () => {
const objectNameSingular = 'person';
@ -22,7 +26,7 @@ describe('useDeleteManyRecordsMutation', () => {
objectNameSingular,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -1,7 +1,5 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import { renderHook } from '@testing-library/react';
import { act } from 'react';
import {
query,
@ -9,6 +7,7 @@ import {
variables,
} from '@/object-record/hooks/__mocks__/useDeleteOneRecord';
import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const personId = 'a7286b9a-c039-4a89-9567-2dfa7953cda9';
@ -26,13 +25,9 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
describe('useDeleteOneRecord', () => {
it('works as expected', async () => {

View File

@ -1,17 +1,23 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { useDeleteOneRecordMutation } from '@/object-record/hooks/useDeleteOneRecordMutation';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const expectedQueryTemplate = `
mutation DeleteOnePerson($idToDelete: ID!) {
deletePerson(id: $idToDelete) {
__typename
deletedAt
id
}
}
`.replace(/\s/g, '');
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useDeleteOneRecordMutation', () => {
it('should return a valid deleteOneRecordMutation', () => {
const objectNameSingular = 'person';
@ -22,7 +28,7 @@ describe('useDeleteOneRecordMutation', () => {
objectNameSingular,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -1,7 +1,6 @@
import { MockedProvider } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
import { ReactNode, useEffect } from 'react';
import { RecoilRoot, useRecoilState } from 'recoil';
import { useEffect } from 'react';
import { useRecoilState } from 'recoil';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import {
@ -16,8 +15,8 @@ import {
variablesThirdRequest,
} from '@/object-record/hooks/__mocks__/useFetchAllRecordIds';
import { useFetchAllRecordIds } from '@/object-record/hooks/useFetchAllRecordIds';
import { SnackBarManagerScopeInternalContext } from '@/ui/feedback/snack-bar-manager/scopes/scope-internal-context/SnackBarManagerScopeInternalContext';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/objectMetadataItems';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
const mocks = [
{
@ -52,22 +51,12 @@ const mocks = [
},
];
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
describe('useFetchAllRecordIds', () => {
it('fetches all record ids with fetch more synchronous loop', async () => {
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<SnackBarManagerScopeInternalContext.Provider
value={{
scopeId: 'snack-bar-manager',
}}
>
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</SnackBarManagerScopeInternalContext.Provider>
</RecoilRoot>
);
const { result } = renderHook(
() => {
const [, setObjectMetadataItems] = useRecoilState(

View File

@ -1,11 +1,8 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { renderHook, waitFor } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import { useFindDuplicateRecords } from '@/object-record/hooks/useFindDuplicateRecords';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import {
query,
responseData,
@ -24,15 +21,9 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</SnackBarProviderScope>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
describe('useFindDuplicateRecords', () => {
it('should fetch duplicate records and return the correct data', async () => {

View File

@ -1,16 +1,16 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { useFindDuplicateRecordsQuery } from '@/object-record/hooks/useFindDuplicatesRecordsQuery';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const expectedQueryTemplate = `
query FindDuplicatePerson($ids: [ID!]!) {
personDuplicates(ids: $ids) {
edges {
node {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS}
}
cursor
}
@ -23,6 +23,10 @@ const expectedQueryTemplate = `
}
`.replace(/\s/g, '');
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useFindDuplicateRecordsQuery', () => {
it('should return a valid findDuplicateRecordsQuery', () => {
const objectNameSingular = 'person';
@ -33,7 +37,7 @@ describe('useFindDuplicateRecordsQuery', () => {
objectNameSingular,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -1,7 +1,5 @@
import { MockedProvider } from '@apollo/client/testing';
import { renderHook } from '@testing-library/react';
import { ReactNode } from 'react';
import { RecoilRoot, useSetRecoilState } from 'recoil';
import { useSetRecoilState } from 'recoil';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
@ -11,8 +9,8 @@ import {
variables,
} from '@/object-record/hooks/__mocks__/useFindManyRecords';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/objectMetadataItems';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
const mocks = [
{
@ -28,29 +26,10 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</SnackBarProviderScope>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
describe('useFindManyRecords', () => {
it('should skip fetch if currentWorkspaceMember is undefined', async () => {
const { result } = renderHook(
() => useFindManyRecords({ objectNameSingular: 'person' }),
{
wrapper: Wrapper,
},
);
expect(result.current.loading).toBe(false);
expect(result.current.error).toBeUndefined();
});
it('should work as expected', async () => {
const onCompleted = jest.fn();

View File

@ -1,16 +1,16 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const expectedQueryTemplate = `
query FindManyPeople($filter: PersonFilterInput, $orderBy: [PersonOrderByInput], $lastCursor: String, $limit: Int) {
people(filter: $filter, orderBy: $orderBy, first: $limit, after: $lastCursor) {
edges {
node {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS}
}
cursor
}
@ -25,6 +25,10 @@ const expectedQueryTemplate = `
}
`.replace(/\s/g, '');
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useFindManyRecordsQuery', () => {
it('should return a valid findManyRecordsQuery', () => {
const objectNameSingular = 'person';
@ -37,7 +41,7 @@ describe('useFindManyRecordsQuery', () => {
computeReferences,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -1,15 +1,12 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { renderHook, waitFor } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import {
query,
responseData,
variables,
} from '@/object-record/hooks/__mocks__/useFindOneRecord';
import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { generateEmptyJestRecordNode } from '~/testing/jest/generateEmptyJestRecordNode';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const mocks = [
{
@ -19,21 +16,19 @@ const mocks = [
},
result: jest.fn(() => ({
data: {
person: responseData,
person: generateEmptyJestRecordNode({
objectNameSingular: 'person',
input: { id: '6205681e-7c11-40b4-9e32-f523dbe54590' },
withDepthOneRelation: true,
}),
},
})),
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</SnackBarProviderScope>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
const objectRecordId = '6205681e-7c11-40b4-9e32-f523dbe54590';

View File

@ -1,18 +1,22 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { useFindOneRecordQuery } from '@/object-record/hooks/useFindOneRecordQuery';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const expectedQueryTemplate = `
query FindOnePerson($objectRecordId: ID!) {
person(filter: { id: { eq: $objectRecordId } }) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS}
}
}
`.replace(/\s/g, '');
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useFindOneRecordQuery', () => {
it('should return a valid findOneRecordQuery', () => {
const objectNameSingular = 'person';
@ -23,7 +27,7 @@ describe('useFindOneRecordQuery', () => {
objectNameSingular,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -5,7 +5,7 @@ import { RecoilRoot } from 'recoil';
import { useGenerateCombinedFindManyRecordsQuery } from '@/object-record/multiple-objects/hooks/useGenerateCombinedFindManyRecordsQuery';
import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/objectMetadataItems';
import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>

View File

@ -1,7 +1,4 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { act, renderHook, waitFor } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import {
query,
@ -9,7 +6,7 @@ import {
variables,
} from '@/object-record/hooks/__mocks__/useFindOneRecord';
import { useLazyFindOneRecord } from '@/object-record/hooks/useLazyFindOneRecord';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const mocks = [
{
@ -25,15 +22,9 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</SnackBarProviderScope>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
const objectRecordId = '6205681e-7c11-40b4-9e32-f523dbe54590';

View File

@ -1,13 +1,12 @@
import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
import { expect } from '@storybook/test';
import { renderHook } from '@testing-library/react';
import { RecoilRoot } from 'recoil';
import { ReactNode } from 'react';
import { mocks } from '@/auth/hooks/__mocks__/useAuth';
import { useLoadRecordIndexTable } from '@/object-record/record-index/hooks/useLoadRecordIndexTable';
import { RecordTableScope } from '@/object-record/record-table/scopes/RecordTableScope';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { getScopeIdFromComponentId } from '@/ui/utilities/recoil-scope/utils/getScopeIdFromComponentId';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const recordTableId = 'people';
const objectNameSingular = 'person';
@ -17,20 +16,22 @@ const ObjectNamePluralSetter = ({ children }: { children: ReactNode }) => {
return <>{children}</>;
};
const HookMockWrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
const Wrapper = ({ children }: { children: ReactNode }) => {
return (
<RecoilRoot>
<HookMockWrapper>
<ObjectNamePluralSetter>
<RecordTableScope
recordTableScopeId={getScopeIdFromComponentId(recordTableId)}
onColumnsChange={onColumnsChange}
>
<SnackBarProviderScope snackBarManagerScopeId="snack-bar-manager">
<MockedProvider addTypename={false}>{children}</MockedProvider>
</SnackBarProviderScope>
{children}
</RecordTableScope>
</ObjectNamePluralSetter>
</RecoilRoot>
</HookMockWrapper>
);
};

View File

@ -1,7 +1,4 @@
import { MockedProvider } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
import { ReactNode } from 'react';
import { RecoilRoot } from 'recoil';
import {
query,
@ -9,6 +6,7 @@ import {
variables,
} from '@/object-record/hooks/__mocks__/useUpdateOneRecord';
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const person = { id: '36abbb63-34ed-4a16-89f5-f549ac55d0f9' };
const update = {
@ -37,13 +35,9 @@ const mocks = [
},
];
const Wrapper = ({ children }: { children: ReactNode }) => (
<RecoilRoot>
<MockedProvider mocks={mocks} addTypename={false}>
{children}
</MockedProvider>
</RecoilRoot>
);
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: mocks,
});
const idToUpdate = '36abbb63-34ed-4a16-89f5-f549ac55d0f9';

View File

@ -1,18 +1,22 @@
import { renderHook } from '@testing-library/react';
import { print } from 'graphql';
import { RecoilRoot } from 'recoil';
import { PERSON_FRAGMENT } from '@/object-record/hooks/__mocks__/personFragment';
import { PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS } from '@/object-record/hooks/__mocks__/personFragments';
import { useUpdateOneRecordMutation } from '@/object-record/hooks/useUpdateOneRecordMutation';
import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { normalizeGQLQuery } from '~/utils/normalizeGQLQuery';
const expectedQueryTemplate = `
mutation UpdateOnePerson($idToUpdate: ID!, $input: PersonUpdateInput!) {
updatePerson(id: $idToUpdate, data: $input) {
${PERSON_FRAGMENT}
${PERSON_FRAGMENT_WITH_DEPTH_ZERO_RELATIONS}
}
}`;
const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
describe('useUpdateOneRecordMutation', () => {
it('should return a valid createManyRecordsMutation', () => {
const objectNameSingular = 'person';
@ -23,7 +27,7 @@ describe('useUpdateOneRecordMutation', () => {
objectNameSingular,
}),
{
wrapper: RecoilRoot,
wrapper: Wrapper,
},
);

View File

@ -1,5 +1,5 @@
import { useMemo } from 'react';
import { useQuery } from '@apollo/client';
import { useMemo } from 'react';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMetadataItemIdentifier';

View File

@ -1,7 +1,5 @@
import { useQuery, WatchQueryFetchPolicy } from '@apollo/client';
import { useRecoilValue } from 'recoil';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMetadataItemIdentifier';
import { RecordGqlOperationFindManyResult } from '@/object-record/graphql/types/RecordGqlOperationFindManyResult';
@ -36,7 +34,6 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
onCompleted,
cursorFilter,
}: UseFindManyRecordsParams<T>) => {
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular,
});
@ -66,7 +63,7 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
const { data, loading, error, fetchMore } =
useQuery<RecordGqlOperationFindManyResult>(findManyRecordsQuery, {
skip: skip || !objectMetadataItem || !currentWorkspaceMember,
skip: skip || !objectMetadataItem,
variables: {
filter,
orderBy,