Files
overleaf-cep/services/real-time/test/acceptance/js/DrainManagerTests.js
Andrew Rumble f434bc3825 Merge pull request #31142 from overleaf/ar-promisify-web-api-manager
[real-time] promisify web api manager

GitOrigin-RevId: da2677c05dd7d066b0a625763d4158b28671615e
2026-02-05 09:05:48 +00:00

107 lines
2.6 KiB
JavaScript

// 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
*/
import RealTimeClient from './helpers/RealTimeClient.js'
import FixturesManager from './helpers/FixturesManager.js'
import { expect } from 'chai'
import async from 'async'
import { fetchNothing } from '@overleaf/fetch-utils'
const drain = async function (rate) {
await fetchNothing(`http://127.0.0.1:3026/drain?rate=${rate}`, {
method: 'POST',
})
}
describe('DrainManagerTests', function () {
before(function (done) {
FixturesManager.setUpProject(
{
privilegeLevel: 'owner',
project: {
name: 'Test Project',
},
},
(e, { project_id: projectId, user_id: userId }) => {
this.project_id = projectId
this.user_id = userId
done()
}
)
return null
})
before(function (done) {
// cleanup to speedup reconnecting
this.timeout(10000)
RealTimeClient.disconnectAllClients(done)
})
// trigger and check cleanup
it('should have disconnected all previous clients', function (done) {
RealTimeClient.getConnectedClients((error, data) => {
if (error) {
return done(error)
}
expect(data.length).to.equal(0)
done()
})
})
describe('with two clients in the project', function () {
beforeEach(function (done) {
async.series(
[
cb => {
this.clientA = RealTimeClient.connect(this.project_id, cb)
},
cb => {
this.clientB = RealTimeClient.connect(this.project_id, cb)
},
],
done
)
})
describe('starting to drain', function () {
beforeEach(function (done) {
async.parallel(
[
cb => {
this.clientA.on('reconnectGracefully', cb)
},
cb => {
this.clientB.on('reconnectGracefully', cb)
},
cb =>
drain(2)
.then(() => cb())
.catch(cb),
],
done
)
})
afterEach(async function () {
await drain(0)
}) // reset drain
it('should not timeout', function () {
expect(true).to.equal(true)
})
it('should not have disconnected', function () {
expect(this.clientA.socket.connected).to.equal(true)
expect(this.clientB.socket.connected).to.equal(true)
})
})
})
})