From ca41d9ba7995c891eb1ef9addcb0cfc141f66f3a Mon Sep 17 00:00:00 2001 From: Mark Lee Date: Sun, 22 Aug 2021 08:18:58 -0700 Subject: [PATCH] fix(core): better errors when maker names are invalid (#2467) --- packages/api/core/src/api/make.ts | 7 +++ packages/api/core/test/fast/make_spec.ts | 51 ++++++++++++++----- .../maker-name-wrong-type/package.json | 9 ++++ .../test/fixture/maker-sans-name/package.json | 7 +++ 4 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 packages/api/core/test/fixture/maker-name-wrong-type/package.json create mode 100644 packages/api/core/test/fixture/maker-sans-name/package.json diff --git a/packages/api/core/src/api/make.ts b/packages/api/core/src/api/make.ts index d70b322507..f812f0656e 100644 --- a/packages/api/core/src/api/make.ts +++ b/packages/api/core/src/api/make.ts @@ -120,6 +120,13 @@ export default async ({ if (!maker.platforms.includes(actualTargetPlatform)) continue; } else { const resolvableTarget: IForgeResolvableMaker = target as IForgeResolvableMaker; + + if (!resolvableTarget.name) { + throw new Error(`The following maker config is missing a maker name: ${JSON.stringify(resolvableTarget)}`); + } else if (typeof resolvableTarget.name !== 'string') { + throw new Error(`The following maker config has a maker name that is not a string: ${JSON.stringify(resolvableTarget)}`); + } + const MakerClass = requireSearch(dir, [resolvableTarget.name]); if (!MakerClass) { throw new Error(`Could not find module with name: ${resolvableTarget.name}. Make sure it's listed in the devDependencies of your package.json`); diff --git a/packages/api/core/test/fast/make_spec.ts b/packages/api/core/test/fast/make_spec.ts index 914c87bbea..addc1a5e88 100644 --- a/packages/api/core/test/fast/make_spec.ts +++ b/packages/api/core/test/fast/make_spec.ts @@ -3,23 +3,28 @@ import * as path from 'path'; import proxyquire from 'proxyquire'; import { MakeOptions } from '../../src/api'; +import make from '../../src/api/make'; describe('make', () => { - let make: (opts: MakeOptions) => Promise; - beforeEach(() => { - const electronPath = path.resolve(__dirname, 'node_modules/electron'); - make = proxyquire.noCallThru().load('../../src/api/make', { - '../util/electron-version': { - getElectronModulePath: () => Promise.resolve(electronPath), - getElectronVersion: () => Promise.resolve('1.0.0'), - }, - }).default; - }); + const fixtureDir = path.resolve(__dirname, '..', 'fixture'); + describe('overrideTargets inherits from forge config', () => { + let stubbedMake: (opts: MakeOptions) => Promise; + + before(() => { + const electronPath = path.resolve(__dirname, 'node_modules/electron'); + stubbedMake = proxyquire.noCallThru().load('../../src/api/make', { + '../util/electron-version': { + getElectronModulePath: () => Promise.resolve(electronPath), + getElectronVersion: () => Promise.resolve('1.0.0'), + }, + }).default; + }); + it('passes config properly', async () => { - const results = await make({ + const results = await stubbedMake({ arch: 'x64', - dir: path.resolve(__dirname, '..', 'fixture', 'app-with-custom-maker-config'), + dir: path.join(fixtureDir, 'app-with-custom-maker-config'), overrideTargets: ['../custom-maker'], platform: 'linux', skipPackage: true, @@ -27,5 +32,27 @@ describe('make', () => { expect(results[0].artifacts).to.deep.equal(['from config']); }); + + after(() => proxyquire.callThru()); + }); + + describe('maker config validation', () => { + it('throws an error if the name is missing', async () => { + await expect(make({ + arch: 'x64', + dir: path.join(fixtureDir, 'maker-sans-name'), + platform: 'linux', + skipPackage: true, + })).to.eventually.be.rejectedWith(/^The following maker config is missing a maker name:/); + }); + + it('throws an error if the name is not a string', async () => { + await expect(make({ + arch: 'x64', + dir: path.join(fixtureDir, 'maker-name-wrong-type'), + platform: 'linux', + skipPackage: true, + })).to.eventually.be.rejectedWith(/^The following maker config has a maker name that is not a string:/); + }); }); }); diff --git a/packages/api/core/test/fixture/maker-name-wrong-type/package.json b/packages/api/core/test/fixture/maker-name-wrong-type/package.json new file mode 100644 index 0000000000..fbc2f16bd5 --- /dev/null +++ b/packages/api/core/test/fixture/maker-name-wrong-type/package.json @@ -0,0 +1,9 @@ +{ + "config": { + "forge": { + "makers": [{ + "name": 1 + }] + } + } +} diff --git a/packages/api/core/test/fixture/maker-sans-name/package.json b/packages/api/core/test/fixture/maker-sans-name/package.json new file mode 100644 index 0000000000..1cb9e09c8c --- /dev/null +++ b/packages/api/core/test/fixture/maker-sans-name/package.json @@ -0,0 +1,7 @@ +{ + "config": { + "forge": { + "makers": [{}] + } + } +}