CooldownManagerTests.coffee 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. SandboxedModule = require('sandboxed-module')
  2. sinon = require('sinon')
  3. require('chai').should()
  4. expect = require('chai').expect
  5. modulePath = require('path').join __dirname, '../../../../app/js/Features/Cooldown/CooldownManager'
  6. describe "CooldownManager", ->
  7. beforeEach ->
  8. @projectId = 'abcdefg'
  9. @rclient = {set: sinon.stub(), get: sinon.stub()}
  10. @RedisWrapper =
  11. client: () => @rclient
  12. @CooldownManager = SandboxedModule.require modulePath, requires:
  13. '../../infrastructure/RedisWrapper': @RedisWrapper
  14. 'logger-sharelatex': {log: sinon.stub()}
  15. describe '_buildKey', ->
  16. it 'should build a properly formatted redis key', ->
  17. expect(@CooldownManager._buildKey('ABC')).to.equal 'Cooldown:{ABC}'
  18. describe 'isProjectOnCooldown', ->
  19. beforeEach ->
  20. @call = (cb) =>
  21. @CooldownManager.isProjectOnCooldown @projectId, cb
  22. describe 'when project is on cooldown', ->
  23. beforeEach ->
  24. @rclient.get = sinon.stub().callsArgWith(1, null, '1')
  25. it 'should fetch key from redis', (done) ->
  26. @call (err, result) =>
  27. @rclient.get.callCount.should.equal 1
  28. @rclient.get.calledWith('Cooldown:{abcdefg}').should.equal true
  29. done()
  30. it 'should not produce an error', (done) ->
  31. @call (err, result) =>
  32. expect(err).to.equal null
  33. done()
  34. it 'should produce a true result', (done) ->
  35. @call (err, result) =>
  36. expect(result).to.equal true
  37. done()
  38. describe 'when project is not on cooldown', ->
  39. beforeEach ->
  40. @rclient.get = sinon.stub().callsArgWith(1, null, null)
  41. it 'should fetch key from redis', (done) ->
  42. @call (err, result) =>
  43. @rclient.get.callCount.should.equal 1
  44. @rclient.get.calledWith('Cooldown:{abcdefg}').should.equal true
  45. done()
  46. it 'should not produce an error', (done) ->
  47. @call (err, result) =>
  48. expect(err).to.equal null
  49. done()
  50. it 'should produce a false result', (done) ->
  51. @call (err, result) =>
  52. expect(result).to.equal false
  53. done()
  54. describe 'when rclient.get produces an error', ->
  55. beforeEach ->
  56. @rclient.get = sinon.stub().callsArgWith(1, new Error('woops'))
  57. it 'should fetch key from redis', (done) ->
  58. @call (err, result) =>
  59. @rclient.get.callCount.should.equal 1
  60. @rclient.get.calledWith('Cooldown:{abcdefg}').should.equal true
  61. done()
  62. it 'should produce an error', (done) ->
  63. @call (err, result) =>
  64. expect(err).to.not.equal null
  65. expect(err).to.be.instanceof Error
  66. done()
  67. describe 'putProjectOnCooldown', ->
  68. beforeEach ->
  69. @call = (cb) =>
  70. @CooldownManager.putProjectOnCooldown @projectId, cb
  71. describe 'when rclient.set does not produce an error', ->
  72. beforeEach ->
  73. @rclient.set = sinon.stub().callsArgWith(4, null)
  74. it 'should set a key in redis', (done) ->
  75. @call (err) =>
  76. @rclient.set.callCount.should.equal 1
  77. @rclient.set.calledWith('Cooldown:{abcdefg}').should.equal true
  78. done()
  79. it 'should not produce an error', (done) ->
  80. @call (err) =>
  81. expect(err).to.equal null
  82. done()
  83. describe 'when rclient.set produces an error', ->
  84. beforeEach ->
  85. @rclient.set = sinon.stub().callsArgWith(4, new Error('woops'))
  86. it 'should set a key in redis', (done) ->
  87. @call (err) =>
  88. @rclient.set.callCount.should.equal 1
  89. @rclient.set.calledWith('Cooldown:{abcdefg}').should.equal true
  90. done()
  91. it 'produce an error', (done) ->
  92. @call (err) =>
  93. expect(err).to.not.equal null
  94. expect(err).to.be.instanceof Error
  95. done()