13f609562SBartosz 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';
53f609562SBartosz Kaszubowskiimport { fileURLToPath } from 'url';
614b4cf7cSBartosz Kaszubowski
714b4cf7cSBartosz Kaszubowskiimport { DiffBlock } from '.';
814b4cf7cSBartosz Kaszubowski
93f609562SBartosz Kaszubowskiconst dirname = path.dirname(fileURLToPath(import.meta.url));
103f609562SBartosz Kaszubowski
11*1faf74fcSJon Sampconst DIFF_PATH = '/static/diffs/expo-ios.diff';
123f609562SBartosz Kaszubowskiconst DIFF_CONTENT = fs.readFileSync(path.join(dirname, '../../../public', DIFF_PATH)).toString();
1314b4cf7cSBartosz Kaszubowski
1414b4cf7cSBartosz Kaszubowskiconst validateDiffContent = (screen: Screen) => {
15*1faf74fcSJon Samp  expect(screen.getByText('ios/MyApp/AppDelegate.h')).toBeInTheDocument();
16*1faf74fcSJon Samp  expect(screen.getByText('ios/Podfile')).toBeInTheDocument();
17*1faf74fcSJon Samp  expect(screen.getByText('#import <UIKit/UIKit.h>')).toBeInTheDocument();
18*1faf74fcSJon Samp  expect(screen.getByText('#import <Expo/Expo.h>')).toBeInTheDocument();
1914b4cf7cSBartosz Kaszubowski};
2014b4cf7cSBartosz Kaszubowski
2114b4cf7cSBartosz Kaszubowskidescribe(DiffBlock, () => {
2214b4cf7cSBartosz Kaszubowski  it('renders diff from file correctly', async () => {
233f609562SBartosz Kaszubowski    global.fetch = jest.fn(() =>
243f609562SBartosz Kaszubowski      Promise.resolve({
2514b4cf7cSBartosz Kaszubowski        text: async () => DIFF_CONTENT,
263f609562SBartosz Kaszubowski      } as Response)
273f609562SBartosz Kaszubowski    );
2814b4cf7cSBartosz Kaszubowski
2914b4cf7cSBartosz Kaszubowski    render(<DiffBlock source={DIFF_PATH} />);
3014b4cf7cSBartosz Kaszubowski
31*1faf74fcSJon Samp    await screen.findByText('ios/MyApp/AppDelegate.h');
3214b4cf7cSBartosz Kaszubowski
3314b4cf7cSBartosz Kaszubowski    validateDiffContent(screen);
3414b4cf7cSBartosz Kaszubowski  });
3514b4cf7cSBartosz Kaszubowski
3614b4cf7cSBartosz Kaszubowski  it('renders raw diff correctly on first render', () => {
3714b4cf7cSBartosz Kaszubowski    render(<DiffBlock raw={DIFF_CONTENT} />);
3814b4cf7cSBartosz Kaszubowski
3914b4cf7cSBartosz Kaszubowski    validateDiffContent(screen);
4014b4cf7cSBartosz Kaszubowski  });
4114b4cf7cSBartosz Kaszubowski
4214b4cf7cSBartosz Kaszubowski  it('renders diff correctly when no commit data', () => {
4314b4cf7cSBartosz Kaszubowski    const noCommitDataDiff = DIFF_CONTENT.replaceAll(/\s+index.+/g, '');
4414b4cf7cSBartosz Kaszubowski
4514b4cf7cSBartosz Kaszubowski    expect(noCommitDataDiff.includes('index ')).toBe(false);
4614b4cf7cSBartosz Kaszubowski
4714b4cf7cSBartosz Kaszubowski    render(<DiffBlock raw={noCommitDataDiff} />);
4814b4cf7cSBartosz Kaszubowski
4914b4cf7cSBartosz Kaszubowski    validateDiffContent(screen);
5014b4cf7cSBartosz Kaszubowski  });
5114b4cf7cSBartosz Kaszubowski});
52