@ -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();
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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();
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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,
|
||||||
@ -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,
|
||||||
|
|||||||
@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -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 />;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user