1*3f609562SBartosz Kaszubowskiimport { jest } from '@jest/globals'; 214b4cf7cSBartosz Kaszubowskiimport { render, Screen, screen } from '@testing-library/react'; 314b4cf7cSBartosz Kaszubowskiimport fs from 'fs-extra'; 414b4cf7cSBartosz Kaszubowskiimport path from 'path'; 5*3f609562SBartosz Kaszubowskiimport { fileURLToPath } from 'url'; 614b4cf7cSBartosz Kaszubowski 714b4cf7cSBartosz Kaszubowskiimport { DiffBlock } from '.'; 814b4cf7cSBartosz Kaszubowski 9*3f609562SBartosz Kaszubowskiconst dirname = path.dirname(fileURLToPath(import.meta.url)); 10*3f609562SBartosz Kaszubowski 1114b4cf7cSBartosz Kaszubowskiconst DIFF_PATH = '/static/diffs/expo-updates-js.diff'; 12*3f609562SBartosz Kaszubowskiconst DIFF_CONTENT = fs.readFileSync(path.join(dirname, '../../../public', DIFF_PATH)).toString(); 1314b4cf7cSBartosz Kaszubowski 1414b4cf7cSBartosz Kaszubowskiconst validateDiffContent = (screen: Screen) => { 1514b4cf7cSBartosz Kaszubowski expect(screen.getByText('app.json')).toBeInTheDocument(); 1614b4cf7cSBartosz Kaszubowski expect(screen.getByText('index.js')).toBeInTheDocument(); 1714b4cf7cSBartosz Kaszubowski expect(screen.getByText('metro.config.js')).toBeInTheDocument(); 1814b4cf7cSBartosz Kaszubowski 1914b4cf7cSBartosz Kaszubowski expect(screen.getByText('"slug": "my-app",')).toBeInTheDocument(); 2014b4cf7cSBartosz Kaszubowski expect(screen.getByText("import 'expo-asset';")).toBeInTheDocument(); 2114b4cf7cSBartosz Kaszubowski expect( 2214b4cf7cSBartosz Kaszubowski screen.getByText("assetPlugins: ['expo-asset/tools/hashAssetFiles'],") 2314b4cf7cSBartosz Kaszubowski ).toBeInTheDocument(); 2414b4cf7cSBartosz Kaszubowski}; 2514b4cf7cSBartosz Kaszubowski 2614b4cf7cSBartosz Kaszubowskidescribe(DiffBlock, () => { 2714b4cf7cSBartosz Kaszubowski it('renders diff from file correctly', async () => { 28*3f609562SBartosz Kaszubowski global.fetch = jest.fn(() => 29*3f609562SBartosz Kaszubowski Promise.resolve({ 3014b4cf7cSBartosz Kaszubowski text: async () => DIFF_CONTENT, 31*3f609562SBartosz Kaszubowski } as Response) 32*3f609562SBartosz Kaszubowski ); 3314b4cf7cSBartosz Kaszubowski 3414b4cf7cSBartosz Kaszubowski render(<DiffBlock source={DIFF_PATH} />); 3514b4cf7cSBartosz Kaszubowski 3614b4cf7cSBartosz Kaszubowski await screen.findByText('app.json'); 3714b4cf7cSBartosz Kaszubowski 3814b4cf7cSBartosz Kaszubowski validateDiffContent(screen); 3914b4cf7cSBartosz Kaszubowski }); 4014b4cf7cSBartosz Kaszubowski 4114b4cf7cSBartosz Kaszubowski it('renders raw diff correctly on first render', () => { 4214b4cf7cSBartosz Kaszubowski render(<DiffBlock raw={DIFF_CONTENT} />); 4314b4cf7cSBartosz Kaszubowski 4414b4cf7cSBartosz Kaszubowski validateDiffContent(screen); 4514b4cf7cSBartosz Kaszubowski }); 4614b4cf7cSBartosz Kaszubowski 4714b4cf7cSBartosz Kaszubowski it('renders diff correctly when no commit data', () => { 4814b4cf7cSBartosz Kaszubowski const noCommitDataDiff = DIFF_CONTENT.replaceAll(/\s+index.+/g, ''); 4914b4cf7cSBartosz Kaszubowski 5014b4cf7cSBartosz Kaszubowski expect(noCommitDataDiff.includes('index ')).toBe(false); 5114b4cf7cSBartosz Kaszubowski 5214b4cf7cSBartosz Kaszubowski render(<DiffBlock raw={noCommitDataDiff} />); 5314b4cf7cSBartosz Kaszubowski 5414b4cf7cSBartosz Kaszubowski validateDiffContent(screen); 5514b4cf7cSBartosz Kaszubowski }); 5614b4cf7cSBartosz Kaszubowski}); 57