/* eslint-disable handle-callback-err, 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 sinon = require('sinon') const chai = require('chai') chai.should() const { expect } = chai const mongojs = require('../../../app/js/mongojs') const { ObjectId } = mongojs const Settings = require('settings-sharelatex') const LockManager = require('../../../app/js/LockManager') const rclient = require('redis').createClient(Settings.redis.history) // Only works locally for now const TrackChangesApp = require('./helpers/TrackChangesApp') describe('Locking document', function () { before(function (done) { TrackChangesApp.ensureRunning(done) return null }) return describe('when the lock has expired in redis', function () { before(function (done) { LockManager.LOCK_TTL = 1 // second LockManager.runWithLock( 'doc123', (releaseA) => { // we create a lock A and allow it to expire in redis return setTimeout( () => // now we create a new lock B and try to release A LockManager.runWithLock( 'doc123', (releaseB) => { return releaseA() }, // try to release lock A to see if it wipes out lock B (error) => {} ), // we never release lock B so nothing should happen here 1500 ) }, // enough time to wait until the lock has expired (error) => // we get here after trying to release lock A done() ) return null }) return it('the new lock should not be removed by the expired locker', function (done) { LockManager.checkLock('doc123', (err, isFree) => { expect(isFree).to.equal(false) return done() }) return null }) }) })