1*14b4cf7cSBartosz Kaszubowskiimport { render, Screen, screen } from '@testing-library/react'; 2*14b4cf7cSBartosz Kaszubowskiimport fs from 'fs-extra'; 3*14b4cf7cSBartosz Kaszubowskiimport path from 'path'; 4*14b4cf7cSBartosz Kaszubowski 5*14b4cf7cSBartosz Kaszubowskiimport { DiffBlock } from '.'; 6*14b4cf7cSBartosz Kaszubowski 7*14b4cf7cSBartosz Kaszubowskiconst DIFF_PATH = '/static/diffs/expo-updates-js.diff'; 8*14b4cf7cSBartosz Kaszubowskiconst DIFF_CONTENT = fs.readFileSync(path.join(__dirname, '../../../public', DIFF_PATH)).toString(); 9*14b4cf7cSBartosz Kaszubowski 10*14b4cf7cSBartosz Kaszubowskiconst validateDiffContent = (screen: Screen) => { 11*14b4cf7cSBartosz Kaszubowski expect(screen.getByText('app.json')).toBeInTheDocument(); 12*14b4cf7cSBartosz Kaszubowski expect(screen.getByText('index.js')).toBeInTheDocument(); 13*14b4cf7cSBartosz Kaszubowski expect(screen.getByText('metro.config.js')).toBeInTheDocument(); 14*14b4cf7cSBartosz Kaszubowski 15*14b4cf7cSBartosz Kaszubowski expect(screen.getByText('"slug": "my-app",')).toBeInTheDocument(); 16*14b4cf7cSBartosz Kaszubowski expect(screen.getByText("import 'expo-asset';")).toBeInTheDocument(); 17*14b4cf7cSBartosz Kaszubowski expect( 18*14b4cf7cSBartosz Kaszubowski screen.getByText("assetPlugins: ['expo-asset/tools/hashAssetFiles'],") 19*14b4cf7cSBartosz Kaszubowski ).toBeInTheDocument(); 20*14b4cf7cSBartosz Kaszubowski}; 21*14b4cf7cSBartosz Kaszubowski 22*14b4cf7cSBartosz Kaszubowskidescribe(DiffBlock, () => { 23*14b4cf7cSBartosz Kaszubowski it('renders diff from file correctly', async () => { 24*14b4cf7cSBartosz Kaszubowski global.fetch = jest.fn().mockImplementation(() => ({ 25*14b4cf7cSBartosz Kaszubowski text: async () => DIFF_CONTENT, 26*14b4cf7cSBartosz Kaszubowski })); 27*14b4cf7cSBartosz Kaszubowski 28*14b4cf7cSBartosz Kaszubowski render(<DiffBlock source={DIFF_PATH} />); 29*14b4cf7cSBartosz Kaszubowski 30*14b4cf7cSBartosz Kaszubowski await screen.findByText('app.json'); 31*14b4cf7cSBartosz Kaszubowski 32*14b4cf7cSBartosz Kaszubowski validateDiffContent(screen); 33*14b4cf7cSBartosz Kaszubowski }); 34*14b4cf7cSBartosz Kaszubowski 35*14b4cf7cSBartosz Kaszubowski it('renders raw diff correctly on first render', () => { 36*14b4cf7cSBartosz Kaszubowski render(<DiffBlock raw={DIFF_CONTENT} />); 37*14b4cf7cSBartosz Kaszubowski 38*14b4cf7cSBartosz Kaszubowski validateDiffContent(screen); 39*14b4cf7cSBartosz Kaszubowski }); 40*14b4cf7cSBartosz Kaszubowski 41*14b4cf7cSBartosz Kaszubowski it('renders diff correctly when no commit data', () => { 42*14b4cf7cSBartosz Kaszubowski const noCommitDataDiff = DIFF_CONTENT.replaceAll(/\s+index.+/g, ''); 43*14b4cf7cSBartosz Kaszubowski 44*14b4cf7cSBartosz Kaszubowski expect(noCommitDataDiff.includes('index ')).toBe(false); 45*14b4cf7cSBartosz Kaszubowski 46*14b4cf7cSBartosz Kaszubowski render(<DiffBlock raw={noCommitDataDiff} />); 47*14b4cf7cSBartosz Kaszubowski 48*14b4cf7cSBartosz Kaszubowski validateDiffContent(screen); 49*14b4cf7cSBartosz Kaszubowski }); 50*14b4cf7cSBartosz Kaszubowski}); 51