/** * 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 {parseVersion, isReleaseBranch} = require('../version-utils'); let execResult = null; jest.mock('shelljs', () => ({ exec: () => { return { stdout: execResult, }; }, echo: message => { console.log(message); }, exit: exitCode => { exit(exitCode); }, })); describe('version-utils', () => { describe('isReleaseBranch', () => { it('should identify as release branch', () => { expect(isReleaseBranch('v0.66-stable')).toBe(true); expect(isReleaseBranch('0.66-stable')).toBe(true); expect(isReleaseBranch('made-up-stuff-stable')).toBe(true); }); it('should not identify as release branch', () => { expect(isReleaseBranch('main')).toBe(false); expect(isReleaseBranch('pull/32659')).toBe(false); }); }); describe('parseVersion', () => { it('should throw error if invalid match', () => { function testInvalidVersion() { parseVersion(''); } expect(testInvalidVersion).toThrowErrorMatchingInlineSnapshot( `"You must pass a correctly formatted version; couldn't parse "`, ); }); it('should parse pre-release version with .', () => { const {version, major, minor, patch, prerelease} = parseVersion('0.66.0-rc.4'); expect(version).toBe('0.66.0-rc.4'); expect(major).toBe('0'); expect(minor).toBe('66'); expect(patch).toBe('0'); expect(prerelease).toBe('rc.4'); }); it('should parse pre-release version with -', () => { const {version, major, minor, patch, prerelease} = parseVersion('0.66.0-rc-4'); expect(version).toBe('0.66.0-rc-4'); expect(major).toBe('0'); expect(minor).toBe('66'); expect(patch).toBe('0'); expect(prerelease).toBe('rc-4'); }); it('should parse stable version', () => { const {version, major, minor, patch, prerelease} = parseVersion('0.66.0'); expect(version).toBe('0.66.0'); expect(major).toBe('0'); expect(minor).toBe('66'); expect(patch).toBe('0'); expect(prerelease).toBeUndefined(); }); it('should parse pre-release version from tag', () => { const {version, major, minor, patch, prerelease} = parseVersion('v0.66.1-rc.4'); expect(version).toBe('0.66.1-rc.4'); expect(major).toBe('0'); expect(minor).toBe('66'); expect(patch).toBe('1'); expect(prerelease).toBe('rc.4'); }); it('should parse stable version from tag', () => { const {version, major, minor, patch, prerelease} = parseVersion('v0.66.0'); expect(version).toBe('0.66.0'); expect(major).toBe('0'); expect(minor).toBe('66'); expect(patch).toBe('0'); expect(prerelease).toBeUndefined(); }); it('should parse nightly fake version', () => { const {version, major, minor, patch, prerelease} = parseVersion('0.0.0'); expect(version).toBe('0.0.0'); expect(major).toBe('0'); expect(minor).toBe('0'); expect(patch).toBe('0'); expect(prerelease).toBeUndefined(); }); it('should parse dryrun fake version', () => { const {version, major, minor, patch, prerelease} = parseVersion('1000.0.0'); expect(version).toBe('1000.0.0'); expect(major).toBe('1000'); expect(minor).toBe('0'); expect(patch).toBe('0'); expect(prerelease).toBeUndefined(); }); }); });