code: /* eslint-disable
      no-return-assign,
  */
  // TODO: This file was created by bulk-decaffeinate.
  // Fix any style issues and re-enable lint.
  /*
   * decaffeinate suggestions:
   * DS102: Remove unnecessary code created because of implicit returns
   * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
   */
  const SandboxedModule = require('sandboxed-module')
  const sinon = require('sinon')
  require('chai').should()
  const modulePath = require('path').join(
    __dirname,
    '../../../app/js/TikzManager'
  )
  
  describe('TikzManager', function () {
    beforeEach(function () {
      return (this.TikzManager = SandboxedModule.require(modulePath, {
        requires: {
          './ResourceWriter': (this.ResourceWriter = {}),
          './SafeReader': (this.SafeReader = {}),
          fs: (this.fs = {}),
          'logger-sharelatex': (this.logger = { log() {} })
        }
      }))
    })
  
    describe('checkMainFile', function () {
      beforeEach(function () {
        this.compileDir = 'compile-dir'
        this.mainFile = 'main.tex'
        return (this.callback = sinon.stub())
      })
  
      describe('if there is already an output.tex file in the resources', function () {
        beforeEach(function () {
          this.resources = [{ path: 'main.tex' }, { path: 'output.tex' }]
          return this.TikzManager.checkMainFile(
            this.compileDir,
            this.mainFile,
            this.resources,
            this.callback
          )
        })
  
        return it('should call the callback with false ', function () {
          return this.callback.calledWithExactly(null, false).should.equal(true)
        })
      })
  
      return describe('if there is no output.tex file in the resources', function () {
        beforeEach(function () {
          this.resources = [{ path: 'main.tex' }]
          return (this.ResourceWriter.checkPath = sinon
            .stub()
            .withArgs(this.compileDir, this.mainFile)
            .callsArgWith(2, null, `${this.compileDir}/${this.mainFile}`))
        })
  
        describe('and the main file contains tikzexternalize', function () {
          beforeEach(function () {
            this.SafeReader.readFile = sinon
              .stub()
              .withArgs(`${this.compileDir}/${this.mainFile}`)
              .callsArgWith(3, null, 'hello \\tikzexternalize')
            return this.TikzManager.checkMainFile(
              this.compileDir,
              this.mainFile,
              this.resources,
              this.callback
            )
          })
  
          it('should look at the file on disk', function () {
            return this.SafeReader.readFile
              .calledWith(`${this.compileDir}/${this.mainFile}`)
              .should.equal(true)
          })
  
          return it('should call the callback with true ', function () {
            return this.callback.calledWithExactly(null, true).should.equal(true)
          })
        })
  
        describe('and the main file does not contain tikzexternalize', function () {
          beforeEach(function () {
            this.SafeReader.readFile = sinon
              .stub()
              .withArgs(`${this.compileDir}/${this.mainFile}`)
              .callsArgWith(3, null, 'hello')
            return this.TikzManager.checkMainFile(
              this.compileDir,
              this.mainFile,
              this.resources,
              this.callback
            )
          })
  
          it('should look at the file on disk', function () {
            return this.SafeReader.readFile
              .calledWith(`${this.compileDir}/${this.mainFile}`)
              .should.equal(true)
          })
  
          return it('should call the callback with false', function () {
            return this.callback.calledWithExactly(null, false).should.equal(true)
          })
        })
  
        return describe('and the main file contains \\usepackage{pstool}', function () {
          beforeEach(function () {
            this.SafeReader.readFile = sinon
              .stub()
              .withArgs(`${this.compileDir}/${this.mainFile}`)
              .callsArgWith(3, null, 'hello \\usepackage[random-options]{pstool}')
            return this.TikzManager.checkMainFile(
              this.compileDir,
              this.mainFile,
              this.resources,
              this.callback
            )
          })
  
          it('should look at the file on disk', function () {
            return this.SafeReader.readFile
              .calledWith(`${this.compileDir}/${this.mainFile}`)
              .should.equal(true)
          })
  
          return it('should call the callback with true ', function () {
            return this.callback.calledWithExactly(null, true).should.equal(true)
          })
        })
      })
    })
  
    return describe('injectOutputFile', function () {
      beforeEach(function () {
        this.rootDir = '/mock'
        this.filename = 'filename.tex'
        this.callback = sinon.stub()
        this.content = `\
  \\documentclass{article}
  \\usepackage{tikz}
  \\tikzexternalize
  \\begin{document}
  Hello world
  \\end{document}\
  `
        this.fs.readFile = sinon.stub().callsArgWith(2, null, this.content)
        this.fs.writeFile = sinon.stub().callsArg(3)
        this.ResourceWriter.checkPath = sinon
          .stub()
          .callsArgWith(2, null, `${this.rootDir}/${this.filename}`)
        return this.TikzManager.injectOutputFile(
          this.rootDir,
          this.filename,
          this.callback
        )
      })
  
      it('sould check the path', function () {
        return this.ResourceWriter.checkPath
          .calledWith(this.rootDir, this.filename)
          .should.equal(true)
      })
  
      it('should read the file', function () {
        return this.fs.readFile
          .calledWith(`${this.rootDir}/${this.filename}`, 'utf8')
          .should.equal(true)
      })
  
      it('should write out the same file as output.tex', function () {
        return this.fs.writeFile
          .calledWith(`${this.rootDir}/output.tex`, this.content, { flag: 'wx' })
          .should.equal(true)
      })
  
      return it('should call the callback', function () {
        return this.callback.called.should.equal(true)
      })
    })
  })
  