1/** 2 * Copyright (c) Meta Platforms, Inc. and affiliates. 3 * 4 * This source code is licensed under the MIT license found in the 5 * LICENSE file in the root directory of this source tree. 6 * 7 * @format 8 */ 9 10const { 11 parseVersion, 12 isTaggedLatest, 13 isReleaseBranch, 14} = require('../version-utils'); 15 16let execResult = null; 17jest.mock('shelljs', () => ({ 18 exec: () => { 19 return { 20 stdout: execResult, 21 }; 22 }, 23})); 24 25describe('version-utils', () => { 26 describe('isReleaseBranch', () => { 27 it('should identify as release branch', () => { 28 expect(isReleaseBranch('v0.66-stable')).toBe(true); 29 expect(isReleaseBranch('0.66-stable')).toBe(true); 30 expect(isReleaseBranch('made-up-stuff-stable')).toBe(true); 31 }); 32 it('should not identify as release branch', () => { 33 expect(isReleaseBranch('main')).toBe(false); 34 expect(isReleaseBranch('pull/32659')).toBe(false); 35 }); 36 }); 37 describe('isTaggedLatest', () => { 38 it('it should identify commit as tagged `latest`', () => { 39 execResult = '6c19dc3266b84f47a076b647a1c93b3c3b69d2c5\n'; 40 expect(isTaggedLatest('6c19dc3266b84f47a076b647a1c93b3c3b69d2c5')).toBe( 41 true, 42 ); 43 }); 44 it('it should not identify commit as tagged `latest`', () => { 45 execResult = '6c19dc3266b84f47a076b647a1c93b3c3b69d2c5\n'; 46 expect(isTaggedLatest('6c19dc3266b8')).toBe(false); 47 }); 48 }); 49 50 describe('parseVersion', () => { 51 it('should throw error if invalid match', () => { 52 function testInvalidVersion() { 53 parseVersion('<invalid version>'); 54 } 55 expect(testInvalidVersion).toThrowErrorMatchingInlineSnapshot( 56 `"You must pass a correctly formatted version; couldn't parse <invalid version>"`, 57 ); 58 }); 59 60 it('should parse pre-release version with .', () => { 61 const {version, major, minor, patch, prerelease} = 62 parseVersion('0.66.0-rc.4'); 63 expect(version).toBe('0.66.0-rc.4'); 64 expect(major).toBe('0'); 65 expect(minor).toBe('66'); 66 expect(patch).toBe('0'); 67 expect(prerelease).toBe('rc.4'); 68 }); 69 70 it('should parse pre-release version with -', () => { 71 const {version, major, minor, patch, prerelease} = 72 parseVersion('0.66.0-rc-4'); 73 expect(version).toBe('0.66.0-rc-4'); 74 expect(major).toBe('0'); 75 expect(minor).toBe('66'); 76 expect(patch).toBe('0'); 77 expect(prerelease).toBe('rc-4'); 78 }); 79 80 it('should parse stable version', () => { 81 const {version, major, minor, patch, prerelease} = parseVersion('0.66.0'); 82 expect(version).toBe('0.66.0'); 83 expect(major).toBe('0'); 84 expect(minor).toBe('66'); 85 expect(patch).toBe('0'); 86 expect(prerelease).toBeUndefined(); 87 }); 88 it('should parse pre-release version from tag', () => { 89 const {version, major, minor, patch, prerelease} = 90 parseVersion('v0.66.1-rc.4'); 91 expect(version).toBe('0.66.1-rc.4'); 92 expect(major).toBe('0'); 93 expect(minor).toBe('66'); 94 expect(patch).toBe('1'); 95 expect(prerelease).toBe('rc.4'); 96 }); 97 98 it('should parse stable version from tag', () => { 99 const {version, major, minor, patch, prerelease} = 100 parseVersion('v0.66.0'); 101 expect(version).toBe('0.66.0'); 102 expect(major).toBe('0'); 103 expect(minor).toBe('66'); 104 expect(patch).toBe('0'); 105 expect(prerelease).toBeUndefined(); 106 }); 107 108 it('should parse nightly fake version', () => { 109 const {version, major, minor, patch, prerelease} = parseVersion('0.0.0'); 110 expect(version).toBe('0.0.0'); 111 expect(major).toBe('0'); 112 expect(minor).toBe('0'); 113 expect(patch).toBe('0'); 114 expect(prerelease).toBeUndefined(); 115 }); 116 117 it('should parse dryrun fake version', () => { 118 const {version, major, minor, patch, prerelease} = 119 parseVersion('1000.0.0'); 120 expect(version).toBe('1000.0.0'); 121 expect(major).toBe('1000'); 122 expect(minor).toBe('0'); 123 expect(patch).toBe('0'); 124 expect(prerelease).toBeUndefined(); 125 }); 126 }); 127}); 128