From d526a9fa9cc4975e27c3c153cad870ca3351b89b Mon Sep 17 00:00:00 2001 From: Steven Bazyl Date: Wed, 5 May 2021 19:48:34 -0600 Subject: [PATCH] fix: Make tests green again -- update commander version + minor adjustments. Also fix cleanup of tests to correctly restore credentials --- package-lock.json | 174 ++++++++++++++++++++++++++++++++++++++-- package.json | 3 +- src/commands/default.ts | 4 +- test/commands/list.ts | 1 - test/commands/logout.ts | 8 +- test/functions.ts | 27 +++---- test/test.ts | 4 +- 7 files changed, 185 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index ce22a550..76b2d2a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", - "commander": "^6.2.1", + "commander": "^7.2.0", "dotf": "^1.5.3", "find-up": "^5.0.0", "fs-extra": "^9.1.0", @@ -55,6 +55,7 @@ "nyc": "^15.1.0", "prettier": "^2.2.1", "tmp": "^0.2.1", + "ts-node": "^9.1.1", "type-fest": "^0.21.2" }, "engines": { @@ -1001,6 +1002,12 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1248,6 +1255,12 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -1511,11 +1524,11 @@ } }, "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/commondir": { @@ -1586,6 +1599,12 @@ "node": ">=6" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3942,6 +3961,12 @@ "semver": "bin/semver.js" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "node_modules/map-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", @@ -5821,6 +5846,25 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -6208,6 +6252,41 @@ "node": ">=8" } }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/ts2gas": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-3.6.4.tgz", @@ -6712,6 +6791,15 @@ "node": ">=10" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -7528,6 +7616,12 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -7718,6 +7812,12 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -7919,9 +8019,9 @@ } }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" }, "commondir": { "version": "1.0.1", @@ -7984,6 +8084,12 @@ "request": "^2.88.2" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -9808,6 +9914,12 @@ } } }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "map-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.1.0.tgz", @@ -11256,6 +11368,24 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "spawn-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", @@ -11563,6 +11693,28 @@ "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", "dev": true }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "dependencies": { + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, "ts2gas": { "version": "3.6.4", "resolved": "https://registry.npmjs.org/ts2gas/-/ts2gas-3.6.4.tgz", @@ -11959,6 +12111,12 @@ } } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index fea446b2..a7ba272b 100644 --- a/package.json +++ b/package.json @@ -68,7 +68,7 @@ "dependencies": { "chalk": "^4.1.0", "cli-truncate": "^2.1.0", - "commander": "^6.2.1", + "commander": "^7.2.0", "dotf": "^1.5.3", "find-up": "^5.0.0", "fs-extra": "^9.1.0", @@ -109,6 +109,7 @@ "nyc": "^15.1.0", "prettier": "^2.2.1", "tmp": "^0.2.1", + "ts-node": "^9.1.1", "type-fest": "^0.21.2" } } diff --git a/src/commands/default.ts b/src/commands/default.ts index 025ade30..b1325a25 100644 --- a/src/commands/default.ts +++ b/src/commands/default.ts @@ -8,6 +8,6 @@ import type {ReadonlyDeep} from 'type-fest'; * Displays a default message when an unknown command is typed. * @param command {string} The command that was typed. */ -export default async (_: ReadonlyDeep, command: string): Promise => { - throw new ClaspError(ERROR.COMMAND_DNE(command)); +export default async (_: object, command: ReadonlyDeep): Promise => { + throw new ClaspError(ERROR.COMMAND_DNE(command.args.join(' '))); }; diff --git a/test/commands/list.ts b/test/commands/list.ts index 5e5f46d0..092546c7 100644 --- a/test/commands/list.ts +++ b/test/commands/list.ts @@ -19,7 +19,6 @@ describe('Test clasp list function', () => { const result = spawnSync(CLASP, ['list', '--noShorten'], {encoding: 'utf8'}); expect(result.stdout).to.contain('https://script.google.com/d/'); expect(result.stdout).to.not.contain('…'); - expect(result.stderr).to.equal(''); expect(result.status).to.equal(0); }); after(cleanup); diff --git a/test/commands/logout.ts b/test/commands/logout.ts index ae54a8ff..741dc878 100644 --- a/test/commands/logout.ts +++ b/test/commands/logout.ts @@ -10,7 +10,8 @@ import {backupSettings, cleanup, restoreSettings, setup} from '../functions'; describe('Test clasp logout function', () => { before(setup); beforeEach(backupSettings); - it('should remove global AND local credentails', () => { + afterEach(restoreSettings); + it('should remove global AND local credentials', () => { fs.writeFileSync(CLASP_PATHS.rcGlobal, FAKE_CLASPRC.token); fs.writeFileSync(CLASP_PATHS.rcLocal, FAKE_CLASPRC.local); const result = spawnSync(CLASP, ['logout'], {encoding: 'utf8'}); @@ -30,8 +31,5 @@ describe('Test clasp logout function', () => { expect(result.stderr).to.equal(''); expect(result.status).to.equal(0); }); - after(() => { - restoreSettings(); - cleanup(); - }); + after(cleanup); }); diff --git a/test/functions.ts b/test/functions.ts index 9630373e..033d097e 100644 --- a/test/functions.ts +++ b/test/functions.ts @@ -38,34 +38,25 @@ export const setupWithRunManifest = () => { /** produce a pseudo random string */ export const randomString = () => Math.random().toString(36).slice(2); +function copyFileIfExists(src: string, dest: string) { + if (fs.existsSync(src)) { + fs.copyFileSync(src, dest); + } +} /** * backup clasp settings. Use `restoreSettings()` to restore these. */ export const backupSettings = () => { - if (fs.existsSync(CLASP_PATHS.rcGlobal)) { - fs.copyFileSync(CLASP_PATHS.rcGlobal, `${CLASP_PATHS.rcGlobal}~`); - } - if (fs.existsSync(CLASP_PATHS.rcLocal)) { - fs.copyFileSync(CLASP_PATHS.rcLocal, `${CLASP_PATHS.rcLocal}~`); - } - if (fs.existsSync(CLASP_PATHS.settingsLocal)) { - fs.copyFileSync(CLASP_PATHS.settingsLocal, `${CLASP_PATHS.settingsLocal}~`); - } + const files = [CLASP_PATHS.rcGlobal, CLASP_PATHS.rcLocal, CLASP_PATHS.settingsLocal]; + files.forEach(path => copyFileIfExists(path, `${path}~`)); }; /** * restore clasp settings backuped up using `backupSettings()` */ export const restoreSettings = () => { - if (fs.existsSync(`${CLASP_PATHS.rcGlobal}~`)) { - fs.renameSync(`${CLASP_PATHS.rcGlobal}~`, CLASP_PATHS.rcGlobal); - } - if (fs.existsSync(`${CLASP_PATHS.rcLocal}~`)) { - fs.renameSync(`${CLASP_PATHS.rcLocal}~`, CLASP_PATHS.rcLocal); - } - if (fs.existsSync(`${CLASP_PATHS.settingsLocal}~`)) { - fs.renameSync(`${CLASP_PATHS.settingsLocal}~`, CLASP_PATHS.settingsLocal); - } + const files = [CLASP_PATHS.rcGlobal, CLASP_PATHS.rcLocal, CLASP_PATHS.settingsLocal]; + files.forEach(path => copyFileIfExists(`${path}~`, path)); }; /** diff --git a/test/test.ts b/test/test.ts index 9894c5b3..b8d1cdc5 100644 --- a/test/test.ts +++ b/test/test.ts @@ -10,7 +10,7 @@ import {ERROR, LOG} from '../src/messages'; import {extractScriptId, URL} from '../src/urls'; import {getApiFileType, getDefaultProjectName, getWebApplicationURL, saveProject} from '../src/utils'; import {CLASP, CLASP_PATHS, CLASP_USAGE, IS_PR, SCRIPT_ID} from './constants'; -import {cleanup, setup} from './functions'; +import {backupSettings, cleanup, restoreSettings, setup} from './functions'; const manifest = readPkgUp.sync({cwd: require.resolve('../src')}); @@ -252,9 +252,11 @@ describe('Test unknown functions', () => { describe('Test all functions while logged out', () => { before(() => { + backupSettings(); if (fs.existsSync(CLASP_PATHS.rcGlobal)) fs.removeSync(CLASP_PATHS.rcGlobal); if (fs.existsSync(CLASP_PATHS.rcLocal)) fs.removeSync(CLASP_PATHS.rcLocal); }); + after(restoreSettings); const expectNoCredentials = (command: string) => { const result = spawnSync(CLASP, [command], {encoding: 'utf8'}); expect(result.status).to.equal(1);