Просмотр исходного кода

Refactor acceptance tests to wait for connection before proceeding

James Allen 12 лет назад
Родитель
Сommit
b6f51fdafd

+ 25 - 17
services/real-time/test/acceptance/coffee/ClientTrackingTests.coffee

@@ -6,27 +6,35 @@ RealTimeClient = require "./helpers/RealTimeClient"
 MockWebServer = require "./helpers/MockWebServer"
 MockWebServer = require "./helpers/MockWebServer"
 FixturesManager = require "./helpers/FixturesManager"
 FixturesManager = require "./helpers/FixturesManager"
 
 
+async = require "async"
+
 describe "clientTracking", ->
 describe "clientTracking", ->
 	before (done) ->
 	before (done) ->
-		FixturesManager.setUpProject {
-			privilegeLevel: "owner"
-			project: {
-				name: "Test Project"
-			}
-		}, (error, data) =>
-			throw error if error?
-			{@user_id, @project_id} = data
-			@clientA = RealTimeClient.connect()
-			@clientB = RealTimeClient.connect()
-			@clientA.emit "joinProject", {
-				project_id: @project_id
-			}, (error) =>
-				throw error if error?
+		async.series [
+			(cb) =>
+				FixturesManager.setUpProject {
+					privilegeLevel: "owner"
+					project: { name: "Test Project"	}
+				}, (error, {@user_id, @project_id}) => cb()
+			
+			(cb) =>
+				@clientA = RealTimeClient.connect()
+				@clientA.on "connect", cb
+				
+			(cb) =>
+				@clientB = RealTimeClient.connect()
+				@clientB.on "connect", cb
+				
+			(cb) =>
+				@clientA.emit "joinProject", {
+					project_id: @project_id
+				}, cb
+				
+			(cb) =>
 				@clientB.emit "joinProject", {
 				@clientB.emit "joinProject", {
 					project_id: @project_id
 					project_id: @project_id
-				}, (error) =>
-					throw error if error?
-					done()
+				}, cb
+		], done
 					
 					
 	describe "when a client updates its cursor location", ->
 	describe "when a client updates its cursor location", ->
 		before (done) ->
 		before (done) ->

+ 82 - 52
services/real-time/test/acceptance/coffee/JoinDocTests.coffee

@@ -6,6 +6,8 @@ RealTimeClient = require "./helpers/RealTimeClient"
 MockDocUpdaterServer = require "./helpers/MockDocUpdaterServer"
 MockDocUpdaterServer = require "./helpers/MockDocUpdaterServer"
 FixturesManager = require "./helpers/FixturesManager"
 FixturesManager = require "./helpers/FixturesManager"
 
 
+async = require "async"
+
 describe "joinDoc", ->
 describe "joinDoc", ->
 	before ->
 	before ->
 		@lines = ["test", "doc", "lines"]
 		@lines = ["test", "doc", "lines"]
@@ -14,20 +16,27 @@ describe "joinDoc", ->
 			
 			
 	describe "when authorised readAndWrite", ->
 	describe "when authorised readAndWrite", ->
 		before (done) ->
 		before (done) ->
-			FixturesManager.setUpProject {
-				privilegeLevel: "readAndWrite"
-			}, (error, data) =>
-				throw error if error?
-				{@project_id, @user_id} = data
-				FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (error, data) =>
-					throw error if error?
-					{@doc_id} = data
+			async.series [
+				(cb) =>
+					FixturesManager.setUpProject {
+						privilegeLevel: "readAndWrite"
+					}, (e, {@project_id, @user_id}) =>
+						cb(e)
+					
+				(cb) =>
+					FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
+						cb(e)
+						
+				(cb) =>
 					@client = RealTimeClient.connect()
 					@client = RealTimeClient.connect()
-					@client.emit "joinProject", project_id: @project_id, (error) =>
-						throw error if error?
-						@client.emit "joinDoc", @doc_id, (error, @returnedArgs...) =>
-							throw error if error?
-							done()
+					@client.on "connect", 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", ->
 		it "should get the doc from the doc updater", ->
 			MockDocUpdaterServer.getDocument
 			MockDocUpdaterServer.getDocument
@@ -44,20 +53,27 @@ describe "joinDoc", ->
 		
 		
 	describe "when authorised readOnly", ->
 	describe "when authorised readOnly", ->
 		before (done) ->
 		before (done) ->
-			FixturesManager.setUpProject {
-				privilegeLevel: "readOnly"
-			}, (error, data) =>
-				throw error if error?
-				{@project_id, @user_id} = data
-				FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (error, data) =>
-					throw error if error?
-					{@doc_id} = data
+			async.series [
+				(cb) =>
+					FixturesManager.setUpProject {
+						privilegeLevel: "readOnly"
+					}, (e, {@project_id, @user_id}) =>
+						cb(e)
+					
+				(cb) =>
+					FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
+						cb(e)
+						
+				(cb) =>
 					@client = RealTimeClient.connect()
 					@client = RealTimeClient.connect()
-					@client.emit "joinProject", project_id: @project_id, (error) =>
-						throw error if error?
-						@client.emit "joinDoc", @doc_id, (error, @returnedArgs...) =>
-							throw error if error?
-							done()
+					@client.on "connect", 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", ->
 		it "should get the doc from the doc updater", ->
 			MockDocUpdaterServer.getDocument
 			MockDocUpdaterServer.getDocument
@@ -74,20 +90,27 @@ describe "joinDoc", ->
 		
 		
 	describe "when authorised as owner", ->
 	describe "when authorised as owner", ->
 		before (done) ->
 		before (done) ->
-			FixturesManager.setUpProject {
-				privilegeLevel: "owner"
-			}, (error, data) =>
-				throw error if error?
-				{@project_id, @user_id} = data
-				FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (error, data) =>
-					throw error if error?
-					{@doc_id} = data
+			async.series [
+				(cb) =>
+					FixturesManager.setUpProject {
+						privilegeLevel: "owner"
+					}, (e, {@project_id, @user_id}) =>
+						cb(e)
+					
+				(cb) =>
+					FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
+						cb(e)
+						
+				(cb) =>
 					@client = RealTimeClient.connect()
 					@client = RealTimeClient.connect()
-					@client.emit "joinProject", project_id: @project_id, (error) =>
-						throw error if error?
-						@client.emit "joinDoc", @doc_id, (error, @returnedArgs...) =>
-							throw error if error?
-							done()
+					@client.on "connect", 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", ->
 		it "should get the doc from the doc updater", ->
 			MockDocUpdaterServer.getDocument
 			MockDocUpdaterServer.getDocument
@@ -109,20 +132,27 @@ describe "joinDoc", ->
 	describe "with a fromVersion", ->
 	describe "with a fromVersion", ->
 		before (done) ->
 		before (done) ->
 			@fromVersion = 36
 			@fromVersion = 36
-			FixturesManager.setUpProject {
-				privilegeLevel: "readAndWrite"
-			}, (error, data) =>
-				throw error if error?
-				{@project_id, @user_id} = data
-				FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (error, data) =>
-					throw error if error?
-					{@doc_id} = data
+			async.series [
+				(cb) =>
+					FixturesManager.setUpProject {
+						privilegeLevel: "readAndWrite"
+					}, (e, {@project_id, @user_id}) =>
+						cb(e)
+					
+				(cb) =>
+					FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
+						cb(e)
+						
+				(cb) =>
 					@client = RealTimeClient.connect()
 					@client = RealTimeClient.connect()
-					@client.emit "joinProject", project_id: @project_id, (error) =>
-						throw error if error?
-						@client.emit "joinDoc", @doc_id, @fromVersion, (error, @returnedArgs...) =>
-							throw error if error?
-							done()
+					@client.on "connect", 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", ->
 		it "should get the doc from the doc updater with the fromVersion", ->
 			MockDocUpdaterServer.getDocument
 			MockDocUpdaterServer.getDocument

+ 37 - 27
services/real-time/test/acceptance/coffee/JoinProjectTests.coffee

@@ -6,24 +6,29 @@ RealTimeClient = require "./helpers/RealTimeClient"
 MockWebServer = require "./helpers/MockWebServer"
 MockWebServer = require "./helpers/MockWebServer"
 FixturesManager = require "./helpers/FixturesManager"
 FixturesManager = require "./helpers/FixturesManager"
 
 
+async = require "async"
 
 
 describe "joinProject", ->
 describe "joinProject", ->
 	describe "when authorized", ->
 	describe "when authorized", ->
 		before (done) ->
 		before (done) ->
-			FixturesManager.setUpProject {
-				privilegeLevel: "owner"
-				project: {
-					name: "Test Project"
-				}
-			}, (error, data) =>
-				throw error if error?
-				{@user_id, @project_id} = data
-				@client = RealTimeClient.connect()
-				@client.emit "joinProject", {
-					project_id: @project_id
-				}, (error, @project, @privilegeLevel, @protocolVersion) =>
-					throw error if error?
-					done()
+			async.series [
+				(cb) =>
+					FixturesManager.setUpProject {
+						privilegeLevel: "owner"
+						project: {
+							name: "Test Project"
+						}
+					}, (e, {@project_id, @user_id}) =>
+						cb(e)
+						
+				(cb) =>
+					@client = RealTimeClient.connect()
+					@client.on "connect", cb
+						
+				(cb) =>
+					@client.emit "joinProject", project_id: @project_id, (error, @project, @privilegeLevel, @protocolVersion) =>
+						cb(error)
+			], done
 					
 					
 		it "should get the project from web", ->
 		it "should get the project from web", ->
 			MockWebServer.joinProject
 			MockWebServer.joinProject
@@ -58,19 +63,24 @@ describe "joinProject", ->
 			
 			
 	describe "when not authorized", ->
 	describe "when not authorized", ->
 		before (done) ->
 		before (done) ->
-			FixturesManager.setUpProject {
-				privilegeLevel: null
-				project: {
-					name: "Test Project"
-				}
-			}, (error, data) =>
-				throw error if error?
-				{@user_id, @project_id} = data
-				@client = RealTimeClient.connect()
-				@client.emit "joinProject", {
-					project_id: @project_id
-				}, (@error, @project, @privilegeLevel, @protocolVersion) =>
-					done()
+			async.series [
+				(cb) =>
+					FixturesManager.setUpProject {
+						privilegeLevel: null
+						project: {
+							name: "Test Project"
+						}
+					}, (e, {@project_id, @user_id}) =>
+						cb(e)
+						
+				(cb) =>
+					@client = RealTimeClient.connect()
+					@client.on "connect", cb
+						
+				(cb) =>
+					@client.emit "joinProject", project_id: @project_id, (@error, @project, @privilegeLevel, @protocolVersion) =>
+						cb()
+			], done
 		
 		
 		it "should return an error", ->
 		it "should return an error", ->
 			# We don't return specific errors
 			# We don't return specific errors

+ 22 - 13
services/real-time/test/acceptance/coffee/LeaveDocTests.coffee

@@ -6,6 +6,8 @@ RealTimeClient = require "./helpers/RealTimeClient"
 MockDocUpdaterServer = require "./helpers/MockDocUpdaterServer"
 MockDocUpdaterServer = require "./helpers/MockDocUpdaterServer"
 FixturesManager = require "./helpers/FixturesManager"
 FixturesManager = require "./helpers/FixturesManager"
 
 
+async = require "async"
+
 describe "leaveDoc", ->
 describe "leaveDoc", ->
 	before ->
 	before ->
 		@lines = ["test", "doc", "lines"]
 		@lines = ["test", "doc", "lines"]
@@ -14,20 +16,27 @@ describe "leaveDoc", ->
 			
 			
 	describe "when joined to a doc", ->
 	describe "when joined to a doc", ->
 		before (done) ->
 		before (done) ->
-			FixturesManager.setUpProject {
-				privilegeLevel: "readAndWrite"
-			}, (error, data) =>
-				throw error if error?
-				{@project_id, @user_id} = data
-				FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (error, data) =>
-					throw error if error?
-					{@doc_id} = data
+			async.series [
+				(cb) =>
+					FixturesManager.setUpProject {
+						privilegeLevel: "readAndWrite"
+					}, (e, {@project_id, @user_id}) =>
+						cb(e)
+					
+				(cb) =>
+					FixturesManager.setUpDoc @project_id, {@lines, @version, @ops}, (e, {@doc_id}) =>
+						cb(e)
+						
+				(cb) =>
 					@client = RealTimeClient.connect()
 					@client = RealTimeClient.connect()
-					@client.emit "joinProject", project_id: @project_id, (error) =>
-						throw error if error?
-						@client.emit "joinDoc", @doc_id, (error, @returnedArgs...) =>
-							throw error if error?
-							done()
+					@client.on "connect", cb
+						
+				(cb) =>
+					@client.emit "joinProject", project_id: @project_id, cb
+				
+				(cb) =>
+					@client.emit "joinDoc", @doc_id, (error, @returnedArgs...) => cb(error)
+			], done
 							
 							
 		describe "then leaving the doc", ->
 		describe "then leaving the doc", ->
 			before (done) ->
 			before (done) ->