51c015ceabae23661489713942ace123b19944f7
2 /* eslint-disable node/no-unpublished-require */
5 const assert
= require('assert');
6 const sinon
= require('sinon');
7 const StubDB
= require('../stub-db');
8 const StubLogger
= require('../stub-logger');
9 const Chores
= require('../../src/chores');
11 const snooze
= (ms
) => new Promise((resolve
) => setTimeout(resolve
, ms
));
13 const expectedException
= new Error('oh no');
15 describe('Chores', function () {
16 let chores
, stubLogger
, stubDb
, options
;
17 beforeEach(function () {
18 stubLogger
= new StubLogger();
20 stubDb
= new StubDB();
23 afterEach(function () {
24 chores
?.stopAllChores();
28 describe('constructor', function () {
30 it('empty options, no cleaning', async
function () {
32 chores
= new Chores(stubLogger
, stubDb
, options
);
33 assert
.strictEqual(chores
.chores
.cleanTokens
.timeoutObj
, undefined);
34 assert
.strictEqual(chores
.chores
.cleanScopes
.timeoutObj
, undefined);
37 it('cleans scopes', async
function () {
43 chores
= new Chores(stubLogger
, stubDb
, options
);
45 assert(chores
.chores
.cleanScopes
.timeoutObj
);
46 assert(chores
.db
.scopeCleanup
.called
);
49 it('cleans tokens', async
function () {
55 codeValidityTimeoutMs: 10,
58 chores
= new Chores(stubLogger
, stubDb
, options
);
60 assert(chores
.chores
.cleanTokens
.timeoutObj
);
61 assert(chores
.db
.tokenCleanup
.called
);
66 describe('cleanTokens', function () {
67 it('logs cleaning', async
function () {
74 codeValidityTimeoutMs: 10,
77 stubDb
.tokenCleanup
.resolves(cleaned
);
78 chores
= new Chores(stubLogger
, stubDb
, options
);
79 clearTimeout(chores
.cleanTokensTimeout
);
80 await chores
.cleanTokens();
81 assert(stubLogger
.info
.called
);
83 it('covers failure', async
function () {
89 codeValidityTimeoutMs: 10,
92 stubDb
.tokenCleanup
.rejects(expectedException
);
93 chores
= new Chores(stubLogger
, stubDb
, options
);
94 await assert
.rejects(() => chores
.cleanTokens(), expectedException
);
96 it('covers default', async
function () {
97 stubDb
.tokenCleanup
.resolves(0);
98 chores
= new Chores(stubLogger
, stubDb
, {
100 codeValidityTimeoutMs: 10,
103 await chores
.cleanTokens();
104 assert(stubDb
.tokenCleanup
.called
);
108 describe('cleanScopes', function () {
109 it('logs cleaning', async
function () {
116 stubDb
.scopeCleanup
.resolves(cleaned
);
117 chores
= new Chores(stubLogger
, stubDb
, options
);
118 clearTimeout(chores
.cleanScopesTimeout
);
119 await chores
.cleanScopes();
120 assert(stubLogger
.info
.called
);
122 it('covers failure', async
function () {
128 stubDb
.scopeCleanup
.rejects(expectedException
);
129 chores
= new Chores(stubLogger
, stubDb
, options
);
130 await assert
.rejects(() => chores
.cleanScopes(), expectedException
);
132 it('covers default', async
function () {
133 stubDb
.scopeCleanup
.resolves(0);
134 chores
= new Chores(stubLogger
, stubDb
, {});
135 await chores
.cleanScopes();
136 assert(stubDb
.scopeCleanup
.called
);