From 7b00df98887041a6d70c21317a2e571800b064ad Mon Sep 17 00:00:00 2001 From: Raine Revere Date: Mon, 27 Feb 2023 15:33:19 +0000 Subject: [PATCH] Add --format repo tests. --- src/package-managers/npm.ts | 14 ++++++++++++-- test/format.test.ts | 27 +++++++++++++++++++++++++-- test/interactive.test.ts | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 5 deletions(-) diff --git a/src/package-managers/npm.ts b/src/package-managers/npm.ts index 7768caaf..6899de18 100644 --- a/src/package-managers/npm.ts +++ b/src/package-managers/npm.ts @@ -286,7 +286,15 @@ export const mockViewMany = ? mockReturnedVersions : mockReturnedVersions[name] - const version = (isPackument(partialPackument) ? partialPackument.version : partialPackument) || '' + const version = isPackument(partialPackument) ? partialPackument.version : partialPackument + + // if there is no version, hard exit + // otherwise getPackageProtected will swallow the error + if (!version) { + console.error(`No mock version supplied for ${name}`) + process.exit(1) + } + const time = (isPackument(partialPackument) && partialPackument.time?.[version]) || new Date().toISOString() const packument: Packument = { name, @@ -387,7 +395,7 @@ async function viewMany( } // select each field from the result object - return keyValueBy(fields, field => { + const resultNormalized = keyValueBy(fields, field => { let value = result[field] // index into the result object to get the dist-tag @@ -401,6 +409,8 @@ async function viewMany( [field]: value, } }) + + return resultNormalized } /** Memoize viewMany for --deep performance. */ diff --git a/test/format.test.ts b/test/format.test.ts index f4edcfd8..a830ec6a 100644 --- a/test/format.test.ts +++ b/test/format.test.ts @@ -1,5 +1,7 @@ import chai, { expect } from 'chai' import chaiString from 'chai-string' +import fs from 'fs/promises' +import os from 'os' import path from 'path' import spawn from 'spawn-please' import stubNpmView from './helpers/stubNpmView' @@ -11,8 +13,8 @@ process.env.NCU_TESTS = 'true' const bin = path.join(__dirname, '../build/src/bin/cli.js') -describe('--format time', () => { - it('show publish time', async () => { +describe('format', () => { + it('--format time', async () => { const timestamp = '2020-04-27T21:48:11.660Z' const stub = stubNpmView( { @@ -32,4 +34,25 @@ describe('--format time', () => { expect(output).contains(timestamp) stub.restore() }) + + it('--format repo', async () => { + const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'npm-check-updates-')) + const pkgFile = path.join(tempDir, 'package.json') + await fs.writeFile( + pkgFile, + JSON.stringify({ + dependencies: { + 'modern-diacritics': '^1.0.0', + }, + }), + 'utf-8', + ) + try { + await spawn('npm', ['install'], { cwd: tempDir }) + const output = await spawn('node', [bin, '--format', 'repo'], { cwd: tempDir }) + output.should.include('https://github.com/Mitsunee/modern-diacritics') + } finally { + await fs.rm(tempDir, { recursive: true, force: true }) + } + }) }) diff --git a/test/interactive.test.ts b/test/interactive.test.ts index 418f20a8..f65638a3 100644 --- a/test/interactive.test.ts +++ b/test/interactive.test.ts @@ -21,6 +21,7 @@ describe('--interactive', () => { 'ncu-test-v2': '2.0.0', 'ncu-test-tag': '1.1.0', 'ncu-test-return-version': '2.0.0', + 'modern-diacritics': '99.9.9', }, { spawn: true }, ) @@ -106,7 +107,11 @@ describe('--interactive', () => { await fs.writeFile( pkgFile, JSON.stringify({ - dependencies: { 'ncu-test-v2': '1.0.0', 'ncu-test-return-version': '1.0.0', 'ncu-test-tag': '1.0.0' }, + dependencies: { + 'ncu-test-v2': '1.0.0', + 'ncu-test-return-version': '1.0.0', + 'ncu-test-tag': '1.0.0', + }, }), 'utf-8', ) @@ -135,4 +140,32 @@ describe('--interactive', () => { await fs.rm(tempDir, { recursive: true, force: true }) } }) + + it('with --format repo', async () => { + const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'npm-check-updates-')) + const pkgFile = path.join(tempDir, 'package.json') + await fs.writeFile( + pkgFile, + JSON.stringify({ + dependencies: { + 'modern-diacritics': '^1.0.0', + }, + }), + 'utf-8', + ) + try { + await spawn('npm', ['install'], { cwd: tempDir }) + const output = await spawn('node', [bin, '--interactive', '--format', 'repo'], { + cwd: tempDir, + env: { + ...process.env, + INJECT_PROMPTS: JSON.stringify([['modern-diacritics'], true]), + }, + }) + + output.should.include('https://github.com/Mitsunee/modern-diacritics') + } finally { + await fs.rm(tempDir, { recursive: true, force: true }) + } + }) })