diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/clean-up/build-cleaner.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/clean-up/build-cleaner.ts index df17f8133d..e0ba50cef7 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/clean-up/build-cleaner.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/clean-up/build-cleaner.ts @@ -3,16 +3,14 @@ import * as fs from 'fs'; import * as path from 'path'; import * as shell from 'shelljs'; import {GithubPullRequests} from '../common/github-pull-requests'; +import {assertNotMissingOrEmpty} from '../common/utils'; // Classes export class BuildCleaner { // Constructor constructor(protected buildsDir: string, protected repoSlug: string, protected githubToken?: string) { - if (!buildsDir) { - throw new Error('Missing required parameter \'buildsDir\'!'); - } else if (!repoSlug) { - throw new Error('Missing required parameter \'repoSlug\'!'); - } + assertNotMissingOrEmpty('buildsDir', buildsDir); + assertNotMissingOrEmpty('repoSlug', repoSlug); } // Methods - Public diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/github-api.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/github-api.ts index b3754fedcb..0cdd28733b 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/github-api.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/github-api.ts @@ -1,6 +1,7 @@ // Imports import {IncomingMessage} from 'http'; import * as https from 'https'; +import {assertNotMissingOrEmpty} from './utils'; // Constants const GITHUB_HOSTNAME = 'api.github.com'; @@ -18,9 +19,7 @@ export class GithubApi { // Constructor constructor(protected repoSlug: string, githubToken?: string) { - if (!repoSlug) { - throw new Error('Missing required parameter \'repoSlug\'!'); - } + assertNotMissingOrEmpty('repoSlug', repoSlug); if (!githubToken) { console.warn('No GitHub access-token specified. Requests will be unauthenticated.'); } diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/utils.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/utils.ts index 58e92ef35f..50e4ee5b7d 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/utils.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/common/utils.ts @@ -1,4 +1,10 @@ // Functions +export const assertNotMissingOrEmpty = (name: string, value: string | null | undefined) => { + if (!value) { + throw new Error(`Missing or empty required parameter '${name}'!`); + } +}; + export const getEnvVar = (name: string, isOptional = false): string => { const value = process.env[name]; diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/build-creator.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/build-creator.ts index ac623ebd50..4197da7ab3 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/build-creator.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/build-creator.ts @@ -4,6 +4,7 @@ import {EventEmitter} from 'events'; import * as fs from 'fs'; import * as path from 'path'; import * as shell from 'shelljs'; +import {assertNotMissingOrEmpty} from '../common/utils'; import {CreatedBuildEvent} from './build-events'; import {UploadError} from './upload-error'; @@ -12,10 +13,7 @@ export class BuildCreator extends EventEmitter { // Constructor constructor(protected buildsDir: string) { super(); - - if (!buildsDir) { - throw new Error('Missing or empty required parameter \'buildsDir\'!'); - } + assertNotMissingOrEmpty('buildsDir', buildsDir); } // Methods - Public diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/upload-server-factory.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/upload-server-factory.ts index f0726cc901..b1fcbb82b9 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/upload-server-factory.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/lib/upload-server/upload-server-factory.ts @@ -1,6 +1,7 @@ // Imports import * as express from 'express'; import * as http from 'http'; +import {assertNotMissingOrEmpty} from '../common/utils'; import {BuildCreator} from './build-creator'; import {CreatedBuildEvent} from './build-events'; import {UploadError} from './upload-error'; @@ -12,9 +13,7 @@ const X_FILE_HEADER = 'X-FILE'; class UploadServerFactory { // Methods - Public public create(buildsDir: string): http.Server { - if (!buildsDir) { - throw new Error('Missing or empty required parameter \'buildsDir\'!'); - } + assertNotMissingOrEmpty('buildsDir', buildsDir); const buildCreator = new BuildCreator(buildsDir); const middleware = this.createMiddleware(buildCreator); diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/test/clean-up/build-cleaner.spec.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/test/clean-up/build-cleaner.spec.ts index bf8b6c7f98..2730f9906a 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/test/clean-up/build-cleaner.spec.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/test/clean-up/build-cleaner.spec.ts @@ -14,12 +14,12 @@ describe('BuildCleaner', () => { describe('constructor()', () => { it('should throw if \'buildsDir\' is empty', () => { - expect(() => new BuildCleaner('', '/baz/qux')).toThrowError('Missing required parameter \'buildsDir\'!'); + expect(() => new BuildCleaner('', '/baz/qux')).toThrowError('Missing or empty required parameter \'buildsDir\'!'); }); it('should throw if \'repoSlug\' is empty', () => { - expect(() => new BuildCleaner('/foo/bar', '')).toThrowError('Missing required parameter \'repoSlug\'!'); + expect(() => new BuildCleaner('/foo/bar', '')).toThrowError('Missing or empty required parameter \'repoSlug\'!'); }); }); diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/github-api.spec.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/github-api.spec.ts index 6e39a96d86..22103070f8 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/github-api.spec.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/github-api.spec.ts @@ -13,8 +13,8 @@ describe('GithubApi', () => { describe('constructor()', () => { - it('should throw if \'repoSlug\' is not defined', () => { - expect(() => new GithubApi('', '12345')).toThrowError('Missing required parameter \'repoSlug\'!'); + it('should throw if \'repoSlug\' is missing or empty', () => { + expect(() => new GithubApi('', '12345')).toThrowError('Missing or empty required parameter \'repoSlug\'!'); }); diff --git a/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/utils.spec.ts b/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/utils.spec.ts index c1177aa1da..872fa2fdd8 100644 --- a/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/utils.spec.ts +++ b/aio/aio-builds-setup/dockerbuild/scripts-js/test/common/utils.spec.ts @@ -1,9 +1,28 @@ // Imports -import {getEnvVar} from '../../lib/common/utils'; +import {assertNotMissingOrEmpty, getEnvVar} from '../../lib/common/utils'; // Tests describe('utils', () => { + describe('assertNotMissingOrEmpty()', () => { + + it('should throw if passed an empty value', () => { + expect(() => assertNotMissingOrEmpty('foo', undefined)). + toThrowError('Missing or empty required parameter \'foo\'!'); + expect(() => assertNotMissingOrEmpty('bar', null)).toThrowError('Missing or empty required parameter \'bar\'!'); + expect(() => assertNotMissingOrEmpty('baz', '')).toThrowError('Missing or empty required parameter \'baz\'!'); + }); + + + it('should not throw if passed a non-empty value', () => { + expect(() => assertNotMissingOrEmpty('foo', ' ')).not.toThrow(); + expect(() => assertNotMissingOrEmpty('bar', 'bar')).not.toThrow(); + expect(() => assertNotMissingOrEmpty('baz', 'b a z')).not.toThrow(); + }); + + }); + + describe('getEnvVar()', () => { const emptyVar = '$$test_utils_getEnvVar_empty$$'; const nonEmptyVar = '$$test_utils_getEnvVar_nonEmpty$$';