| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- chai = require("chai")
- expect = chai.expect
- chai.should()
- RealTimeClient = require "./helpers/RealTimeClient"
- MockDocUpdaterServer = require "./helpers/MockDocUpdaterServer"
- FixturesManager = require "./helpers/FixturesManager"
- async = require "async"
- describe "joinDoc", ->
- before ->
- @lines = ["test", "doc", "lines"]
- @version = 42
- @ops = ["mock", "doc", "ops"]
- @ranges = {"mock": "ranges"}
-
- describe "when authorised readAndWrite", ->
- before (done) ->
- async.series [
- (cb) =>
- FixturesManager.setUpProject {
- privilegeLevel: "readAndWrite"
- }, (e, {@project_id, @user_id}) =>
- cb(e)
-
- (cb) =>
- FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
- cb(e)
- (cb) =>
- @client = RealTimeClient.connect()
- @client.on "connectionAccepted", cb
-
- (cb) =>
- @client.emit "joinProject", project_id: @project_id, cb
-
- (cb) =>
- @client.emit "joinDoc", @doc_id, (error, @returnedArgs...) => cb(error)
- ], done
- it "should get the doc from the doc updater", ->
- MockDocUpdaterServer.getDocument
- .calledWith(@project_id, @doc_id, -1)
- .should.equal true
-
- it "should return the doc lines, version, ranges and ops", ->
- @returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
-
- it "should have joined the doc room", (done) ->
- RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
- expect(@doc_id in client.rooms).to.equal true
- done()
-
- describe "when authorised readOnly", ->
- before (done) ->
- async.series [
- (cb) =>
- FixturesManager.setUpProject {
- privilegeLevel: "readOnly"
- }, (e, {@project_id, @user_id}) =>
- cb(e)
-
- (cb) =>
- FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
- cb(e)
- (cb) =>
- @client = RealTimeClient.connect()
- @client.on "connectionAccepted", cb
-
- (cb) =>
- @client.emit "joinProject", project_id: @project_id, cb
-
- (cb) =>
- @client.emit "joinDoc", @doc_id, (error, @returnedArgs...) => cb(error)
- ], done
- it "should get the doc from the doc updater", ->
- MockDocUpdaterServer.getDocument
- .calledWith(@project_id, @doc_id, -1)
- .should.equal true
-
- it "should return the doc lines, version, ranges and ops", ->
- @returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
-
- it "should have joined the doc room", (done) ->
- RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
- expect(@doc_id in client.rooms).to.equal true
- done()
-
- describe "when authorised as owner", ->
- before (done) ->
- async.series [
- (cb) =>
- FixturesManager.setUpProject {
- privilegeLevel: "owner"
- }, (e, {@project_id, @user_id}) =>
- cb(e)
-
- (cb) =>
- FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
- cb(e)
- (cb) =>
- @client = RealTimeClient.connect()
- @client.on "connectionAccepted", cb
-
- (cb) =>
- @client.emit "joinProject", project_id: @project_id, cb
-
- (cb) =>
- @client.emit "joinDoc", @doc_id, (error, @returnedArgs...) => cb(error)
- ], done
- it "should get the doc from the doc updater", ->
- MockDocUpdaterServer.getDocument
- .calledWith(@project_id, @doc_id, -1)
- .should.equal true
-
- it "should return the doc lines, version, ranges and ops", ->
- @returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
-
- it "should have joined the doc room", (done) ->
- RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
- expect(@doc_id in client.rooms).to.equal true
- done()
- # It is impossible to write an acceptance test to test joining an unauthorized
- # project, since joinProject already catches that. If you can join a project,
- # then you can join a doc in that project.
-
- describe "with a fromVersion", ->
- before (done) ->
- @fromVersion = 36
- async.series [
- (cb) =>
- FixturesManager.setUpProject {
- privilegeLevel: "readAndWrite"
- }, (e, {@project_id, @user_id}) =>
- cb(e)
-
- (cb) =>
- FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
- cb(e)
- (cb) =>
- @client = RealTimeClient.connect()
- @client.on "connectionAccepted", cb
-
- (cb) =>
- @client.emit "joinProject", project_id: @project_id, cb
-
- (cb) =>
- @client.emit "joinDoc", @doc_id, @fromVersion, (error, @returnedArgs...) => cb(error)
- ], done
- it "should get the doc from the doc updater with the fromVersion", ->
- MockDocUpdaterServer.getDocument
- .calledWith(@project_id, @doc_id, @fromVersion)
- .should.equal true
-
- it "should return the doc lines, version, ranges and ops", ->
- @returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
-
- it "should have joined the doc room", (done) ->
- RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
- expect(@doc_id in client.rooms).to.equal true
- done()
- describe "with options", ->
- before (done) ->
- @options = { encodeRanges: true }
- async.series [
- (cb) =>
- FixturesManager.setUpProject {
- privilegeLevel: "readAndWrite"
- }, (e, {@project_id, @user_id}) =>
- cb(e)
- (cb) =>
- FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
- cb(e)
- (cb) =>
- @client = RealTimeClient.connect()
- @client.on "connectionAccepted", cb
- (cb) =>
- @client.emit "joinProject", project_id: @project_id, cb
- (cb) =>
- @client.emit "joinDoc", @doc_id, @options, (error, @returnedArgs...) => cb(error)
- ], done
- it "should get the doc from the doc updater with the default fromVersion", ->
- MockDocUpdaterServer.getDocument
- .calledWith(@project_id, @doc_id, -1)
- .should.equal true
- it "should return the doc lines, version, ranges and ops", ->
- @returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
- it "should have joined the doc room", (done) ->
- RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
- expect(@doc_id in client.rooms).to.equal true
- done()
- describe "with fromVersion and options", ->
- before (done) ->
- @fromVersion = 36
- @options = { encodeRanges: true }
- async.series [
- (cb) =>
- FixturesManager.setUpProject {
- privilegeLevel: "readAndWrite"
- }, (e, {@project_id, @user_id}) =>
- cb(e)
- (cb) =>
- FixturesManager.setUpDoc @project_id, {@lines, @version, @ops, @ranges}, (e, {@doc_id}) =>
- cb(e)
- (cb) =>
- @client = RealTimeClient.connect()
- @client.on "connectionAccepted", cb
- (cb) =>
- @client.emit "joinProject", project_id: @project_id, cb
- (cb) =>
- @client.emit "joinDoc", @doc_id, @fromVersion, @options, (error, @returnedArgs...) => cb(error)
- ], done
- it "should get the doc from the doc updater with the fromVersion", ->
- MockDocUpdaterServer.getDocument
- .calledWith(@project_id, @doc_id, @fromVersion)
- .should.equal true
- it "should return the doc lines, version, ranges and ops", ->
- @returnedArgs.should.deep.equal [@lines, @version, @ops, @ranges]
- it "should have joined the doc room", (done) ->
- RealTimeClient.getConnectedClient @client.socket.sessionid, (error, client) =>
- expect(@doc_id in client.rooms).to.equal true
- done()
|