/* 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 */ require('coffee-script') 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 = { 'logger-sharelatex': { log() {}, error() {} }, 'redis-sharelatex': { 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(new Error('tried to release timed out lock')) .should.equal(true) }) }) })