 Settings = require('settings-sharelatex')
 rclient_history = require("redis-sharelatex").createClient(Settings.redis.history)
 ProjectHistoryKeys = Settings.redis.project_history.key_schema
-SandboxedModule = require('sandboxed-module')
-HistoryManagerModulePath = require('path').join __dirname, '../../../app/js/HistoryManager.js'
-ProjectManagerModulePath = require('path').join __dirname, '../../../app/js/ProjectManager.js'
-RedisManagerModulePath = require('path').join __dirname, '../../../app/js/RedisManager.js'
 
+MockProjectHistoryApi = require "./helpers/MockProjectHistoryApi"
 MockWebApi = require "./helpers/MockWebApi"
 DocUpdaterClient = require "./helpers/DocUpdaterClient"
 


	describe "with enough updates to flush to the history service", ->
		before (done) ->
			@RedisManager = SandboxedModule.require RedisManagerModulePath, requires:
				"logger-sharelatex": @logger = { log: sinon.stub(), error: sinon.stub() }
			@HistoryManager = SandboxedModule.require HistoryManagerModulePath, requires:
				"request": {}
				"settings-sharelatex": {}
				"logger-sharelatex": @logger
				"./HistoryRedisManager": {}
			@HistoryManager.flushProjectChangesAsync = sinon.stub()
			@ProjectManager = SandboxedModule.require ProjectManagerModulePath, requires:
				'./HistoryManager': @HistoryManager
				'logger-sharelatex' : @logger
				'./Metrics': @Metrics = {}
				'./RedisManager': @RedisManager
			@Metrics.Timer = class Timer
				done: sinon.stub()

			@project_id = DocUpdaterClient.randomId()
			@user_id = DocUpdaterClient.randomId()


					pathname: '/file-' + v
					docLines: 'a\nb'

			sinon.spy MockProjectHistoryApi, "flushProject"

			# Send updates in chunks to causes multiple flushes
			projectId = @project_id
			userId = @project_id
			DocUpdaterClient.sendProjectUpdate projectId, userId, updates.slice(0, 250), [], (error) ->
				throw error if error?
				DocUpdaterClient.sendProjectUpdate projectId, userId, updates.slice(250), [], (error) ->
					throw error if error?
					setTimeout done, 2000

		after ->
			MockProjectHistoryApi.flushProject.restore()

		it "should flush project history", ->
			MockProjectHistoryApi.flushProject.calledWith(@project_id).should.equal true
