From 50dd0354d16d9f82b27f86715ed6d7df60b31edb Mon Sep 17 00:00:00 2001 From: aaronmyatt Date: Fri, 4 Dec 2020 23:00:31 +0800 Subject: [PATCH 1/5] adds admin middleware tests --- .../unit/@node-red/editor-api/lib/index_spec.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/unit/@node-red/editor-api/lib/index_spec.js b/test/unit/@node-red/editor-api/lib/index_spec.js index 1d5e9380b..805169307 100644 --- a/test/unit/@node-red/editor-api/lib/index_spec.js +++ b/test/unit/@node-red/editor-api/lib/index_spec.js @@ -96,4 +96,21 @@ describe("api/index", function() { request(api.httpAdmin).get("/auth/login").expect(200).end(done) }) }); + + describe('initialises api with admin middleware', function(done) { + it('ignores non-function values',function(done) { + api.init({ httpAdminRoot: true, httpAdminMiddleware: undefined },{},{},{}); + const middlewareFound = api.httpAdmin._router.stack.filter((layer) => layer.name === 'testMiddleware') + should(middlewareFound).be.empty(); + done(); + }); + + it('only accepts functions as middleware',function(done) { + const testMiddleware = function(req, res, next){ next(); }; + api.init({ httpAdminRoot: true, httpAdminMiddleware: testMiddleware },{},{},{}); + const middlewareFound = api.httpAdmin._router.stack.filter((layer) => layer.name === 'testMiddleware') + should(middlewareFound).be.length(1); + done(); + }); + }); }); From 950fd7d2cf933ec60aa298c05b48750775d36e3a Mon Sep 17 00:00:00 2001 From: aaronmyatt Date: Sat, 5 Dec 2020 15:15:36 +0800 Subject: [PATCH 2/5] removes unused dependencies --- test/unit/@node-red/editor-api/lib/index_spec.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/unit/@node-red/editor-api/lib/index_spec.js b/test/unit/@node-red/editor-api/lib/index_spec.js index 805169307..c667ae1f2 100644 --- a/test/unit/@node-red/editor-api/lib/index_spec.js +++ b/test/unit/@node-red/editor-api/lib/index_spec.js @@ -18,9 +18,6 @@ var should = require("should"); var sinon = require("sinon"); var request = require("supertest"); var express = require("express"); -var when = require("when"); -var fs = require("fs"); -var path = require("path"); var NR_TEST_UTILS = require("nr-test-utils"); From 0b569a4120b30480f3f3a281204ff1cdd019c873 Mon Sep 17 00:00:00 2001 From: aaronmyatt Date: Sat, 5 Dec 2020 23:06:18 +0800 Subject: [PATCH 3/5] exercise admin auth pathways --- .../@node-red/editor-api/lib/index_spec.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/test/unit/@node-red/editor-api/lib/index_spec.js b/test/unit/@node-red/editor-api/lib/index_spec.js index c667ae1f2..44048e6df 100644 --- a/test/unit/@node-red/editor-api/lib/index_spec.js +++ b/test/unit/@node-red/editor-api/lib/index_spec.js @@ -20,6 +20,7 @@ var request = require("supertest"); var express = require("express"); var NR_TEST_UTILS = require("nr-test-utils"); +const auth = require("basic-auth"); var api = NR_TEST_UTILS.require("@node-red/editor-api"); @@ -110,4 +111,37 @@ describe("api/index", function() { done(); }); }); + + //adminAuth: { + // type: "credentials", + // users: [{ + // username: "admin", + // password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.", + // permissions: "*" + // }] + //}, + + describe('initialises api with authentication enabled', function(done) { + + it('enables an oauth/openID based authentication mechanism',function(done) { + const stub = sinon.stub(apiAuth, 'genericStrategy', function(){}); + const adminAuth = { type: 'strategy', strategy: {} } + api.init({ httpAdminRoot: true, adminAuth },{},{},{}); + should(stub.called).be.ok(); + stub.restore(); + done(); + }); + + it('enables password protection',function(done) { + const adminAuth = { type: 'credentials' } + api.init({ httpAdminRoot: true, adminAuth },{},{},{}); + + // is the name ("initialize") of the passport middleware present + const middlewareFound = api.httpAdmin._router.stack.filter((layer) => layer.name === 'initialize') + should(middlewareFound).be.length(1); + done(); + }); + + }); + }); From c9bc530df0dc5989e32ba23b137c656e51715637 Mon Sep 17 00:00:00 2001 From: aaronmyatt Date: Sun, 6 Dec 2020 15:29:54 +0800 Subject: [PATCH 4/5] tests custom cors settings --- .../@node-red/editor-api/lib/index_spec.js | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/test/unit/@node-red/editor-api/lib/index_spec.js b/test/unit/@node-red/editor-api/lib/index_spec.js index 44048e6df..2f84030aa 100644 --- a/test/unit/@node-red/editor-api/lib/index_spec.js +++ b/test/unit/@node-red/editor-api/lib/index_spec.js @@ -112,15 +112,6 @@ describe("api/index", function() { }); }); - //adminAuth: { - // type: "credentials", - // users: [{ - // username: "admin", - // password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.", - // permissions: "*" - // }] - //}, - describe('initialises api with authentication enabled', function(done) { it('enables an oauth/openID based authentication mechanism',function(done) { @@ -144,4 +135,25 @@ describe("api/index", function() { }); + describe('initialises api with custom cors config', function (done) { + const httpAdminCors = { + origin: "*", + methods: "GET,PUT,POST,DELETE" + }; + + it('uses default cors middleware when user settings absent', function(done){ + api.init({ httpAdminRoot: true }, {}, {}, {}); + const middlewareFound = api.httpAdmin._router.stack.filter((layer) => layer.name === 'corsMiddleware') + should(middlewareFound).be.length(1); + done(); + }) + + it('enables custom cors middleware when settings present', function(done){ + api.init({ httpAdminRoot: true, httpAdminCors }, {}, {}, {}); + const middlewareFound = api.httpAdmin._router.stack.filter((layer) => layer.name === 'corsMiddleware') + should(middlewareFound).be.length(2); + done(); + }) + }); + }); From 55e6c6e01adf0afc71ec1601be727f21a9685c51 Mon Sep 17 00:00:00 2001 From: aaronmyatt Date: Wed, 16 Dec 2020 21:53:52 +0800 Subject: [PATCH 5/5] adds tests for editor-api.start() --- .../@node-red/editor-api/lib/index_spec.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/unit/@node-red/editor-api/lib/index_spec.js b/test/unit/@node-red/editor-api/lib/index_spec.js index 2f84030aa..28928181b 100644 --- a/test/unit/@node-red/editor-api/lib/index_spec.js +++ b/test/unit/@node-red/editor-api/lib/index_spec.js @@ -156,4 +156,27 @@ describe("api/index", function() { }) }); + describe('editor start', function (done) { + + it('cannot be started when editor is disabled', function (done) { + const stub = sinon.stub(apiEditor, 'start', function () { + return Promise.resolve(true); + }); + api.init({ httpAdminRoot: true, disableEditor: true }, {}, {}, {}); + should(api.start()).resolvedWith(true); + stub.restore(); + done(); + }); + + it('can be started when editor enabled', function (done) { + const stub = sinon.stub(apiEditor, 'start'); + api.init({ httpAdminRoot: true, disableEditor: false }, {}, {}, {}); + api.start(); + should(stub.called).be.true(); + stub.restore(); + done(); + }); + + }); + });