|
| 1 | +import { getOperationName } from '@apollo/client/utilities'; |
| 2 | +import { expect } from '@storybook/jest'; |
| 3 | +import { Meta, StoryObj } from '@storybook/react'; |
| 4 | +import { within } from '@storybook/test'; |
| 5 | +import { graphql, HttpResponse } from 'msw'; |
| 6 | + |
| 7 | +import { GET_CLIENT_CONFIG } from '@/client-config/graphql/queries/getClientConfig'; |
| 8 | +import { FIND_MANY_OBJECT_METADATA_ITEMS } from '@/object-metadata/graphql/queries'; |
| 9 | +import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser'; |
| 10 | +import { RecordIndexPage } from '~/pages/object-record/RecordIndexPage'; |
| 11 | +import { |
| 12 | + PageDecorator, |
| 13 | + PageDecoratorArgs, |
| 14 | +} from '~/testing/decorators/PageDecorator'; |
| 15 | +import { graphqlMocks, metadataGraphql } from '~/testing/graphqlMocks'; |
| 16 | +import { mockedClientConfig } from '~/testing/mock-data/config'; |
| 17 | +import { mockedUsersData } from '~/testing/mock-data/users'; |
| 18 | + |
| 19 | +const userMetadataLoaderMocks = { |
| 20 | + msw: { |
| 21 | + handlers: [ |
| 22 | + graphql.query(getOperationName(GET_CURRENT_USER) ?? '', () => { |
| 23 | + return HttpResponse.json({ |
| 24 | + data: { |
| 25 | + currentUser: mockedUsersData[0], |
| 26 | + }, |
| 27 | + }); |
| 28 | + }), |
| 29 | + graphql.query(getOperationName(GET_CLIENT_CONFIG) ?? '', () => { |
| 30 | + return HttpResponse.json({ |
| 31 | + data: { |
| 32 | + clientConfig: mockedClientConfig, |
| 33 | + }, |
| 34 | + }); |
| 35 | + }), |
| 36 | + metadataGraphql.query( |
| 37 | + getOperationName(FIND_MANY_OBJECT_METADATA_ITEMS) ?? '', |
| 38 | + () => { |
| 39 | + return HttpResponse.json({ |
| 40 | + data: { |
| 41 | + objects: { |
| 42 | + // simulate no metadata items |
| 43 | + edges: [], |
| 44 | + }, |
| 45 | + }, |
| 46 | + }); |
| 47 | + }, |
| 48 | + ), |
| 49 | + ], |
| 50 | + }, |
| 51 | +}; |
| 52 | + |
| 53 | +const meta: Meta<PageDecoratorArgs> = { |
| 54 | + title: 'App/Loading/UserOrMetadataLoader', |
| 55 | + component: RecordIndexPage, |
| 56 | + args: { |
| 57 | + routePath: '/objects/:objectNamePlural', |
| 58 | + routeParams: { |
| 59 | + ':objectNamePlural': 'companies', |
| 60 | + }, |
| 61 | + }, |
| 62 | + parameters: { |
| 63 | + msw: graphqlMocks, |
| 64 | + }, |
| 65 | +}; |
| 66 | + |
| 67 | +export default meta; |
| 68 | + |
| 69 | +export type Story = StoryObj<typeof RecordIndexPage>; |
| 70 | + |
| 71 | +export const Default: Story = { |
| 72 | + parameters: userMetadataLoaderMocks, |
| 73 | + // eslint-disable-next-line @typescript-eslint/ban-ts-comment |
| 74 | + // @ts-ignore |
| 75 | + decorators: [PageDecorator], |
| 76 | + play: async ({ canvasElement }) => { |
| 77 | + const canvas = within(canvasElement); |
| 78 | + |
| 79 | + expect(canvas.queryByText('Search')).toBeNull(); |
| 80 | + expect(canvas.queryByText('Settings')).toBeNull(); |
| 81 | + expect(canvas.queryByText('Tasks')).toBeNull(); |
| 82 | + expect(canvas.queryByText('People')).toBeNull(); |
| 83 | + expect(canvas.queryByText('Opportunities')).toBeNull(); |
| 84 | + expect(canvas.queryByText('Listings')).toBeNull(); |
| 85 | + expect(canvas.queryByText('My Customs')).toBeNull(); |
| 86 | + }, |
| 87 | +}; |
0 commit comments