Files
react-native/scripts/releases/__tests__/set-rn-version-test.js
T
Alex HuntandFacebook GitHub Bot 80ec096e7c Create shared consts module for scripts
Summary:
Tidy up, removes risk of breakage when relocating inner modules.

Changelog: [Internal]

Reviewed By: lunaleaps

Differential Revision: D53813025

fbshipit-source-id: 43dc4a57191363546d6858cff311e260d416192f
2024-02-16 03:21:25 -08:00

104 lines
2.8 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
* @oncall react_native
*/
const readFileMock = jest.fn();
const writeFileMock = jest.fn();
const updateTemplatePackageMock = jest.fn();
jest.mock('fs', () => ({
...jest.requireActual<$FlowFixMe>('fs'),
promises: {
...jest.requireActual<$FlowFixMe>('fs').promises,
readFile: readFileMock,
writeFile: writeFileMock,
},
}));
jest.mock('./../update-template-package', () => updateTemplatePackageMock);
const {REPO_ROOT} = require('../../consts');
const {setReactNativeVersion} = require('../set-rn-version');
const path = require('path');
describe('setReactNativeVersion', () => {
beforeAll(() => {
readFileMock.mockImplementation(filePath => {
if (
filePath ===
path.join(
REPO_ROOT,
'packages/react-native/ReactAndroid/gradle.properties',
)
) {
return 'VERSION_NAME=1000.0.0\n';
}
if (
filePath === path.join(REPO_ROOT, 'packages/react-native/package.json')
) {
return JSON.stringify({
name: 'react-native',
version: '1000.0.0',
dependencies: {
'@react-native/package-a': '1000.0.0',
},
});
}
});
});
afterEach(() => {
writeFileMock.mockReset();
});
test('should set nightly version', async () => {
const version = '0.81.0-nightly-29282302-abcd1234';
const dependencyVersions = {
'@react-native/package-a': version,
};
await setReactNativeVersion(version, dependencyVersions, 'nightly');
expect(updateTemplatePackageMock).toHaveBeenCalledWith({
'@react-native/package-a': version,
'react-native': version,
});
for (const [filePath, contents] of writeFileMock.mock.calls) {
// Make snapshot names resilient to platform path sep differences
expect(formatGeneratedFile(contents)).toMatchSnapshot(
path.relative(REPO_ROOT, filePath).split(path.sep).join('/'),
);
}
});
test('should set release version', async () => {
const version = '0.81.0';
await setReactNativeVersion(version, null, 'release');
expect(updateTemplatePackageMock).toHaveBeenCalledWith({
'react-native': version,
});
for (const [filePath, contents] of writeFileMock.mock.calls) {
// Make snapshot names resilient to platform path sep differences
expect(formatGeneratedFile(contents)).toMatchSnapshot(
path.relative(REPO_ROOT, filePath).split(path.sep).join('/'),
);
}
});
});
function formatGeneratedFile(source: string) {
// Strip \@\generated annotation
return source.replace(
new RegExp('^ \\* @' + 'generated.*', 'gm'),
' * << GENERATED >>',
);
}