mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
4d70bd664f
These changes were previously merged, not deployed, and reverted. This reverts the revert. This reverts commit a6b8c6c658b33b6eee78b8b99e43308f32211ae2, reversing changes made to 93c98921372eed4244d22fce800716cb27eca299.
95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
/* eslint-disable
|
|
camelcase,
|
|
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
|
|
* DS206: Consider reworking classes to avoid initClass
|
|
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
|
|
*/
|
|
const sinon = require('sinon')
|
|
const assert = require('assert')
|
|
const path = require('path')
|
|
const modulePath = path.join(__dirname, '../../../../app/js/LockManager.js')
|
|
const project_id = 1234
|
|
const doc_id = 5678
|
|
const SandboxedModule = require('sandboxed-module')
|
|
|
|
describe('LockManager - releasing the lock', function () {
|
|
beforeEach(function () {
|
|
let Profiler
|
|
this.client = {
|
|
auth() {},
|
|
eval: sinon.stub()
|
|
}
|
|
const mocks = {
|
|
'@overleaf/redis-wrapper': {
|
|
createClient: () => this.client
|
|
},
|
|
'settings-sharelatex': {
|
|
redis: {
|
|
lock: {
|
|
key_schema: {
|
|
blockingKey({ doc_id }) {
|
|
return `Blocking:${doc_id}`
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
'./Metrics': { inc() {} },
|
|
'./Profiler': (Profiler = (function () {
|
|
Profiler = class Profiler {
|
|
static initClass() {
|
|
this.prototype.log = sinon.stub().returns({ end: sinon.stub() })
|
|
this.prototype.end = sinon.stub()
|
|
}
|
|
}
|
|
Profiler.initClass()
|
|
return Profiler
|
|
})())
|
|
}
|
|
this.LockManager = SandboxedModule.require(modulePath, { requires: mocks })
|
|
this.lockValue = 'lock-value-stub'
|
|
return (this.callback = sinon.stub())
|
|
})
|
|
|
|
describe('when the lock is current', function () {
|
|
beforeEach(function () {
|
|
this.client.eval = sinon.stub().yields(null, 1)
|
|
return this.LockManager.releaseLock(doc_id, this.lockValue, this.callback)
|
|
})
|
|
|
|
it('should clear the data from redis', function () {
|
|
return this.client.eval
|
|
.calledWith(
|
|
this.LockManager.unlockScript,
|
|
1,
|
|
`Blocking:${doc_id}`,
|
|
this.lockValue
|
|
)
|
|
.should.equal(true)
|
|
})
|
|
|
|
return it('should call the callback', function () {
|
|
return this.callback.called.should.equal(true)
|
|
})
|
|
})
|
|
|
|
return describe('when the lock has expired', function () {
|
|
beforeEach(function () {
|
|
this.client.eval = sinon.stub().yields(null, 0)
|
|
return this.LockManager.releaseLock(doc_id, this.lockValue, this.callback)
|
|
})
|
|
|
|
return it('should return an error if the lock has expired', function () {
|
|
return this.callback
|
|
.calledWith(sinon.match.instanceOf(Error))
|
|
.should.equal(true)
|
|
})
|
|
})
|
|
})
|