import { jest } from '@jest/globals';
import { render, Screen, screen } from '@testing-library/react';
import fs from 'fs-extra';
import path from 'path';
import { fileURLToPath } from 'url';
import { DiffBlock } from '.';
const dirname = path.dirname(fileURLToPath(import.meta.url));
const DIFF_PATH = '/static/diffs/expo-updates-js.diff';
const DIFF_CONTENT = fs.readFileSync(path.join(dirname, '../../../public', DIFF_PATH)).toString();
const validateDiffContent = (screen: Screen) => {
expect(screen.getByText('app.json')).toBeInTheDocument();
expect(screen.getByText('index.js')).toBeInTheDocument();
expect(screen.getByText('metro.config.js')).toBeInTheDocument();
expect(screen.getByText('"slug": "my-app",')).toBeInTheDocument();
expect(screen.getByText("import 'expo-asset';")).toBeInTheDocument();
expect(
screen.getByText("assetPlugins: ['expo-asset/tools/hashAssetFiles'],")
).toBeInTheDocument();
};
describe(DiffBlock, () => {
it('renders diff from file correctly', async () => {
global.fetch = jest.fn(() =>
Promise.resolve({
text: async () => DIFF_CONTENT,
} as Response)
);
render();
await screen.findByText('app.json');
validateDiffContent(screen);
});
it('renders raw diff correctly on first render', () => {
render();
validateDiffContent(screen);
});
it('renders diff correctly when no commit data', () => {
const noCommitDataDiff = DIFF_CONTENT.replaceAll(/\s+index.+/g, '');
expect(noCommitDataDiff.includes('index ')).toBe(false);
render();
validateDiffContent(screen);
});
});