mirror of
https://github.com/LukeHagar/vercel.git
synced 2025-12-10 12:57:47 +00:00
This PR fixes a bug where corepack (#7871) was not correctly setup because the lockfile autodetection and node version autodetection was overriding the PATH. It also fixes a bug where the log output was printed twice because we incorrectly prepended the PATH twice.
112 lines
2.8 KiB
TypeScript
Vendored
112 lines
2.8 KiB
TypeScript
Vendored
import { delimiter } from 'path';
|
|
import { getSpawnOptions } from '../src';
|
|
|
|
describe('Test `getSpawnOptions()`', () => {
|
|
const origProcessEnvPath = process.env.PATH;
|
|
|
|
beforeEach(() => {
|
|
process.env.PATH = undefined;
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env.PATH = origProcessEnvPath;
|
|
});
|
|
|
|
const cases: Array<{
|
|
name: string;
|
|
args: Parameters<typeof getSpawnOptions>;
|
|
envPath: string | undefined;
|
|
want: string | undefined;
|
|
}> = [
|
|
{
|
|
name: 'should do nothing when isDev and node14',
|
|
args: [
|
|
{ isDev: true },
|
|
{ major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
|
],
|
|
envPath: '/foo',
|
|
want: '/foo',
|
|
},
|
|
{
|
|
name: 'should do nothing when isDev and node16',
|
|
args: [
|
|
{ isDev: true },
|
|
{ major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
|
],
|
|
envPath: '/foo',
|
|
want: '/foo',
|
|
},
|
|
{
|
|
name: 'should replace 14 with 16 when only path',
|
|
args: [
|
|
{ isDev: false },
|
|
{ major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
|
],
|
|
envPath: '/node14/bin',
|
|
want: '/node16/bin',
|
|
},
|
|
{
|
|
name: 'should replace 14 with 16 at beginning',
|
|
args: [
|
|
{ isDev: false },
|
|
{ major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
|
],
|
|
envPath: `/node14/bin${delimiter}/foo`,
|
|
want: `/node16/bin${delimiter}/foo`,
|
|
},
|
|
{
|
|
name: 'should replace 14 with 16 at end',
|
|
args: [
|
|
{ isDev: false },
|
|
{ major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
|
],
|
|
envPath: `/foo${delimiter}/node14/bin`,
|
|
want: `/foo${delimiter}/node16/bin`,
|
|
},
|
|
{
|
|
name: 'should replace 14 with 16 in middle',
|
|
args: [
|
|
{ isDev: false },
|
|
{ major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
|
],
|
|
envPath: `/foo${delimiter}/node14/bin${delimiter}/bar`,
|
|
want: `/foo${delimiter}/node16/bin${delimiter}/bar`,
|
|
},
|
|
{
|
|
name: 'should prepend 16 at beginning when nothing to replace',
|
|
args: [
|
|
{ isDev: false },
|
|
{ major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
|
],
|
|
envPath: `/foo`,
|
|
want: `/node16/bin${delimiter}/foo`,
|
|
},
|
|
{
|
|
name: 'should prepend 16 at beginning no path input',
|
|
args: [
|
|
{ isDev: false },
|
|
{ major: 16, range: '16.x', runtime: 'nodejs16.x' },
|
|
],
|
|
envPath: '',
|
|
want: `/node16/bin`,
|
|
},
|
|
{
|
|
name: 'should replace 12 with 14 when only path',
|
|
args: [
|
|
{ isDev: false },
|
|
{ major: 14, range: '14.x', runtime: 'nodejs14.x' },
|
|
],
|
|
envPath: '/node12/bin',
|
|
want: '/node14/bin',
|
|
},
|
|
];
|
|
|
|
for (const { name, args, envPath, want } of cases) {
|
|
it(name, () => {
|
|
process.env.PATH = envPath;
|
|
const opts = getSpawnOptions(...args);
|
|
expect(opts.env?.PATH).toBe(want);
|
|
});
|
|
}
|
|
});
|