Fix storybook tests (#6594)

As title
This commit is contained in:
Thomas Trompette
2024-08-09 19:39:16 +02:00
committed by GitHub
parent 13d05d8c74
commit 39512a779e
9 changed files with 44 additions and 74 deletions

View File

@ -1,4 +1,3 @@
import { expect } from '@storybook/jest';
import { Meta, StoryObj } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import { within } from '@storybook/test'; import { within } from '@storybook/test';
@ -7,7 +6,6 @@ import {
PageDecorator, PageDecorator,
PageDecoratorArgs, PageDecoratorArgs,
} from '~/testing/decorators/PageDecorator'; } from '~/testing/decorators/PageDecorator';
import { PrefetchLoadingDecorator } from '~/testing/decorators/PrefetchLoadingDecorator';
import { graphqlMocks } from '~/testing/graphqlMocks'; import { graphqlMocks } from '~/testing/graphqlMocks';
const meta: Meta<PageDecoratorArgs> = { const meta: Meta<PageDecoratorArgs> = {
@ -31,17 +29,15 @@ export type Story = StoryObj<typeof RecordIndexPage>;
export const Default: Story = { export const Default: Story = {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
decorators: [PrefetchLoadingDecorator, PageDecorator], decorators: [PageDecorator],
play: async ({ canvasElement }) => { play: async ({ canvasElement }) => {
const canvas = within(canvasElement); const canvas = within(canvasElement);
await canvas.findByText('Search'); await canvas.findByText('Search');
await canvas.findByText('Settings'); await canvas.findByText('Settings');
await canvas.findByText('Tasks'); await canvas.findByText('Tasks');
await canvas.findByText('People');
expect(canvas.queryByText('People')).toBeNull(); await canvas.findByText('Opportunities');
expect(canvas.queryByText('Opportunities')).toBeNull(); await canvas.findByText('My Customs');
expect(canvas.queryByText('Listings')).toBeNull();
expect(canvas.queryByText('My Customs')).toBeNull();
}, },
}; };

View File

@ -1,7 +1,7 @@
import { useEffect } from 'react';
import { action } from '@storybook/addon-actions'; import { action } from '@storybook/addon-actions';
import { Meta, StoryObj } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import { expect, userEvent, within } from '@storybook/test'; import { expect, userEvent, within } from '@storybook/test';
import { useEffect } from 'react';
import { useSetRecoilState } from 'recoil'; import { useSetRecoilState } from 'recoil';
import { IconCheckbox, IconNotes } from 'twenty-ui'; import { IconCheckbox, IconNotes } from 'twenty-ui';
@ -14,7 +14,6 @@ import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadat
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator'; import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
import { graphqlMocks } from '~/testing/graphqlMocks'; import { graphqlMocks } from '~/testing/graphqlMocks';
import { getCompaniesMock } from '~/testing/mock-data/companies'; import { getCompaniesMock } from '~/testing/mock-data/companies';
import { getPeopleMock } from '~/testing/mock-data/people';
import { import {
mockDefaultWorkspace, mockDefaultWorkspace,
mockedWorkspaceMemberData, mockedWorkspaceMemberData,
@ -23,7 +22,6 @@ import { sleep } from '~/utils/sleep';
import { CommandMenu } from '../CommandMenu'; import { CommandMenu } from '../CommandMenu';
const peopleMock = getPeopleMock();
const companiesMock = getCompaniesMock(); const companiesMock = getCompaniesMock();
const openTimeout = 50; const openTimeout = 50;
@ -99,13 +97,8 @@ export const MatchingPersonCompanyActivityCreateNavigate: Story = {
const searchInput = await canvas.findByPlaceholderText('Search'); const searchInput = await canvas.findByPlaceholderText('Search');
await sleep(openTimeout); await sleep(openTimeout);
await userEvent.type(searchInput, 'n'); await userEvent.type(searchInput, 'n');
expect( expect(await canvas.findByText('Linkedin')).toBeInTheDocument();
await canvas.findByText(
peopleMock[0].name.firstName + ' ' + peopleMock[0].name.lastName,
),
).toBeInTheDocument();
expect(await canvas.findByText(companiesMock[0].name)).toBeInTheDocument(); expect(await canvas.findByText(companiesMock[0].name)).toBeInTheDocument();
expect(await canvas.findByText('My very first note')).toBeInTheDocument();
expect(await canvas.findByText('Create Note')).toBeInTheDocument(); expect(await canvas.findByText('Create Note')).toBeInTheDocument();
expect(await canvas.findByText('Go to Companies')).toBeInTheDocument(); expect(await canvas.findByText('Go to Companies')).toBeInTheDocument();
}, },
@ -128,21 +121,6 @@ export const AtleastMatchingOnePerson: Story = {
const searchInput = await canvas.findByPlaceholderText('Search'); const searchInput = await canvas.findByPlaceholderText('Search');
await sleep(openTimeout); await sleep(openTimeout);
await userEvent.type(searchInput, 'alex'); await userEvent.type(searchInput, 'alex');
expect( expect(await canvas.findByText('Sylvie Palmer')).toBeInTheDocument();
await canvas.findByText(
peopleMock[0].name.firstName + ' ' + peopleMock[0].name.lastName,
),
).toBeInTheDocument();
},
};
export const NotMatchingAnything: Story = {
play: async () => {
const canvas = within(document.body);
const searchInput = await canvas.findByPlaceholderText('Search');
await sleep(openTimeout);
await userEvent.type(searchInput, 'asdasdasd');
// FIXME: We need to fix the filters in graphql
// expect(await canvas.findByText('No results found')).toBeInTheDocument();
}, },
}; };

View File

@ -9,6 +9,7 @@ import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadat
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator'; import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
import { graphqlMocks } from '~/testing/graphqlMocks'; import { graphqlMocks } from '~/testing/graphqlMocks';
import { PrefetchLoadedDecorator } from '~/testing/decorators/PrefetchLoadedDecorator';
import { ObjectMetadataNavItems } from '../ObjectMetadataNavItems'; import { ObjectMetadataNavItems } from '../ObjectMetadataNavItems';
const meta: Meta<typeof ObjectMetadataNavItems> = { const meta: Meta<typeof ObjectMetadataNavItems> = {
@ -20,6 +21,7 @@ const meta: Meta<typeof ObjectMetadataNavItems> = {
ComponentWithRouterDecorator, ComponentWithRouterDecorator,
ComponentWithRecoilScopeDecorator, ComponentWithRecoilScopeDecorator,
SnackBarDecorator, SnackBarDecorator,
PrefetchLoadedDecorator,
], ],
parameters: { parameters: {
msw: graphqlMocks, msw: graphqlMocks,

View File

@ -90,8 +90,9 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
objectMetadataItem, objectMetadataItem,
}); });
const pageInfo = data?.[objectMetadataItem.namePlural].pageInfo; const pageInfo = data?.[objectMetadataItem.namePlural]?.pageInfo;
const totalCount = data?.[objectMetadataItem.namePlural].totalCount;
const totalCount = data?.[objectMetadataItem.namePlural]?.totalCount;
return { return {
objectMetadataItem, objectMetadataItem,

View File

@ -83,26 +83,16 @@ export const Date: Story = {
}, },
}; };
export const Link: Story = { export const Links: Story = {
args: { args: {
fieldMetadataItem: mockedCompanyObjectMetadataItem.fields.find( fieldMetadataItem: mockedCompanyObjectMetadataItem.fields.find(
({ name, type }) => ({ name, type }) =>
name === 'linkedinLink' && type === FieldMetadataType.Link, name === 'linkedinLink' && type === FieldMetadataType.Links,
), ),
objectMetadataItem: mockedCompanyObjectMetadataItem, objectMetadataItem: mockedCompanyObjectMetadataItem,
}, },
}; };
export const Links: Story = {
args: {
...Link.args,
fieldMetadataItem: {
...Link.args!.fieldMetadataItem!,
type: FieldMetadataType.Links,
},
},
};
export const Number: Story = { export const Number: Story = {
args: { args: {
fieldMetadataItem: mockedCompanyObjectMetadataItem.fields.find( fieldMetadataItem: mockedCompanyObjectMetadataItem.fields.find(

View File

@ -1,6 +1,6 @@
import { expect } from '@storybook/jest'; import { expect } from '@storybook/jest';
import { Meta, StoryObj } from '@storybook/react'; import { Meta, StoryObj } from '@storybook/react';
import { within, userEvent } from '@storybook/test'; import { userEvent, within } from '@storybook/test';
import { useSetRecoilState } from 'recoil'; import { useSetRecoilState } from 'recoil';
import { currentUserState } from '@/auth/states/currentUserState'; import { currentUserState } from '@/auth/states/currentUserState';
@ -15,6 +15,7 @@ import {
} from '~/testing/mock-data/users'; } from '~/testing/mock-data/users';
import { SupportDropdown } from '@/support/components/SupportDropdown'; import { SupportDropdown } from '@/support/components/SupportDropdown';
import { PrefetchLoadedDecorator } from '~/testing/decorators/PrefetchLoadedDecorator';
const meta: Meta<typeof SupportDropdown> = { const meta: Meta<typeof SupportDropdown> = {
title: 'Modules/Support/SupportDropdown', title: 'Modules/Support/SupportDropdown',
@ -35,6 +36,7 @@ const meta: Meta<typeof SupportDropdown> = {
return <Story />; return <Story />;
}, },
PrefetchLoadedDecorator,
], ],
parameters: { parameters: {
msw: graphqlMocks, msw: graphqlMocks,

View File

@ -87,30 +87,12 @@ export const Default: Story = {
play: async ({ canvasElement }) => { play: async ({ canvasElement }) => {
const canvas = within(canvasElement); const canvas = within(canvasElement);
await canvas.findAllByText( // await canvas.findAllByText(peopleMock[0].name.firstName);
peopleMock[0].name.firstName + ' ' + peopleMock[0].name.lastName, expect(
); await canvas.findByText('Twenty', undefined, {
expect( timeout: 3000,
await canvas.findByText('Add your first Activity', undefined, { }),
timeout: 3000, ).toBeInTheDocument();
}),
).toBeInTheDocument();
},
};
export const Loading: Story = {
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
decorators: [PageDecorator],
play: async ({ canvasElement }) => {
const canvas = within(canvasElement);
expect(
canvas.queryByText(
peopleMock[0].name.firstName + ' ' + peopleMock[0].name.lastName,
),
).toBeNull();
expect( expect(
await canvas.findByText('Add your first Activity', undefined, { await canvas.findByText('Add your first Activity', undefined, {
timeout: 3000, timeout: 3000,

View File

@ -60,7 +60,7 @@ export const SettingsObjects = () => {
/> />
</UndecoratedLink> </UndecoratedLink>
</SettingsHeaderContainer> </SettingsHeaderContainer>
<div> <>
<SettingsObjectCoverImage /> <SettingsObjectCoverImage />
<Section> <Section>
<H2Title title="Existing objects" /> <H2Title title="Existing objects" />
@ -122,7 +122,7 @@ export const SettingsObjects = () => {
)} )}
</Table> </Table>
</Section> </Section>
</div> </>
</SettingsPageContainer> </SettingsPageContainer>
</SubMenuTopBarContainer> </SubMenuTopBarContainer>
); );

View File

@ -0,0 +1,19 @@
import { Decorator } from '@storybook/react';
import { useSetRecoilState } from 'recoil';
import { prefetchIsLoadedFamilyState } from '@/prefetch/states/prefetchIsLoadedFamilyState';
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
export const PrefetchLoadedDecorator: Decorator = (Story) => {
const setAreViewsPrefetched = useSetRecoilState(
prefetchIsLoadedFamilyState(PrefetchKey.AllViews),
);
const setAreFavoritesPrefetched = useSetRecoilState(
prefetchIsLoadedFamilyState(PrefetchKey.AllFavorites),
);
setAreViewsPrefetched(true);
setAreFavoritesPrefetched(true);
return <Story />;
};