const assert = require('assert');
const sinon = require('sinon'); // eslint-disable-line node/no-unpublished-require
+const { AsyncLocalStorage } = require('node:async_hooks');
-const stubDb = require('../stub-db');
-const stubLogger = require('../stub-logger');
+const StubDb = require('../stub-db');
+const StubLogger = require('../stub-logger');
const Service = require('../../src/service');
const Config = require('../../config');
describe('Service', function () {
- let service, options;
+ let service, stubLogger, stubDb, options, asyncLocalStorage;
let req, res, ctx;
beforeEach(function () {
+ asyncLocalStorage = new AsyncLocalStorage();
options = new Config('test');
- service = new Service(stubLogger, stubDb, options);
+ stubDb = new StubDb();
+ stubDb._reset();
+ stubLogger = new StubLogger();
+ stubLogger._reset();
+ service = new Service(stubLogger, stubDb, options, asyncLocalStorage);
sinon.stub(service.manager);
sinon.stub(service.sessionManager);
sinon.stub(service.authenticator);
});
}); // initialize
- describe('preHandler', function () {
+ describe('preHandler', async function () {
it('persists url into context', async function () {
req.url = 'https://example.com/foo';
sinon.stub(service.__proto__.__proto__, 'preHandler').resolves();
- await service.preHandler(req, res, ctx);
+ await service.asyncLocalStorage.run({}, async () => {
+ await service.preHandler(req, res, ctx);
+ const logObject = service.asyncLocalStorage.getStore();
+ assert('requestId' in logObject);
+ });
assert.strictEqual(ctx.url, req.url);
});
}); // preHandler
});
}); // handlerGetAdminLogout
+ describe('handlerGetAdminSettings', function () {
+ it('covers authenticated', async function () {
+ service.authenticator.sessionRequiredLocal.resolves(true);
+ await service.handlerGetAdminSettings(req, res, ctx);
+ assert(service.sessionManager.getAdminSettings.called);
+ });
+ it('covers unauthenticated', async function () {
+ service.authenticator.sessionRequiredLocal.resolves(false);
+ await service.handlerGetAdminSettings(req, res, ctx);
+ assert(service.sessionManager.getAdminSettings.notCalled);
+ });
+ }); // handlerGetAdminSettings
+
+ describe('handlerPostAdminSettings', function () {
+ it('covers authenticated', async function () {
+ service.authenticator.sessionRequiredLocal.resolves(true);
+ await service.handlerPostAdminSettings(req, res, ctx);
+ assert(service.sessionManager.postAdminSettings.called);
+ });
+ it('covers unauthenticated', async function () {
+ service.authenticator.sessionRequiredLocal.resolves(false);
+ await service.handlerPostAdminSettings(req, res, ctx);
+ assert(service.sessionManager.postAdminSettings.notCalled);
+ });
+ }); // handlerPostAdminSettings
+
describe('handlerGetAdmin', function () {
it('covers authenticated', async function () {
service.authenticator.sessionRequiredLocal.resolves(true);
}); // handlerGetHealthcheck
describe('handlerInternalServerError', function () {
+ let ServiceClass, DingusClass;
+ before(function () {
+ ServiceClass = Object.getPrototypeOf(service);
+ DingusClass = Object.getPrototypeOf(ServiceClass);
+ });
it('covers no redirect', async function () {
- sinon.stub(service.__proto__.__proto__, 'handlerInternalServerError');
+ sinon.stub(DingusClass, 'handlerInternalServerError');
await service.handlerInternalServerError(req, res, ctx);
- assert(service.__proto__.__proto__.handlerInternalServerError.called);
+ assert(DingusClass.handlerInternalServerError.called);
});
it('covers redirect', async function () {
- sinon.stub(service.__proto__.__proto__, 'handlerInternalServerError');
+ sinon.stub(DingusClass, 'handlerInternalServerError');
ctx.session = {
redirectUri: new URL('https://client.example.com/app'),
clientIdentifier: new URL('https://client.exmaple.com/'),
state: '123456',
};
await service.handlerInternalServerError(req, res, ctx);
- assert(!service.__proto__.__proto__.handlerInternalServerError.called);
- assert(res.setHeader);
+ assert(!DingusClass.handlerInternalServerError.called);
+ assert(res.setHeader.called);
+ assert.strictEqual(res.statusCode, 302);
});
}); // handlerInternalServerError
});
}); // handlerGetAdminMaintenance
+ describe('handlerWhaGwan', function () {
+ it('covers', async function () {
+ await assert.rejects(() => service.handlerWhaGwan(req. res, ctx));
+ });
+ }); // handlerWhaGwan
+
});
\ No newline at end of file