import * as React from 'react'; import { render, screen } from '@testing-library/react'; import Directory from '../index'; import directory from '../../../../directory/directory.mjs'; describe('Directory', () => { const directoryKeys = Object.keys(directory); directoryKeys.forEach((directoryKey) => { it(`should render the ${directoryKey} Directory`, () => { const directoryObject = directory[directoryKey]; const url = `/${directoryKey}`; render(); const rootText = directoryObject['productRoot'].title; const itemsText = Object.values(directoryObject['items']).map( (e) => e.title ); const rootNode = screen.getByText(rootText); expect(rootNode).toBeTruthy(); itemsText.forEach((text) => { const textNode = screen.getByText(text); expect(textNode).toBeTruthy(); }); }); }); it('should throw an error for a missing url', () => { const consoleErrorFn = jest .spyOn(console, 'error') .mockImplementation(() => jest.fn()); expect(() => render() ).toThrow("Cannot read properties of undefined (reading 'productRoot')"); consoleErrorFn.mockRestore(); }); it(`should render the start Directory items`, () => { const directoryObject = directory[`start`]; const url = `/start`; render(); const rootText = directoryObject['productRoot'].title; const itemsText = Object.values(directoryObject['items']).map((e) => { return { text: e.title, subItems: e.items }; }); const rootNode = screen.getByText(rootText); expect(rootNode).toBeTruthy(); itemsText.forEach((textObject) => { const textNode = screen.getByText(textObject.text); expect(textNode).toBeTruthy(); textObject.subItems.forEach((subItem) => { const subItemNode = screen.getByText(subItem.title); expect(subItemNode).toBeTruthy(); }); }); }); const filters = [ 'js', 'react', 'react-native', 'angular', 'vue', 'next', 'android', 'ios', 'flutter' ]; filters.forEach((filter) => { it(`should render the ${filter} values`, () => { const directoryObject = directory[`start`]; const url = `/start`; render(); const rootText = directoryObject['productRoot'].title; const itemsText = Object.values(directoryObject['items']).map((e) => { return { text: e.title, subItems: e.items }; }); const rootNode = screen.getByText(rootText); expect(rootNode).toBeTruthy(); itemsText.forEach((textObject) => { textObject.subItems.forEach((subItem) => { if (subItem.filters.includes(filter)) { const subItemNode = screen.getByText(subItem.title); expect(subItemNode).toBeTruthy(); } else { const subItemNode = screen.queryByText(subItem.title); expect(subItemNode).not.toBeInTheDocument(); } }); }); }); }); });