From 3774ae07349fe275ff64d4d73683eb09ee7371d1 Mon Sep 17 00:00:00 2001 From: Tanner Barlow Date: Wed, 17 Jul 2019 15:05:37 -0700 Subject: [PATCH] refactor: Moved hooks requiring login to separate file --- src/plugins/login/azureLoginPlugin.test.ts | 7 ++++++- src/plugins/login/azureLoginPlugin.ts | 17 ++++++----------- src/plugins/login/loginHooks.ts | 11 +++++++++++ 3 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 src/plugins/login/loginHooks.ts diff --git a/src/plugins/login/azureLoginPlugin.test.ts b/src/plugins/login/azureLoginPlugin.test.ts index 18383181..8946d0ab 100644 --- a/src/plugins/login/azureLoginPlugin.test.ts +++ b/src/plugins/login/azureLoginPlugin.test.ts @@ -3,6 +3,7 @@ import { AzureLoginService } from "../../services/loginService"; import { MockFactory } from "../../test/mockFactory"; import { invokeHook, setEnvVariables, unsetEnvVariables } from "../../test/utils"; import { AzureLoginPlugin } from "./azureLoginPlugin"; +import { loginHooks } from "./loginHooks"; describe("Login Plugin", () => { @@ -32,7 +33,7 @@ describe("Login Plugin", () => { async function invokeLoginHook(hasCreds = false, serverless?: Serverless, options?: Serverless.Options) { const plugin = createPlugin(hasCreds, serverless, options); - await invokeHook(plugin, "before:deploy:deploy"); + await invokeHook(plugin, `before:${loginHooks[0]}`); } beforeEach(() => { @@ -40,6 +41,10 @@ describe("Login Plugin", () => { AzureLoginService.servicePrincipalLogin = createMockLoginFunction(); }); + it("contains the hooks as contained in loginHooks", () => { + expect(Object.keys(createPlugin().hooks)).toEqual(loginHooks.map((hook) => `before:${hook}`)); + }); + it("returns if azure credentials are set", async () => { await invokeLoginHook(true); expect(AzureLoginService.interactiveLogin).not.toBeCalled(); diff --git a/src/plugins/login/azureLoginPlugin.ts b/src/plugins/login/azureLoginPlugin.ts index 77311ae0..47974788 100644 --- a/src/plugins/login/azureLoginPlugin.ts +++ b/src/plugins/login/azureLoginPlugin.ts @@ -1,23 +1,18 @@ import Serverless from "serverless"; -import AzureProvider from "../../provider/azureProvider"; -import { AzureLoginService } from "../../services/loginService"; +import { AzureLoginOptions, AzureLoginService } from "../../services/loginService"; import { AzureBasePlugin } from "../azureBasePlugin"; -import { AzureLoginOptions } from "../../services/loginService"; +import { loginHooks } from "./loginHooks"; export class AzureLoginPlugin extends AzureBasePlugin { - private provider: AzureProvider; public hooks: { [eventName: string]: Promise }; public constructor(serverless: Serverless, options: AzureLoginOptions) { super(serverless, options); - this.provider = (this.serverless.getProvider("azure") as any) as AzureProvider; - this.hooks = { - "before:deploy:deploy": this.login.bind(this), - "before:deploy:list:list": this.login.bind(this), - "before:invoke:invoke": this.login.bind(this), - "before:rollback:rollback": this.login.bind(this), - }; + this.hooks = {}; + for (const h of loginHooks) { + this.hooks[`before:${h}`] = this.login.bind(this); + } } private async login() { diff --git a/src/plugins/login/loginHooks.ts b/src/plugins/login/loginHooks.ts new file mode 100644 index 00000000..4840de99 --- /dev/null +++ b/src/plugins/login/loginHooks.ts @@ -0,0 +1,11 @@ +/** + * Hooks that require authentication before execution + */ +export const loginHooks = [ + "package:initialize", + "deploy:list:list", + "deploy:deploy", + "invoke:invoke", + "rollback:rollback", + "remove:remove", +]