From 91640c36f4c4e60e0ee6179c4a73c3cfc4b21a62 Mon Sep 17 00:00:00 2001 From: Kristian Kraljic Date: Thu, 29 Oct 2020 01:00:01 +0100 Subject: [PATCH 1/4] Fix running multiple KarmaSevers --- lib/framework.js | 5 +++-- lib/index.js | 13 ++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/framework.js b/lib/framework.js index 1604b156..ac6f73b8 100644 --- a/lib/framework.js +++ b/lib/framework.js @@ -17,8 +17,6 @@ const {ErrorMessage} = require("./errors"); class Framework { constructor() { this.config = {}; - this.beforeMiddleware = new Router(); - this.middleware = new Router(); } createPluginFilesPattern(pattern) { @@ -521,6 +519,9 @@ class Framework { async setupMiddleware() { const config = this.config; + + config.ui5._beforeMiddleware = this.beforeMiddleware = new Router(); + config.ui5._middleware = this.middleware = new Router(); if (config.ui5.type === "library") { this.beforeMiddleware.use(this.beforeMiddlewareRewriteUrl.bind(this)); diff --git a/lib/index.js b/lib/index.js index 967f2e19..97bdd6fa 100644 --- a/lib/index.js +++ b/lib/index.js @@ -11,11 +11,18 @@ async function init(config, logger) { throw new Error(ErrorMessage.failure()); } } - init.$inject = ["config", "logger"]; +function getBeforeMiddleware(config) { + return config.ui5._beforeMiddleware; +} +function getMiddleware(config) { + return config.ui5._middleware; +} +getBeforeMiddleware.$inject = getMiddleware.$inject = ["config"]; + module.exports = { "framework:ui5": ["factory", init], - "middleware:ui5--beforeMiddleware": ["value", framework.beforeMiddleware], - "middleware:ui5--middleware": ["value", framework.middleware] + "middleware:ui5--beforeMiddleware": ["factory", getBeforeMiddleware], + "middleware:ui5--middleware": ["factory", getMiddleware] }; From d2f8dc248e6da7176b4a11083935bd24898d232f Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 3 Nov 2020 15:19:52 +0100 Subject: [PATCH 2/4] Add index.js test --- test/unit/index.test.js | 30 ++++++++++++++++++++++++++++++ test/unit/jest.config.js | 3 --- 2 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 test/unit/index.test.js diff --git a/test/unit/index.test.js b/test/unit/index.test.js new file mode 100644 index 00000000..307fe2cc --- /dev/null +++ b/test/unit/index.test.js @@ -0,0 +1,30 @@ +describe("Karma Plugin", () => { + it("Should export framework:ui5", async () => { + const plugin = require("../../"); + expect(plugin["framework:ui5"]).toStrictEqual(expect.any(Array)); + expect(plugin["framework:ui5"]).toHaveLength(2); + expect(plugin["framework:ui5"][0]).toBe("factory"); + expect(plugin["framework:ui5"][1]).toStrictEqual(expect.any(Function)); + expect(plugin["framework:ui5"][1].$inject).toStrictEqual(["config", "logger"]); + }); + it("Should export middleware:ui5--beforeMiddleware", async () => { + const plugin = require("../../"); + expect(plugin["middleware:ui5--beforeMiddleware"]).toStrictEqual(expect.any(Array)); + expect(plugin["middleware:ui5--beforeMiddleware"]).toHaveLength(2); + expect(plugin["middleware:ui5--beforeMiddleware"][0]).toBe("factory"); + expect(plugin["middleware:ui5--beforeMiddleware"][1]).toStrictEqual(expect.any(Function)); + expect(plugin["middleware:ui5--beforeMiddleware"][1].$inject).toStrictEqual(["config"]); + }); + it("Should export middleware:ui5--middleware", async () => { + const plugin = require("../../"); + expect(plugin["middleware:ui5--middleware"]).toStrictEqual(expect.any(Array)); + expect(plugin["middleware:ui5--middleware"]).toHaveLength(2); + expect(plugin["middleware:ui5--middleware"][0]).toBe("factory"); + expect(plugin["middleware:ui5--middleware"][1]).toStrictEqual(expect.any(Function)); + expect(plugin["middleware:ui5--middleware"][1].$inject).toStrictEqual(["config"]); + }); + + it.skip("Should be able to initialize multiple times", async () => { + const plugin = require("../../"); + }); +}); diff --git a/test/unit/jest.config.js b/test/unit/jest.config.js index f02c1c66..2ce62c36 100644 --- a/test/unit/jest.config.js +++ b/test/unit/jest.config.js @@ -14,9 +14,6 @@ module.exports = { "lines": 90, "statements": 90 }, - "./lib/index.js": { - // TODO: Add unit test for index.js - }, "./lib/client/": { // TODO: Add unit tests for client code } From 174008caa51cc8e34ed54afe993ec9ab9cae0199 Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 10 Nov 2020 16:55:54 +0100 Subject: [PATCH 3/4] Update index.js / framework.js --- lib/framework.js | 11 +++++------ lib/index.js | 12 ++++++------ test/unit/index.test.js | 37 +++++++++++++++++++++++++++++++++---- 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/lib/framework.js b/lib/framework.js index ac6f73b8..c13ecc90 100644 --- a/lib/framework.js +++ b/lib/framework.js @@ -519,12 +519,10 @@ class Framework { async setupMiddleware() { const config = this.config; - - config.ui5._beforeMiddleware = this.beforeMiddleware = new Router(); - config.ui5._middleware = this.middleware = new Router(); if (config.ui5.type === "library") { - this.beforeMiddleware.use(this.beforeMiddlewareRewriteUrl.bind(this)); + config.ui5._beforeMiddleware = new Router(); + config.ui5._beforeMiddleware.use(this.beforeMiddlewareRewriteUrl.bind(this)); config.beforeMiddleware.push("ui5--beforeMiddleware"); } @@ -539,8 +537,9 @@ class Framework { } if (middleware) { - this.middleware.use(this.middlewareRewriteUrl.bind(this)); - this.middleware.use(middleware); + config.ui5._middleware = new Router(); + config.ui5._middleware.use(this.middlewareRewriteUrl.bind(this)); + config.ui5._middleware.use(middleware); config.middleware.push("ui5--middleware"); } } diff --git a/lib/index.js b/lib/index.js index 97bdd6fa..002a22eb 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,9 +1,9 @@ const {ErrorMessage} = require("./errors"); const Framework = require("./framework"); -const framework = new Framework(); async function init(config, logger) { try { + const framework = new Framework(); await framework.init({config, logger}); } catch (error) { const _logger = logger.create("ui5.framework"); @@ -13,13 +13,13 @@ async function init(config, logger) { } init.$inject = ["config", "logger"]; -function getBeforeMiddleware(config) { - return config.ui5._beforeMiddleware; +function getBeforeMiddleware(ui5) { + return ui5._beforeMiddleware; } -function getMiddleware(config) { - return config.ui5._middleware; +function getMiddleware(ui5) { + return ui5._middleware; } -getBeforeMiddleware.$inject = getMiddleware.$inject = ["config"]; +getBeforeMiddleware.$inject = getMiddleware.$inject = ["config.ui5"]; module.exports = { "framework:ui5": ["factory", init], diff --git a/test/unit/index.test.js b/test/unit/index.test.js index 307fe2cc..ff058c27 100644 --- a/test/unit/index.test.js +++ b/test/unit/index.test.js @@ -13,7 +13,7 @@ describe("Karma Plugin", () => { expect(plugin["middleware:ui5--beforeMiddleware"]).toHaveLength(2); expect(plugin["middleware:ui5--beforeMiddleware"][0]).toBe("factory"); expect(plugin["middleware:ui5--beforeMiddleware"][1]).toStrictEqual(expect.any(Function)); - expect(plugin["middleware:ui5--beforeMiddleware"][1].$inject).toStrictEqual(["config"]); + expect(plugin["middleware:ui5--beforeMiddleware"][1].$inject).toStrictEqual(["config.ui5"]); }); it("Should export middleware:ui5--middleware", async () => { const plugin = require("../../"); @@ -21,10 +21,39 @@ describe("Karma Plugin", () => { expect(plugin["middleware:ui5--middleware"]).toHaveLength(2); expect(plugin["middleware:ui5--middleware"][0]).toBe("factory"); expect(plugin["middleware:ui5--middleware"][1]).toStrictEqual(expect.any(Function)); - expect(plugin["middleware:ui5--middleware"][1].$inject).toStrictEqual(["config"]); + expect(plugin["middleware:ui5--middleware"][1].$inject).toStrictEqual(["config.ui5"]); }); - - it.skip("Should be able to initialize multiple times", async () => { + it("Should be able to initialize multiple times", async () => { + const Framework = require("../../lib/framework"); const plugin = require("../../"); + const frameworkInitStub = jest.spyOn(Framework.prototype, "init").mockImplementation(); + + const config1 = {}; + const logger1 = { + create: jest.fn(() => { + return { + log: jest.fn() + }; + }) + }; + + await plugin["framework:ui5"][1](config1, logger1); + + expect(frameworkInitStub).toHaveBeenCalledTimes(1); + expect(frameworkInitStub).toHaveBeenCalledWith({config: config1, logger: logger1}); + + const config2 = {}; + const logger2 = { + create: jest.fn(() => { + return { + log: jest.fn() + }; + }) + }; + + await plugin["framework:ui5"][1](config2, logger2); + + expect(frameworkInitStub).toHaveBeenCalledTimes(2); + expect(frameworkInitStub).toHaveBeenCalledWith({config: config2, logger: logger2}); }); }); From d2200d56935f120c57f91a4ee68ae2a23146be06 Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Thu, 19 Nov 2020 15:01:46 +0100 Subject: [PATCH 4/4] Fix unit tests / add more tests for index.js --- test/unit/framework.test.js | 7 ++++--- test/unit/index.test.js | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/test/unit/framework.test.js b/test/unit/framework.test.js index 450114bc..66eeb5fd 100644 --- a/test/unit/framework.test.js +++ b/test/unit/framework.test.js @@ -37,7 +37,7 @@ describe("Middleware for UI5", () => { const rewriteUrlBeforeSpy = jest.spyOn(framework, "rewriteUrlBefore"); - const beforeMiddleware = framework.beforeMiddleware; + const beforeMiddleware = config.ui5._beforeMiddleware; const req = { url: "/foo" @@ -71,7 +71,7 @@ describe("Middleware for UI5", () => { const rewriteUrlSpy = jest.spyOn(framework, "rewriteUrl"); - const middleware = framework.middleware; + const middleware = config.ui5._middleware; const req = { url: "/foo" @@ -168,7 +168,8 @@ describe("UI5 Middleware / Proxy configuration", () => { webapp: "webapp", src: "src", test: "test" - } + }, + _middleware: expect.any(Function) }); }); diff --git a/test/unit/index.test.js b/test/unit/index.test.js index ff058c27..e6cbd08d 100644 --- a/test/unit/index.test.js +++ b/test/unit/index.test.js @@ -39,8 +39,15 @@ describe("Karma Plugin", () => { await plugin["framework:ui5"][1](config1, logger1); + config1.ui5 = { + _middleware: jest.fn(), + _beforeMiddleware: jest.fn() + }; + expect(frameworkInitStub).toHaveBeenCalledTimes(1); expect(frameworkInitStub).toHaveBeenCalledWith({config: config1, logger: logger1}); + expect(plugin["middleware:ui5--beforeMiddleware"][1](config1.ui5)).toBe(config1.ui5._beforeMiddleware); + expect(plugin["middleware:ui5--middleware"][1](config1.ui5)).toBe(config1.ui5._middleware); const config2 = {}; const logger2 = { @@ -53,7 +60,30 @@ describe("Karma Plugin", () => { await plugin["framework:ui5"][1](config2, logger2); + config2.ui5 = { + _middleware: jest.fn(), + _beforeMiddleware: jest.fn() + }; + expect(frameworkInitStub).toHaveBeenCalledTimes(2); expect(frameworkInitStub).toHaveBeenCalledWith({config: config2, logger: logger2}); + expect(plugin["middleware:ui5--beforeMiddleware"][1](config2.ui5)).toBe(config2.ui5._beforeMiddleware); + expect(plugin["middleware:ui5--middleware"][1](config2.ui5)).toBe(config2.ui5._middleware); + }); + it("Should handle framework initialize error", async () => { + const Framework = require("../../lib/framework"); + const plugin = require("../../"); + jest.spyOn(Framework.prototype, "init").mockRejectedValue(new Error("Error from framework.init")); + + const config = {}; + const logger = { + create: jest.fn(() => { + return { + log: jest.fn() + }; + }) + }; + + await expect(plugin["framework:ui5"][1](config, logger)).rejects.toThrow("ss"); }); });