mirror of
				https://github.com/open-metadata/OpenMetadata.git
				synced 2025-10-31 02:29:03 +00:00 
			
		
		
		
	Test suit for explore, service, and database page (#622)
* Adding test-suits for UI * fixed broken tests * fixed all test fail files * removed parsing errors from files * resolved test-suits error * fiexed all the failing test * fixed tabledatacard title padding * fixed popOver test * fixed eslint issue in file * added eslint disable on top of file * add test for searchData and MyDataHeader * add addtional test for teams page * test suits for teams page and its components * added test cases for tags page * added test for services page * add test for service page and its component * fixed typo * test for databasedetails, myData and explore page * test for service page * fixed some failing test * fixed failing test due to data type change Co-authored-by: darth-coder00 <aashit@getcollate.io>
This commit is contained in:
		
							parent
							
								
									5a6eded1e7
								
							
						
					
					
						commit
						b231e68c6e
					
				| @ -15,7 +15,13 @@ | ||||
|   * limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| import { render } from '@testing-library/react'; | ||||
| import { | ||||
|   findAllByTestId, | ||||
|   findByTestId, | ||||
|   findByText, | ||||
|   fireEvent, | ||||
|   render, | ||||
| } from '@testing-library/react'; | ||||
| import React from 'react'; | ||||
| import { MemoryRouter } from 'react-router-dom'; | ||||
| import Appbar from './Appbar'; | ||||
| @ -26,6 +32,7 @@ jest.mock('../../hooks/authHooks', () => ({ | ||||
|       isSignedIn: true, | ||||
|       isSignedOut: false, | ||||
|       isAuthenticatedRoute: true, | ||||
|       isAuthDisabled: true, | ||||
|     }; | ||||
|   }, | ||||
| })); | ||||
| @ -34,34 +41,49 @@ jest.mock('../Modals/WhatsNewModal', () => ({ | ||||
|   WhatsNewModal: jest.fn().mockReturnValue(<p>WhatsNewModal</p>), | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../axiosAPIs/miscAPI', () => ({ | ||||
|   getVersion: jest.fn().mockImplementation(() => | ||||
|     Promise.resolve({ | ||||
|       data: { | ||||
|         version: '0.5.0-SNAPSHOT', | ||||
|       }, | ||||
|     }) | ||||
|   ), | ||||
| })); | ||||
| 
 | ||||
| describe('Test Appbar Component', () => { | ||||
|   it('Component should render', () => { | ||||
|     const { getByTestId } = render(<Appbar />, { | ||||
|   it('Component should render', async () => { | ||||
|     const { container } = render(<Appbar />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
|     // Check for statis user for now
 | ||||
|     // TODO: Fix the tests when we have actual data
 | ||||
|     const dropdown = getByTestId('dropdown-profile'); | ||||
| 
 | ||||
|     const dropdown = await findByTestId(container, 'dropdown-profile'); | ||||
|     const whatsnewModal = await findByTestId(container, 'whatsnew-modal'); | ||||
|     const greetingText = await findByTestId(container, 'greeting-text'); | ||||
| 
 | ||||
|     expect(dropdown).toBeInTheDocument(); | ||||
|     expect(whatsnewModal).toBeInTheDocument(); | ||||
|     expect(greetingText).toBeInTheDocument(); | ||||
|   }); | ||||
| 
 | ||||
|   it('Check for render Items by default', () => { | ||||
|     const { getAllByTestId } = render(<Appbar />, { | ||||
|   it('Check for render Items by default', async () => { | ||||
|     const { container } = render(<Appbar />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
|     const items = getAllByTestId('appbar-item'); | ||||
|     const items = await findAllByTestId(container, 'appbar-item'); | ||||
| 
 | ||||
|     expect(items).toHaveLength(2); | ||||
|     expect(items.map((i) => i.textContent)).toEqual(['', 'Explore']); | ||||
|   }); | ||||
| 
 | ||||
|   it('Check for render dropdown item', () => { | ||||
|     const { getAllByTestId } = render(<Appbar />, { | ||||
|   it('onClick of whatsNewModal, it should open', async () => { | ||||
|     const { container } = render(<Appbar />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
|     const items = getAllByTestId('dropdown-item'); | ||||
| 
 | ||||
|     expect(items).toHaveLength(3); | ||||
|     const whatsnewModal = await findByTestId(container, 'whatsnew-modal'); | ||||
|     fireEvent.click(whatsnewModal); | ||||
| 
 | ||||
|     expect(await findByText(container, /WhatsNewModal/i)).toBeInTheDocument(); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -130,7 +130,7 @@ const Appbar: React.FC = (): JSX.Element => { | ||||
|       : appState.userDetails.displayName || appState.userDetails.name; | ||||
| 
 | ||||
|     return ( | ||||
|       <span> | ||||
|       <span data-testid="greeting-text"> | ||||
|         Welcome, <span className="tw-font-medium">{name.split(' ')[0]}</span> | ||||
|       </span> | ||||
|     ); | ||||
| @ -238,6 +238,7 @@ const Appbar: React.FC = (): JSX.Element => { | ||||
|             </div> | ||||
|             <button | ||||
|               className="tw-nav focus:tw-no-underline hover:tw-underline" | ||||
|               data-testid="whatsnew-modal" | ||||
|               onClick={openModal}> | ||||
|               <SVGIcons | ||||
|                 alt="Doc icon" | ||||
|  | ||||
| @ -19,13 +19,13 @@ import { getByTestId, render } from '@testing-library/react'; | ||||
| import { TableDetail } from 'Models'; | ||||
| import React from 'react'; | ||||
| import { MemoryRouter } from 'react-router-dom'; | ||||
| import { Column, ColumnDataType } from '../../generated/entity/data/table'; | ||||
| import { Column, DataType } from '../../generated/entity/data/table'; | ||||
| import SchemaTab from './SchemaTab'; | ||||
| 
 | ||||
| const mockColumns: Column[] = [ | ||||
|   { | ||||
|     name: 'testId', | ||||
|     columnDataType: ColumnDataType.String, | ||||
|     dataType: DataType.String, | ||||
|     description: 'string', | ||||
|     fullyQualifiedName: 'string', | ||||
|     tags: [{ tagFQN: 'string' }, { tagFQN: 'string2' }], | ||||
|  | ||||
| @ -19,21 +19,23 @@ import { getAllByTestId, render } from '@testing-library/react'; | ||||
| import { TableDetail } from 'Models'; | ||||
| import React from 'react'; | ||||
| import { MemoryRouter } from 'react-router-dom'; | ||||
| import { ColumnDataType } from '../../generated/entity/data/table'; | ||||
| import { Constraint, DataType, Table } from '../../generated/entity/data/table'; | ||||
| import SchemaTable from './SchemaTable'; | ||||
| 
 | ||||
| jest.mock('../common/rich-text-editor/RichTextEditorPreviewer', () => { | ||||
|   return jest.fn().mockReturnValue(<p>RichTextEditorPreviewer</p>); | ||||
| }); | ||||
| 
 | ||||
| const mockColumns = [ | ||||
| const mockColumns: Table['columns'] = [ | ||||
|   { | ||||
|     name: 'testId', | ||||
|     columnDataType: ColumnDataType.String, | ||||
|     description: 'string', | ||||
|     fullyQualifiedName: 'string', | ||||
|     constraint: Constraint.PrimaryKey, | ||||
|     dataType: DataType.Number, | ||||
|     dataTypeDisplay: 'numeric', | ||||
|     description: 'Unique identifier for the address.', | ||||
|     fullyQualifiedName: 'bigquery.shopify.dim_address.address_id', | ||||
|     name: 'address_id', | ||||
|     ordinalPosition: 1, | ||||
|     tags: [{ tagFQN: 'string' }, { tagFQN: 'string2' }], | ||||
|     ordinalPosition: 2, | ||||
|   }, | ||||
| ]; | ||||
| 
 | ||||
|  | ||||
| @ -127,7 +127,7 @@ describe('Test MyDataHeader Component', () => { | ||||
|     expect(getByText(container, /40 tables/i)).toBeInTheDocument(); | ||||
|     expect(getByText(container, /13 topics/i)).toBeInTheDocument(); | ||||
|     expect(getByText(container, /10 dashboards/i)).toBeInTheDocument(); | ||||
|     expect(getByText(container, /4 of services/i)).toBeInTheDocument(); | ||||
|     expect(getByText(container, /4 services/i)).toBeInTheDocument(); | ||||
|     expect(getByText(container, /193 assets/i)).toBeInTheDocument(); | ||||
|   }); | ||||
| 
 | ||||
|  | ||||
| @ -0,0 +1,254 @@ | ||||
| import { | ||||
|   findByTestId, | ||||
|   findByText, | ||||
|   fireEvent, | ||||
|   render, | ||||
| } from '@testing-library/react'; | ||||
| import React from 'react'; | ||||
| import { MemoryRouter } from 'react-router'; | ||||
| import DatabaseDetails from './'; | ||||
| 
 | ||||
| const mockDatabase = { | ||||
|   id: '44d92cbd-65d3-4755-aaf9-b4bf01e0d822', | ||||
|   name: 'shopify', | ||||
|   fullyQualifiedName: 'bigquery.shopify', | ||||
|   description: 'This **mock** database contains tables related to', | ||||
|   href: 'http://localhost', | ||||
|   service: { | ||||
|     id: '451ccbeb-24d4-490d-891c-d00b5f18a13b', | ||||
|     type: 'databaseService', | ||||
|     name: 'bigquery', | ||||
|     description: 'BigQuery service used for shopify data', | ||||
|     href: 'http://localhost', | ||||
|   }, | ||||
| }; | ||||
| 
 | ||||
| const mockServiceData = { | ||||
|   id: '451ccbeb-24d4-490d-891c-d00b5f18a13b', | ||||
|   name: 'bigquery', | ||||
|   serviceType: 'BigQuery', | ||||
|   description: 'BigQuery service used for shopify data', | ||||
|   href: 'http://localhost', | ||||
|   jdbc: { driverClass: 'jdbc', connectionUrl: 'jdbc://localhost' }, | ||||
| }; | ||||
| 
 | ||||
| const mockTableData = { | ||||
|   data: [ | ||||
|     { | ||||
|       id: 'b69fef11-3cbe-42fb-8303-9ac8e55629ba', | ||||
|       name: 'dim_address', | ||||
|       description: | ||||
|         'This dimension table contains the billing and shipping addresses of customers', | ||||
|       href: 'http://localhost:8585/', | ||||
|       tableType: 'Regular', | ||||
|       fullyQualifiedName: 'bigquery.shopify.dim_address', | ||||
|       columns: [ | ||||
|         { | ||||
|           name: 'address_id', | ||||
|           columnDataType: 'NUMERIC', | ||||
|           description: 'Unique identifier for the address.', | ||||
|           fullyQualifiedName: 'bigquery.shopify.dim_address.address_id', | ||||
|           tags: [], | ||||
|           columnConstraint: 'PRIMARY_KEY', | ||||
|           ordinalPosition: 1, | ||||
|         }, | ||||
|       ], | ||||
|       usageSummary: { | ||||
|         dailyStats: { count: 100, percentileRank: 45 }, | ||||
|         weeklyStats: { count: 100, percentileRank: 45 }, | ||||
|         monthlyStats: { count: 100, percentileRank: 45 }, | ||||
|         date: '2021-09-20', | ||||
|       }, | ||||
|       tags: [ | ||||
|         { | ||||
|           labelType: 'Manual', | ||||
|           state: 'Confirmed', | ||||
|           tagFQN: 'PersonalData.Personal', | ||||
|         }, | ||||
|       ], | ||||
|     }, | ||||
|   ], | ||||
|   paging: { after: 'ZMbpLOqQQsREk_7DmEOr', total: 12 }, | ||||
| }; | ||||
| 
 | ||||
| jest.mock( | ||||
|   '../../components/common/rich-text-editor/RichTextEditorPreviewer', | ||||
|   () => { | ||||
|     return jest.fn().mockImplementation(({ markdown }) => <p>{markdown}</p>); | ||||
|   } | ||||
| ); | ||||
| 
 | ||||
| jest.mock('react-router-dom', () => ({ | ||||
|   Link: jest | ||||
|     .fn() | ||||
|     .mockImplementation(({ children }: { children: React.ReactNode }) => ( | ||||
|       <p data-testid="link">{children}</p> | ||||
|     )), | ||||
|   useHistory: jest.fn(), | ||||
|   useParams: jest.fn().mockReturnValue({ | ||||
|     databaseFQN: 'bigquery.shopify', | ||||
|   }), | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../AppState', () => { | ||||
|   return jest.fn().mockReturnValue({ | ||||
|     inPageSearchText: '', | ||||
|   }); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../axiosAPIs/databaseAPI', () => ({ | ||||
|   getDatabaseDetailsByFQN: jest | ||||
|     .fn() | ||||
|     .mockImplementation(() => Promise.resolve({ data: mockDatabase })), | ||||
|   patchDatabaseDetails: jest.fn(), | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../components/containers/PageContainer', () => { | ||||
|   return jest | ||||
|     .fn() | ||||
|     .mockImplementation(({ children }: { children: React.ReactNode }) => ( | ||||
|       <div data-testid="PageContainer">{children}</div> | ||||
|     )); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../axiosAPIs/serviceAPI', () => ({ | ||||
|   getServiceById: jest | ||||
|     .fn() | ||||
|     .mockImplementation(() => Promise.resolve({ data: mockServiceData })), | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../axiosAPIs/tableAPI', () => ({ | ||||
|   getDatabaseTables: jest | ||||
|     .fn() | ||||
|     .mockImplementation(() => Promise.resolve({ data: mockTableData })), | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../utils/TableUtils', () => ({ | ||||
|   getOwnerFromId: jest.fn().mockReturnValue({ | ||||
|     name: 'owner', | ||||
|     id: 'string', | ||||
|     type: 'user', | ||||
|   }), | ||||
|   getUsagePercentile: jest.fn().mockReturnValue('Medium - 45th pctile'), | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../components/common/popover/PopOver', () => { | ||||
|   return jest | ||||
|     .fn() | ||||
|     .mockImplementation(({ children }: { children: React.ReactNode }) => ( | ||||
|       <div data-testid="popover">{children}</div> | ||||
|     )); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../utils/CommonUtils', () => ({ | ||||
|   getCurrentUserId: jest | ||||
|     .fn() | ||||
|     .mockReturnValue('5d5ca778-8bee-4ea0-bcb6-b17d92f7ef96'), | ||||
|   isEven: jest.fn().mockReturnValue(true), | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../components/tags/tags', () => { | ||||
|   return jest.fn().mockReturnValue(<span>Tag</span>); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../components/common/next-previous/NextPrevious', () => { | ||||
|   return jest.fn().mockReturnValue(<div>NextPrevious</div>); | ||||
| }); | ||||
| 
 | ||||
| jest.mock( | ||||
|   '../../components/common/title-breadcrumb/title-breadcrumb.component', | ||||
|   () => { | ||||
|     return jest.fn().mockReturnValue(<div>TitleBreadcrumb</div>); | ||||
|   } | ||||
| ); | ||||
| 
 | ||||
| jest.mock('../../utils/TagsUtils', () => ({ | ||||
|   getTableTags: jest.fn().mockReturnValue([ | ||||
|     { | ||||
|       labelType: 'Manual', | ||||
|       state: 'Confirmed', | ||||
|       tagFQN: 'PersonalData.Personal', | ||||
|     }, | ||||
|   ]), | ||||
| })); | ||||
| 
 | ||||
| jest.mock( | ||||
|   '../../components/Modals/ModalWithMarkdownEditor/ModalWithMarkdownEditor', | ||||
|   () => ({ | ||||
|     ModalWithMarkdownEditor: jest | ||||
|       .fn() | ||||
|       .mockReturnValue(<p>ModalWithMarkdownEditor</p>), | ||||
|   }) | ||||
| ); | ||||
| 
 | ||||
| describe('Test DatabaseDetails page', () => { | ||||
|   it('Component should render', async () => { | ||||
|     const { container } = render(<DatabaseDetails />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
| 
 | ||||
|     const pageContainer = await findByTestId(container, 'page-container'); | ||||
|     const titleBreadcrumb = await findByText(container, /TitleBreadcrumb/i); | ||||
|     const tableCount = await findByTestId(container, 'table-count'); | ||||
|     const descriptionContainer = await findByTestId( | ||||
|       container, | ||||
|       'description-container' | ||||
|     ); | ||||
|     const descriptionEditButton = await findByTestId( | ||||
|       container, | ||||
|       'description-edit-button' | ||||
|     ); | ||||
|     const descriptionData = await findByTestId(container, 'description-data'); | ||||
|     const databaseTable = await findByTestId(container, 'database-tables'); | ||||
| 
 | ||||
|     const count = tableCount.textContent ? parseInt(tableCount.textContent) : 0; | ||||
| 
 | ||||
|     expect(pageContainer).toBeInTheDocument(); | ||||
|     expect(titleBreadcrumb).toBeInTheDocument(); | ||||
|     expect(count).toEqual(mockTableData.paging.total); | ||||
|     expect(descriptionContainer).toBeInTheDocument(); | ||||
|     expect(descriptionEditButton).toBeInTheDocument(); | ||||
|     expect(descriptionData).toBeInTheDocument(); | ||||
|     expect(databaseTable).toBeInTheDocument(); | ||||
|   }); | ||||
| 
 | ||||
|   it('Table and its header should render', async () => { | ||||
|     const { container } = render(<DatabaseDetails />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
|     const databaseTable = await findByTestId(container, 'database-tables'); | ||||
|     const tableHeader = await findByTestId(container, 'table-header'); | ||||
|     const headerName = await findByTestId(container, 'header-name'); | ||||
|     const headerDescription = await findByTestId( | ||||
|       container, | ||||
|       'header-description' | ||||
|     ); | ||||
|     const headerOwner = await findByTestId(container, 'header-owner'); | ||||
|     const headerUsage = await findByTestId(container, 'header-usage'); | ||||
|     const headerTags = await findByTestId(container, 'header-tags'); | ||||
|     const tableColumn = await findByTestId(container, 'tabale-column'); | ||||
| 
 | ||||
|     expect(databaseTable).toBeInTheDocument(); | ||||
|     expect(tableHeader).toBeInTheDocument(); | ||||
|     expect(headerName).toBeInTheDocument(); | ||||
|     expect(headerDescription).toBeInTheDocument(); | ||||
|     expect(headerOwner).toBeInTheDocument(); | ||||
|     expect(headerUsage).toBeInTheDocument(); | ||||
|     expect(headerTags).toBeInTheDocument(); | ||||
|     expect(tableColumn).toBeInTheDocument(); | ||||
|   }); | ||||
| 
 | ||||
|   it('on click of edit description icon ModalWithMarkdownEditor should open', async () => { | ||||
|     const { container } = render(<DatabaseDetails />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
| 
 | ||||
|     const editIcon = await findByTestId(container, 'description-edit-button'); | ||||
| 
 | ||||
|     fireEvent.click(editIcon); | ||||
| 
 | ||||
|     expect( | ||||
|       await findByText(container, /ModalWithMarkdownEditor/i) | ||||
|     ).toBeInTheDocument(); | ||||
|   }); | ||||
| }); | ||||
| @ -229,7 +229,7 @@ const DatabaseDetails: FunctionComponent = () => { | ||||
|         <Loader /> | ||||
|       ) : ( | ||||
|         <PageContainer> | ||||
|           <div className="tw-px-4"> | ||||
|           <div className="tw-px-4" data-testid="page-container"> | ||||
|             <TitleBreadcrumb titleLinks={slashedTableName} /> | ||||
| 
 | ||||
|             <div className="tw-flex tw-gap-1 tw-mb-2 tw-mt-1"> | ||||
| @ -237,12 +237,18 @@ const DatabaseDetails: FunctionComponent = () => { | ||||
|                 <span className="tw-text-grey-muted tw-font-normal"> | ||||
|                   Tables : | ||||
|                 </span>{' '} | ||||
|                 <span className="tw-pl-1 tw-font-normal">{instanceCount}</span> | ||||
|                 <span | ||||
|                   className="tw-pl-1 tw-font-normal" | ||||
|                   data-testid="table-count"> | ||||
|                   {instanceCount} | ||||
|                 </span> | ||||
|               </span> | ||||
|             </div> | ||||
|             <div className="tw-bg-white tw-mb-4"> | ||||
|               <div className="tw-col-span-3"> | ||||
|                 <div className="schema-description tw-flex tw-flex-col tw-h-full tw-relative tw-border tw-border-main tw-rounded-md"> | ||||
|                 <div | ||||
|                   className="schema-description tw-flex tw-flex-col tw-h-full tw-relative tw-border tw-border-main tw-rounded-md" | ||||
|                   data-testid="description-container"> | ||||
|                   <div className="tw-flex tw-items-center tw-px-3 tw-py-1 tw-border-b tw-border-main"> | ||||
|                     <span className="tw-flex-1 tw-leading-8 tw-m-0 tw-text-sm tw-font-normal"> | ||||
|                       Description | ||||
| @ -250,6 +256,7 @@ const DatabaseDetails: FunctionComponent = () => { | ||||
|                     <div className="tw-flex-initial"> | ||||
|                       <button | ||||
|                         className="focus:tw-outline-none" | ||||
|                         data-testid="description-edit-button" | ||||
|                         onClick={onDescriptionEdit}> | ||||
|                         <SVGIcons | ||||
|                           alt="edit" | ||||
| @ -261,7 +268,7 @@ const DatabaseDetails: FunctionComponent = () => { | ||||
|                     </div> | ||||
|                   </div> | ||||
|                   <div className="tw-px-3 tw-pl-5 tw-py-2 tw-overflow-y-auto"> | ||||
|                     <div data-testid="description" id="description" /> | ||||
|                     <div data-testid="description-data" id="description" /> | ||||
|                     {description ? ( | ||||
|                       <RichTextEditorPreviewer markdown={description} /> | ||||
|                     ) : ( | ||||
| @ -286,13 +293,27 @@ const DatabaseDetails: FunctionComponent = () => { | ||||
|             <table | ||||
|               className="tw-bg-white tw-w-full tw-mb-4" | ||||
|               data-testid="database-tables"> | ||||
|               <thead> | ||||
|               <thead data-testid="table-header"> | ||||
|                 <tr className="tableHead-row"> | ||||
|                   <th className="tableHead-cell">Table Name</th> | ||||
|                   <th className="tableHead-cell">Description</th> | ||||
|                   <th className="tableHead-cell">Owner</th> | ||||
|                   <th className="tableHead-cell">Usage</th> | ||||
|                   <th className="tableHead-cell tw-w-60">Tags</th> | ||||
|                   <th className="tableHead-cell" data-testid="header-name"> | ||||
|                     Table Name | ||||
|                   </th> | ||||
|                   <th | ||||
|                     className="tableHead-cell" | ||||
|                     data-testid="header-description"> | ||||
|                     Description | ||||
|                   </th> | ||||
|                   <th className="tableHead-cell" data-testid="header-owner"> | ||||
|                     Owner | ||||
|                   </th> | ||||
|                   <th className="tableHead-cell" data-testid="header-usage"> | ||||
|                     Usage | ||||
|                   </th> | ||||
|                   <th | ||||
|                     className="tableHead-cell tw-w-60" | ||||
|                     data-testid="header-tags"> | ||||
|                     Tags | ||||
|                   </th> | ||||
|                 </tr> | ||||
|               </thead> | ||||
|               <tbody className="tableBody"> | ||||
| @ -303,7 +324,7 @@ const DatabaseDetails: FunctionComponent = () => { | ||||
|                         'tableBody-row', | ||||
|                         !isEven(index + 1) ? 'odd-row' : null | ||||
|                       )} | ||||
|                       data-testid="column" | ||||
|                       data-testid="tabale-column" | ||||
|                       key={index}> | ||||
|                       <td className="tableBody-cell"> | ||||
|                         <Link | ||||
|  | ||||
| @ -15,9 +15,9 @@ | ||||
|   * limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| import { act, render, screen } from '@testing-library/react'; | ||||
| import { findAllByTestId, findByTestId, render } from '@testing-library/react'; | ||||
| import React from 'react'; | ||||
| import { getFilterString } from '../../utils/FilterUtils'; | ||||
| import { MemoryRouter } from 'react-router'; | ||||
| import ExplorePage from './index'; | ||||
| import { mockResponse } from './index.mock'; | ||||
| jest.mock('react-router-dom', () => ({ | ||||
| @ -36,7 +36,13 @@ jest.mock('../../utils/FilterUtils', () => ({ | ||||
| })); | ||||
| 
 | ||||
| jest.mock('../../components/searched-data/SearchedData', () => { | ||||
|   return jest.fn().mockReturnValue(<p>SearchedData</p>); | ||||
|   return jest | ||||
|     .fn() | ||||
|     .mockImplementation(({ children }: { children: React.ReactNode }) => ( | ||||
|       <div data-testid="search-data"> | ||||
|         <div data-testid="wrapped-content">{children}</div> | ||||
|       </div> | ||||
|     )); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../hooks/useToastContext', () => { | ||||
| @ -44,19 +50,16 @@ jest.mock('../../hooks/useToastContext', () => { | ||||
| }); | ||||
| 
 | ||||
| describe('Test Explore page', () => { | ||||
|   it('Should Call Search API', async () => { | ||||
|     await act(async () => { | ||||
|       render(<ExplorePage />); | ||||
|   it('Component should render', async () => { | ||||
|     const { container } = render(<ExplorePage />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
|     const searchData = await findByTestId(container, 'search-data'); | ||||
|     const wrappedContent = await findByTestId(container, 'wrapped-content'); | ||||
|     const tabs = await findAllByTestId(container, 'tab'); | ||||
| 
 | ||||
|     expect(await screen.findByText('SearchedData')).toBeInTheDocument(); | ||||
|   }); | ||||
| 
 | ||||
|   it('getFilterString should return filter as string', async () => { | ||||
|     await act(async () => { | ||||
|       render(<ExplorePage />); | ||||
|     }); | ||||
| 
 | ||||
|     expect(getFilterString).toEqual(getFilterString); | ||||
|     expect(searchData).toBeInTheDocument(); | ||||
|     expect(wrappedContent).toBeInTheDocument(); | ||||
|     expect(tabs.length).toBe(3); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -504,6 +504,7 @@ const ExplorePage: React.FC = (): React.ReactElement => { | ||||
|                 className={`tw-pb-2 tw-px-4 tw-gh-tabs ${getActiveTabClass( | ||||
|                   tab.tab | ||||
|                 )}`}
 | ||||
|                 data-testid="tab" | ||||
|                 key={index} | ||||
|                 onClick={() => { | ||||
|                   onTabChange(tab.tab); | ||||
|  | ||||
| @ -17,7 +17,12 @@ | ||||
| 
 | ||||
| /* eslint-disable @typescript-eslint/camelcase */ | ||||
| 
 | ||||
| import { findByTestId, render } from '@testing-library/react'; | ||||
| import { | ||||
|   findAllByTestId, | ||||
|   findByTestId, | ||||
|   findByText, | ||||
|   render, | ||||
| } from '@testing-library/react'; | ||||
| import React from 'react'; | ||||
| import { MemoryRouter } from 'react-router-dom'; | ||||
| import MyDataPage from './index'; | ||||
| @ -189,13 +194,21 @@ jest.mock('../../axiosAPIs/miscAPI', () => ({ | ||||
| jest.mock('../../components/searched-data/SearchedData', () => { | ||||
|   return jest | ||||
|     .fn() | ||||
|     .mockReturnValue(<p data-testid="search-data">SearchedData</p>); | ||||
|     .mockImplementation(({ children }: { children: React.ReactNode }) => ( | ||||
|       <div data-testid="search-data"> | ||||
|         <div data-testid="wrapped-content">{children}</div> | ||||
|       </div> | ||||
|     )); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../components/recently-viewed/RecentlyViewed', () => { | ||||
|   return jest.fn().mockReturnValue(<p>RecentlyViewed</p>); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../components/my-data/MyDataHeader', () => { | ||||
|   return jest.fn().mockReturnValue(<p>MyDataHeader</p>); | ||||
| }); | ||||
| 
 | ||||
| jest.mock('../../utils/ServiceUtils', () => ({ | ||||
|   getAllServices: jest | ||||
|     .fn() | ||||
| @ -211,7 +224,13 @@ describe('Test MyData page', () => { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
|     const searchData = await findByTestId(container, 'search-data'); | ||||
|     const wrappedContent = await findByTestId(container, 'wrapped-content'); | ||||
|     const tabs = await findAllByTestId(container, 'tab'); | ||||
|     const myDataHeader = await findByText(container, /MyDataHeader/i); | ||||
| 
 | ||||
|     expect(searchData).toBeInTheDocument(); | ||||
|     expect(wrappedContent).toBeInTheDocument(); | ||||
|     expect(myDataHeader).toBeInTheDocument(); | ||||
|     expect(tabs.length).toBe(3); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -1,6 +1,8 @@ | ||||
| import { | ||||
|   findAllByTestId, | ||||
|   findByTestId, | ||||
|   findByText, | ||||
|   fireEvent, | ||||
|   queryByText, | ||||
|   render, | ||||
| } from '@testing-library/react'; | ||||
| @ -77,14 +79,41 @@ jest.mock('../../utils/ServiceUtils', () => ({ | ||||
|   serviceTypeLogo: jest.fn().mockReturnValue('img/path'), | ||||
| })); | ||||
| 
 | ||||
| jest.mock( | ||||
|   '../../components/common/title-breadcrumb/title-breadcrumb.component', | ||||
|   () => { | ||||
|     return jest.fn().mockReturnValue(<div>TitleBreadcrumb</div>); | ||||
|   } | ||||
| ); | ||||
| 
 | ||||
| jest.mock( | ||||
|   '../../components/Modals/ModalWithMarkdownEditor/ModalWithMarkdownEditor', | ||||
|   () => ({ | ||||
|     ModalWithMarkdownEditor: jest | ||||
|       .fn() | ||||
|       .mockReturnValue(<p>ModalWithMarkdownEditor</p>), | ||||
|   }) | ||||
| ); | ||||
| 
 | ||||
| describe('Test ServicePage Component', () => { | ||||
|   it('Component should render', async () => { | ||||
|     const { container } = render(<ServicePage />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
|     const servicePage = await findByTestId(container, 'service-page'); | ||||
|     const titleBreadcrumb = await findByText(container, /TitleBreadcrumb/i); | ||||
|     const descriptionContainer = await findByTestId( | ||||
|       container, | ||||
|       'description-container' | ||||
|     ); | ||||
|     const descriptionData = await findByTestId(container, 'description-data'); | ||||
|     const descriptionEdit = await findByTestId(container, 'description-edit'); | ||||
| 
 | ||||
|     expect(servicePage).toBeInTheDocument(); | ||||
|     expect(titleBreadcrumb).toBeInTheDocument(); | ||||
|     expect(descriptionContainer).toBeInTheDocument(); | ||||
|     expect(descriptionData).toBeInTheDocument(); | ||||
|     expect(descriptionEdit).toBeInTheDocument(); | ||||
|   }); | ||||
| 
 | ||||
|   it('Table should be visible if data is available', async () => { | ||||
| @ -107,4 +136,18 @@ describe('Test ServicePage Component', () => { | ||||
| 
 | ||||
|     expect(column.length).toBe(1); | ||||
|   }); | ||||
| 
 | ||||
|   it('on click of edit description icon ModalWithMarkdownEditor should open', async () => { | ||||
|     const { container } = render(<ServicePage />, { | ||||
|       wrapper: MemoryRouter, | ||||
|     }); | ||||
| 
 | ||||
|     const editIcon = await findByTestId(container, 'description-edit'); | ||||
| 
 | ||||
|     fireEvent.click(editIcon); | ||||
| 
 | ||||
|     expect( | ||||
|       await findByText(container, /ModalWithMarkdownEditor/i) | ||||
|     ).toBeInTheDocument(); | ||||
|   }); | ||||
| }); | ||||
|  | ||||
| @ -567,7 +567,9 @@ const ServicePage: FunctionComponent = () => { | ||||
| 
 | ||||
|             <div className="tw-bg-white tw-my-4"> | ||||
|               <div className="tw-col-span-3"> | ||||
|                 <div className="schema-description tw-flex tw-flex-col tw-h-full tw-relative tw-border tw-border-main tw-rounded-md"> | ||||
|                 <div | ||||
|                   className="schema-description tw-flex tw-flex-col tw-h-full tw-relative tw-border tw-border-main tw-rounded-md" | ||||
|                   data-testid="description-container"> | ||||
|                   <div className="tw-flex tw-items-center tw-px-3 tw-py-1 tw-border-b tw-border-main"> | ||||
|                     <span className="tw-flex-1 tw-leading-8 tw-m-0 tw-text-sm tw-font-normal"> | ||||
|                       Description | ||||
| @ -575,6 +577,7 @@ const ServicePage: FunctionComponent = () => { | ||||
|                     <div className="tw-flex-initial"> | ||||
|                       <button | ||||
|                         className="focus:tw-outline-none" | ||||
|                         data-testid="description-edit" | ||||
|                         onClick={onDescriptionEdit}> | ||||
|                         <SVGIcons | ||||
|                           alt="edit" | ||||
| @ -586,7 +589,7 @@ const ServicePage: FunctionComponent = () => { | ||||
|                     </div> | ||||
|                   </div> | ||||
|                   <div className="tw-px-3 tw-pl-5 tw-py-2 tw-overflow-y-auto"> | ||||
|                     <div data-testid="description" id="description" /> | ||||
|                     <div data-testid="description-data" id="description" /> | ||||
|                     {description ? ( | ||||
|                       <RichTextEditorPreviewer markdown={description} /> | ||||
|                     ) : ( | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Shailesh Parmar
						Shailesh Parmar