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/MyApp/AppDelegate.mm')).toBeInTheDocument();
17*1faf74fcSJon Samp  expect(screen.getByText('ios/Podfile')).toBeInTheDocument();
1814b4cf7cSBartosz Kaszubowski
19*1faf74fcSJon Samp  expect(screen.getByText('#import <UIKit/UIKit.h>')).toBeInTheDocument();
2014b4cf7cSBartosz Kaszubowski  expect(
21*1faf74fcSJon Samp    screen.getByText(
22*1faf74fcSJon Samp      '@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>'
23*1faf74fcSJon Samp    )
2414b4cf7cSBartosz Kaszubowski  ).toBeInTheDocument();
25*1faf74fcSJon Samp  expect(screen.getByText('#import <Expo/Expo.h>')).toBeInTheDocument();
2614b4cf7cSBartosz Kaszubowski};
2714b4cf7cSBartosz Kaszubowski
2814b4cf7cSBartosz Kaszubowskidescribe(DiffBlock, () => {
2914b4cf7cSBartosz Kaszubowski  it('renders diff from file correctly', async () => {
303f609562SBartosz Kaszubowski    global.fetch = jest.fn(() =>
313f609562SBartosz Kaszubowski      Promise.resolve({
3214b4cf7cSBartosz Kaszubowski        text: async () => DIFF_CONTENT,
333f609562SBartosz Kaszubowski      } as Response)
343f609562SBartosz Kaszubowski    );
3514b4cf7cSBartosz Kaszubowski
3614b4cf7cSBartosz Kaszubowski    render(<DiffBlock source={DIFF_PATH} />);
3714b4cf7cSBartosz Kaszubowski
38*1faf74fcSJon Samp    await screen.findByText('ios/MyApp/AppDelegate.h');
3914b4cf7cSBartosz Kaszubowski
4014b4cf7cSBartosz Kaszubowski    validateDiffContent(screen);
4114b4cf7cSBartosz Kaszubowski  });
4214b4cf7cSBartosz Kaszubowski
4314b4cf7cSBartosz Kaszubowski  it('renders raw diff correctly on first render', () => {
4414b4cf7cSBartosz Kaszubowski    render(<DiffBlock raw={DIFF_CONTENT} />);
4514b4cf7cSBartosz Kaszubowski
4614b4cf7cSBartosz Kaszubowski    validateDiffContent(screen);
4714b4cf7cSBartosz Kaszubowski  });
4814b4cf7cSBartosz Kaszubowski
4914b4cf7cSBartosz Kaszubowski  it('renders diff correctly when no commit data', () => {
5014b4cf7cSBartosz Kaszubowski    const noCommitDataDiff = DIFF_CONTENT.replaceAll(/\s+index.+/g, '');
5114b4cf7cSBartosz Kaszubowski
5214b4cf7cSBartosz Kaszubowski    expect(noCommitDataDiff.includes('index ')).toBe(false);
5314b4cf7cSBartosz Kaszubowski
5414b4cf7cSBartosz Kaszubowski    render(<DiffBlock raw={noCommitDataDiff} />);
5514b4cf7cSBartosz Kaszubowski
5614b4cf7cSBartosz Kaszubowski    validateDiffContent(screen);
5714b4cf7cSBartosz Kaszubowski  });
5814b4cf7cSBartosz Kaszubowski});
59