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