/* eslint-disable camelcase, handle-callback-err, no-unused-vars, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS101: Remove unnecessary use of Array.from * DS102: Remove unnecessary code created because of implicit returns * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ const chai = require("chai"); const { expect } = chai; chai.should(); const RealTimeClient = require("./helpers/RealTimeClient"); const MockWebServer = require("./helpers/MockWebServer"); const FixturesManager = require("./helpers/FixturesManager"); const async = require("async"); describe("clientTracking", function() { describe("when a client updates its cursor location", function() { before(function(done) { return async.series([ cb => { return FixturesManager.setUpProject({ privilegeLevel: "owner", project: { name: "Test Project" } }, (error, {user_id, project_id}) => { this.user_id = user_id; this.project_id = project_id; return cb(); }); }, cb => { return FixturesManager.setUpDoc(this.project_id, {lines: this.lines, version: this.version, ops: this.ops}, (e, {doc_id}) => { this.doc_id = doc_id; return cb(e); }); }, cb => { this.clientA = RealTimeClient.connect(); return this.clientA.on("connectionAccepted", cb); }, cb => { this.clientB = RealTimeClient.connect(); return this.clientB.on("connectionAccepted", cb); }, cb => { return this.clientA.emit("joinProject", { project_id: this.project_id }, cb); }, cb => { return this.clientA.emit("joinDoc", this.doc_id, cb); }, cb => { return this.clientB.emit("joinProject", { project_id: this.project_id }, cb); }, cb => { this.updates = []; this.clientB.on("clientTracking.clientUpdated", data => { return this.updates.push(data); }); return this.clientA.emit("clientTracking.updatePosition", { row: (this.row = 42), column: (this.column = 36), doc_id: this.doc_id }, (error) => { if (error != null) { throw error; } return setTimeout(cb, 300); }); } // Give the message a chance to reach client B. ], done); }); it("should tell other clients about the update", function() { return this.updates.should.deep.equal([ { row: this.row, column: this.column, doc_id: this.doc_id, id: this.clientA.publicId, user_id: this.user_id, name: "Joe Bloggs" } ]); }); return it("should record the update in getConnectedUsers", function(done) { return this.clientB.emit("clientTracking.getConnectedUsers", (error, users) => { for (const user of Array.from(users)) { if (user.client_id === this.clientA.publicId) { expect(user.cursorData).to.deep.equal({ row: this.row, column: this.column, doc_id: this.doc_id }); return done(); } } throw new Error("user was never found"); }); }); }); return describe("when an anonymous client updates its cursor location", function() { before(function(done) { return async.series([ cb => { return FixturesManager.setUpProject({ privilegeLevel: "owner", project: { name: "Test Project" }, publicAccess: "readAndWrite" }, (error, {user_id, project_id}) => { this.user_id = user_id; this.project_id = project_id; return cb(); }); }, cb => { return FixturesManager.setUpDoc(this.project_id, {lines: this.lines, version: this.version, ops: this.ops}, (e, {doc_id}) => { this.doc_id = doc_id; return cb(e); }); }, cb => { this.clientA = RealTimeClient.connect(); return this.clientA.on("connectionAccepted", cb); }, cb => { return this.clientA.emit("joinProject", { project_id: this.project_id }, cb); }, cb => { return RealTimeClient.setSession({}, cb); }, cb => { this.anonymous = RealTimeClient.connect(); return this.anonymous.on("connectionAccepted", cb); }, cb => { return this.anonymous.emit("joinProject", { project_id: this.project_id }, cb); }, cb => { return this.anonymous.emit("joinDoc", this.doc_id, cb); }, cb => { this.updates = []; this.clientA.on("clientTracking.clientUpdated", data => { return this.updates.push(data); }); return this.anonymous.emit("clientTracking.updatePosition", { row: (this.row = 42), column: (this.column = 36), doc_id: this.doc_id }, (error) => { if (error != null) { throw error; } return setTimeout(cb, 300); }); } // Give the message a chance to reach client B. ], done); }); return it("should tell other clients about the update", function() { return this.updates.should.deep.equal([ { row: this.row, column: this.column, doc_id: this.doc_id, id: this.anonymous.publicId, user_id: "anonymous-user", name: "" } ]); }); }); });