From 8112d7bae0c41c6f2d77a19cae7deedad3d810d9 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Fri, 12 Aug 2022 13:33:13 +0000 Subject: [PATCH] test: remove reliance on built tarballs in E2E tests Remove reliance on tarballs during E2E. Instead we always download the package from the private NPM server. --- .../e2e/tests/misc/cli-exit-interop.ts | 8 +++--- .../e2e/tests/packages/webpack/test-app.ts | 4 +-- .../tests/update/update-multiple-versions.ts | 9 +++--- tests/legacy-cli/e2e/tests/update/update.ts | 9 +++--- tests/legacy-cli/e2e/utils/assets.ts | 28 ++++++++++--------- tests/legacy-cli/e2e/utils/project.ts | 6 ++-- 6 files changed, 33 insertions(+), 31 deletions(-) diff --git a/tests/legacy-cli/e2e/tests/misc/cli-exit-interop.ts b/tests/legacy-cli/e2e/tests/misc/cli-exit-interop.ts index f0d13c4651..e22ddd5a41 100644 --- a/tests/legacy-cli/e2e/tests/misc/cli-exit-interop.ts +++ b/tests/legacy-cli/e2e/tests/misc/cli-exit-interop.ts @@ -1,6 +1,5 @@ import { createProjectFromAsset } from '../../utils/assets'; import { moveFile, replaceInFile } from '../../utils/fs'; -import { setRegistry } from '../../utils/packages'; import { noSilentNg } from '../../utils/process'; import { useCIChrome, useCIDefaults } from '../../utils/project'; import { expectToFail } from '../../utils/utils'; @@ -12,11 +11,12 @@ import { expectToFail } from '../../utils/utils'; */ export default async function () { + let restoreRegistry: (() => Promise) | undefined; + try { // We need to use the public registry because in the local NPM server we don't have // older versions @angular/cli packages which would cause `npm install` during `ng update` to fail. - await setRegistry(false); - await createProjectFromAsset('13.0-project', true); + restoreRegistry = await createProjectFromAsset('13.0-project', true); // A missing stylesheet error will trigger the stuck process issue with v13 when building await moveFile('src/styles.css', 'src/styles.scss'); @@ -30,6 +30,6 @@ export default async function () { await useCIDefaults('thirteen-project'); await noSilentNg('test', '--watch=false'); } finally { - await setRegistry(true); + await restoreRegistry?.(); } } diff --git a/tests/legacy-cli/e2e/tests/packages/webpack/test-app.ts b/tests/legacy-cli/e2e/tests/packages/webpack/test-app.ts index 37546944cb..2ddcca27f9 100644 --- a/tests/legacy-cli/e2e/tests/packages/webpack/test-app.ts +++ b/tests/legacy-cli/e2e/tests/packages/webpack/test-app.ts @@ -5,8 +5,7 @@ import { execWithEnv } from '../../../utils/process'; export default async function () { const webpackCLIBin = normalize('node_modules/.bin/webpack-cli'); - - await createProjectFromAsset('webpack/test-app'); + const restoreRegistry = await createProjectFromAsset('webpack/test-app'); // DISABLE_V8_COMPILE_CACHE=1 is required to disable the `v8-compile-cache` package. // It currently does not support dynamic import expressions which are now required by the @@ -30,4 +29,5 @@ export default async function () { 'DISABLE_V8_COMPILE_CACHE': '1', }); await expectFileToMatch('dist/app.main.js', 'AppModule'); + await restoreRegistry(); } diff --git a/tests/legacy-cli/e2e/tests/update/update-multiple-versions.ts b/tests/legacy-cli/e2e/tests/update/update-multiple-versions.ts index afae2e771f..02e4bb7dae 100644 --- a/tests/legacy-cli/e2e/tests/update/update-multiple-versions.ts +++ b/tests/legacy-cli/e2e/tests/update/update-multiple-versions.ts @@ -1,14 +1,13 @@ import { createProjectFromAsset } from '../../utils/assets'; -import { installWorkspacePackages, setRegistry } from '../../utils/packages'; +import { setRegistry } from '../../utils/packages'; import { ng } from '../../utils/process'; import { isPrereleaseCli } from '../../utils/project'; import { expectToFail } from '../../utils/utils'; export default async function () { + let restoreRegistry: (() => Promise) | undefined; try { - await createProjectFromAsset('12.0-project', true, true); - await setRegistry(false); - await installWorkspacePackages(); + restoreRegistry = await createProjectFromAsset('12.0-project', true); await setRegistry(true); const extraArgs = ['--force']; @@ -38,6 +37,6 @@ export default async function () { ); } } finally { - await setRegistry(true); + await restoreRegistry?.(); } } diff --git a/tests/legacy-cli/e2e/tests/update/update.ts b/tests/legacy-cli/e2e/tests/update/update.ts index 25812d3045..989d5910fe 100644 --- a/tests/legacy-cli/e2e/tests/update/update.ts +++ b/tests/legacy-cli/e2e/tests/update/update.ts @@ -2,16 +2,17 @@ import { appendFile } from 'fs/promises'; import { SemVer } from 'semver'; import { createProjectFromAsset } from '../../utils/assets'; import { expectFileMatchToExist, readFile } from '../../utils/fs'; -import { getActivePackageManager, setRegistry } from '../../utils/packages'; +import { getActivePackageManager } from '../../utils/packages'; import { ng, noSilentNg } from '../../utils/process'; import { isPrereleaseCli, useCIChrome, useCIDefaults, NgCLIVersion } from '../../utils/project'; export default async function () { + let restoreRegistry: (() => Promise) | undefined; + try { // We need to use the public registry because in the local NPM server we don't have // older versions @angular/cli packages which would cause `npm install` during `ng update` to fail. - await setRegistry(false); - await createProjectFromAsset('12.0-project', true); + restoreRegistry = await createProjectFromAsset('12.0-project', true); // If using npm, enable legacy peer deps mode to avoid defects in npm 7+'s peer dependency resolution // Example error where 11.2.14 satisfies the SemVer range ^11.0.0 but still fails: @@ -49,7 +50,7 @@ export default async function () { } } } finally { - await setRegistry(true); + await restoreRegistry?.(); } // Update Angular current build diff --git a/tests/legacy-cli/e2e/utils/assets.ts b/tests/legacy-cli/e2e/utils/assets.ts index 6b472d177d..4fc9fee815 100644 --- a/tests/legacy-cli/e2e/utils/assets.ts +++ b/tests/legacy-cli/e2e/utils/assets.ts @@ -2,10 +2,10 @@ import { join } from 'path'; import { chmod } from 'fs/promises'; import glob from 'glob'; import { getGlobalVariable } from './env'; -import { relative, resolve } from 'path'; -import { copyFile, writeFile } from './fs'; -import { installWorkspacePackages } from './packages'; -import { useBuiltPackages } from './project'; +import { resolve } from 'path'; +import { copyFile } from './fs'; +import { installWorkspacePackages, setRegistry } from './packages'; +import { useBuiltPackagesVersions } from './project'; export function assetDir(assetName: string) { return join(__dirname, '../assets', assetName); @@ -42,24 +42,26 @@ export function copyAssets(assetName: string, to?: string) { .then(() => tempRoot); } +/** + * @returns a method that once called will restore the environment + * to use the local NPM registry. + * */ export async function createProjectFromAsset( assetName: string, useNpmPackages = false, skipInstall = false, -) { +): Promise<() => Promise> { const dir = await copyAssets(assetName); process.chdir(dir); - if (!useNpmPackages) { - await useBuiltPackages(); - if (!getGlobalVariable('ci')) { - const testRegistry = getGlobalVariable('package-registry'); - await writeFile('.npmrc', `registry=${testRegistry}`); - } - } + await setRegistry(!useNpmPackages /** useTestRegistry */); + + if (!useNpmPackages) { + await useBuiltPackagesVersions(); + } if (!skipInstall) { await installWorkspacePackages(); } - return dir; + return () => setRegistry(true /** useTestRegistry */); } diff --git a/tests/legacy-cli/e2e/utils/project.ts b/tests/legacy-cli/e2e/utils/project.ts index 8a06b02b0e..9704721bfc 100644 --- a/tests/legacy-cli/e2e/utils/project.ts +++ b/tests/legacy-cli/e2e/utils/project.ts @@ -94,16 +94,16 @@ export async function prepareProjectForE2e(name: string) { await gitCommit('prepare-project-for-e2e'); } -export function useBuiltPackages(): Promise { +export function useBuiltPackagesVersions(): Promise { return updateJsonFile('package.json', (json) => { json['dependencies'] ??= {}; json['devDependencies'] ??= {}; for (const packageName of Object.keys(packages)) { if (packageName in json['dependencies']) { - json['dependencies'][packageName] = packages[packageName].tar; + json['dependencies'][packageName] = packages[packageName].version; } else if (packageName in json['devDependencies']) { - json['devDependencies'][packageName] = packages[packageName].tar; + json['devDependencies'][packageName] = packages[packageName].version; } } });