/* eslint-disable
    max-len,
    no-return-assign,
    no-unused-vars,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
 * decaffeinate suggestions:
 * DS102: Remove unnecessary code created because of implicit returns
 * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
 */
const SandboxedModule = require('sandboxed-module')
const assert = require('assert')
const sinon = require('sinon')
const modulePath = require('path').join(
  __dirname,
  '../../../../app/src/Features/SystemMessages/SystemMessageManager.js'
)

describe('SystemMessageManager', function () {
  beforeEach(function () {
    this.messages = ['messages-stub']
    this.SystemMessage = {
      find: sinon.stub().yields(null, this.messages),
    }
    this.SystemMessageManager = SandboxedModule.require(modulePath, {
      requires: {
        '../../models/SystemMessage': { SystemMessage: this.SystemMessage },
      },
    })
    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.SystemMessageManager._cachedMessages = this.messages
      return this.SystemMessageManager.getMessages(this.callback)
    })

    it('should return the messages', function () {
      return this.callback.calledWith(null, this.messages).should.equal(true)
    })
  })

  describe('clearMessages', function () {
    beforeEach(function () {
      this.SystemMessage.deleteMany = sinon.stub().callsArg(1)
      return this.SystemMessageManager.clearMessages(this.callback)
    })

    it('should remove the messages from the database', function () {
      return this.SystemMessage.deleteMany.calledWith({}).should.equal(true)
    })

    it('should return the callback', function () {
      return this.callback.called.should.equal(true)
    })
  })
})
