diff --git a/services/web/app/src/Features/SystemMessages/SystemMessageManager.js b/services/web/app/src/Features/SystemMessages/SystemMessageManager.js index 7dda788764..68153a94cb 100644 --- a/services/web/app/src/Features/SystemMessages/SystemMessageManager.js +++ b/services/web/app/src/Features/SystemMessages/SystemMessageManager.js @@ -17,17 +17,7 @@ module.exports = SystemMessageManager = { if (callback == null) { callback = function(error, messages) {} } - if (this._cachedMessages != null) { - return callback(null, this._cachedMessages) - } else { - return this.getMessagesFromDB((error, messages) => { - if (error != null) { - return callback(error) - } - this._cachedMessages = messages - return callback(null, messages) - }) - } + callback(null, this._cachedMessages) }, getMessagesFromDB(callback) { @@ -52,10 +42,15 @@ module.exports = SystemMessageManager = { return message.save(callback) }, - clearCache() { - return delete this._cachedMessages + refreshCache() { + this.getMessagesFromDB((error, messages) => { + if (!error) { + this._cachedMessages = messages + } + }) } } -const CACHE_TIMEOUT = 20 * 1000 // 20 seconds -setInterval(() => SystemMessageManager.clearCache(), CACHE_TIMEOUT) +const CACHE_TIMEOUT = 10 * 1000 * (Math.random() + 2) // 20-30 seconds +SystemMessageManager.refreshCache() +setInterval(() => SystemMessageManager.refreshCache(), CACHE_TIMEOUT) diff --git a/services/web/test/unit/src/SystemMessages/SystemMessageManagerTests.js b/services/web/test/unit/src/SystemMessages/SystemMessageManagerTests.js index 31eb67124e..2155f49df6 100644 --- a/services/web/test/unit/src/SystemMessages/SystemMessageManagerTests.js +++ b/services/web/test/unit/src/SystemMessages/SystemMessageManagerTests.js @@ -21,7 +21,10 @@ const modulePath = require('path').join( describe('SystemMessageManager', function() { beforeEach(function() { - this.SystemMessage = {} + this.messages = ['messages-stub'] + this.SystemMessage = { + find: sinon.stub().yields(null, this.messages) + } this.SystemMessageManager = SandboxedModule.require(modulePath, { globals: { console: console @@ -33,47 +36,18 @@ describe('SystemMessageManager', function() { return (this.callback = sinon.stub()) }) + it('should look the messages up in the database on import', function() { + sinon.assert.called(this.SystemMessage.find) + }) + describe('getMessage', function() { beforeEach(function() { - this.messages = ['messages-stub'] - return (this.SystemMessage.find = sinon - .stub() - .callsArgWith(1, null, this.messages)) + this.SystemMessageManager._cachedMessages = this.messages + return this.SystemMessageManager.getMessages(this.callback) }) - describe('when the messages are not cached', function() { - beforeEach(function() { - return this.SystemMessageManager.getMessages(this.callback) - }) - - it('should look the messages up in the database', function() { - return this.SystemMessage.find.calledWith({}).should.equal(true) - }) - - it('should return the messages', function() { - return this.callback.calledWith(null, this.messages).should.equal(true) - }) - - it('should cache the messages', function() { - return this.SystemMessageManager._cachedMessages.should.equal( - this.messages - ) - }) - }) - - describe('when the messages are cached', function() { - beforeEach(function() { - this.SystemMessageManager._cachedMessages = this.messages - return this.SystemMessageManager.getMessages(this.callback) - }) - - it('should not look the messages up in the database', function() { - return this.SystemMessage.find.called.should.equal(false) - }) - - it('should return the messages', function() { - return this.callback.calledWith(null, this.messages).should.equal(true) - }) + it('should return the messages', function() { + return this.callback.calledWith(null, this.messages).should.equal(true) }) })