SandboxedModule = require('sandboxed-module')
assert = require('assert')
chai = require('chai')
expect = chai.expect
sinon = require('sinon')
modulePath = require('path').join __dirname, '../../../../app/js/Features/Exports/ExportsController.js'


describe 'ExportsController', ->
	project_id = "123njdskj9jlk"
	user_id = "123nd3ijdks"
	brand_variation_id = 22

	beforeEach ->
		@handler =
			getUserNotifications: sinon.stub().callsArgWith(1)
		@req =
			params:
				project_id: project_id
				brand_variation_id: brand_variation_id
			session:
				user:
					_id:user_id
			i18n:
				translate:->
		@AuthenticationController =
			getLoggedInUserId: sinon.stub().returns(@req.session.user._id)
		@controller = SandboxedModule.require modulePath, requires:
			"./ExportsHandler":@handler
			'logger-sharelatex':
				log:->
				err:->
			'../Authentication/AuthenticationController': @AuthenticationController

	it 'should ask the handler to perform the export', (done) ->
		@handler.exportProject = sinon.stub().yields(null, {iAmAnExport: true, v1_id: 897})
		@controller.exportProject @req, send:(body) =>
			expect(body).to.deep.equal {export_v1_id: 897}
			done()

	it 'should ask the handler to return the status of an export', (done) ->
		@handler.fetchExport = sinon.stub().yields(
			null,
			"{\"id\":897, \"status_summary\":\"completed\"}")

		@req.params = {project_id: project_id, export_id: 897}
		@controller.exportStatus @req, send:(body) =>
			expect(body).to.deep.equal {export_json: {
				status_summary: 'completed', status_detail: undefined
			}}
			done()