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