mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
bfc841d71d
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/52512 The way Maven works is that the artifacts are uploaded and available way before the browsing UI will allow us to browse them. By trying to download the `.pom` file instead of checking for the browsing website to be visible, we can shave some minutes during the release ## Changelog: [Internal] - Reviewed By: cortinico Differential Revision: D78008635 fbshipit-source-id: 96516163628d6d25db385d996a11b4af78db764a
88 lines
2.9 KiB
JavaScript
88 lines
2.9 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.
|
|
*
|
|
* @format
|
|
*/
|
|
|
|
const {verifyArtifactsAreOnMaven} = require('../verifyArtifactsAreOnMaven');
|
|
|
|
const mockSleep = jest.fn();
|
|
const silence = () => {};
|
|
const mockFetch = jest.fn();
|
|
const mockExit = jest.fn();
|
|
|
|
jest.mock('../utils.js', () => ({
|
|
log: silence,
|
|
sleep: mockSleep,
|
|
}));
|
|
|
|
process.exit = mockExit;
|
|
global.fetch = mockFetch;
|
|
|
|
describe('#verifyArtifactsAreOnMaven', () => {
|
|
beforeEach(jest.clearAllMocks);
|
|
|
|
it('waits for the packages to be published on maven when version has no v', async () => {
|
|
mockSleep.mockReturnValueOnce(Promise.resolve()).mockImplementation(() => {
|
|
throw new Error('Should not be called again!');
|
|
});
|
|
mockFetch
|
|
.mockReturnValueOnce(Promise.resolve({status: 404}))
|
|
.mockReturnValueOnce(Promise.resolve({status: 200}));
|
|
|
|
const version = '0.78.1';
|
|
await verifyArtifactsAreOnMaven(version);
|
|
|
|
expect(mockSleep).toHaveBeenCalledTimes(1);
|
|
expect(mockFetch).toHaveBeenCalledWith(
|
|
'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom',
|
|
);
|
|
});
|
|
|
|
it('waits for the packages to be published on maven, when version starts with v', async () => {
|
|
mockSleep.mockReturnValueOnce(Promise.resolve()).mockImplementation(() => {
|
|
throw new Error('Should not be called again!');
|
|
});
|
|
mockFetch
|
|
.mockReturnValueOnce(Promise.resolve({status: 404}))
|
|
.mockReturnValueOnce(Promise.resolve({status: 200}));
|
|
|
|
const version = 'v0.78.1';
|
|
await verifyArtifactsAreOnMaven(version);
|
|
|
|
expect(mockSleep).toHaveBeenCalledTimes(1);
|
|
expect(mockFetch).toHaveBeenCalledWith(
|
|
'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom',
|
|
);
|
|
});
|
|
|
|
it('passes immediately if packages are already on Maven', async () => {
|
|
mockFetch.mockReturnValueOnce(Promise.resolve({status: 200}));
|
|
|
|
const version = '0.78.1';
|
|
await verifyArtifactsAreOnMaven(version);
|
|
|
|
expect(mockSleep).toHaveBeenCalledTimes(0);
|
|
expect(mockFetch).toHaveBeenCalledWith(
|
|
'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom',
|
|
);
|
|
});
|
|
|
|
it('tries 90 times and then exits', async () => {
|
|
mockSleep.mockReturnValue(Promise.resolve());
|
|
mockFetch.mockReturnValue(Promise.resolve({status: 404}));
|
|
|
|
const version = '0.78.1';
|
|
await verifyArtifactsAreOnMaven(version);
|
|
|
|
expect(mockSleep).toHaveBeenCalledTimes(90);
|
|
expect(mockExit).toHaveBeenCalledWith(1);
|
|
expect(mockFetch).toHaveBeenCalledWith(
|
|
'https://repo1.maven.org/maven2/com/facebook/react/react-native-artifacts/0.78.1/react-native-artifacts-0.78.1.pom',
|
|
);
|
|
});
|
|
});
|