| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- require('coffee-script')
- sinon = require('sinon')
- assert = require('assert')
- path = require('path')
- modulePath = path.join __dirname, '../../../../app/js/LockManager.js'
- project_id = 1234
- doc_id = 5678
- SandboxedModule = require('sandboxed-module')
- describe 'LockManager - releasing the lock', ()->
- beforeEach ->
- @client = {
- auth: ->
- eval: sinon.stub()
- }
- mocks =
- "logger-sharelatex":
- log:->
- error:->
- "redis-sharelatex":
- createClient : () => @client
- "settings-sharelatex": {
- redis:
- lock:
- key_schema:
- blockingKey: ({doc_id}) -> "Blocking:#{doc_id}"
- }
- "./Metrics": {inc: () ->}
- "./Profiler": class Profiler
- log: sinon.stub().returns { end: sinon.stub() }
- end: sinon.stub()
- @LockManager = SandboxedModule.require(modulePath, requires: mocks)
- @lockValue = "lock-value-stub"
- @callback = sinon.stub()
- describe "when the lock is current", ->
- beforeEach ->
- @client.eval = sinon.stub().yields(null, 1)
- @LockManager.releaseLock doc_id, @lockValue, @callback
- it 'should clear the data from redis', ->
- @client.eval.calledWith(@LockManager.unlockScript, 1, "Blocking:#{doc_id}", @lockValue).should.equal true
- it 'should call the callback', ->
- @callback.called.should.equal true
- describe "when the lock has expired", ->
- beforeEach ->
- @client.eval = sinon.stub().yields(null, 0)
- @LockManager.releaseLock doc_id, @lockValue, @callback
- it 'should return an error if the lock has expired', ->
- @callback.calledWith(new Error("tried to release timed out lock")).should.equal true
|