nock = require 'nock'
expect = require("chai").should()

Asjon = require './asjon-testing.coffee'
asjon = undefined

describe 'modulo shell', ->
  before (done) ->
    # Inizializzo robot
    Asjon (assa) ->
      asjon = assa
      after asjon.after
      afterEach asjon.clear
      require('../scripts/shell.coffee')(asjon.robot)
      done()

  it 'dovrebbe non eseguire i comandi se l\'interlocutore non รจ autorizzato', (done) ->
    asjon.receive (e,l) ->
      l.join().should.match /BZBZ (.+)/i
      done()
    process.env.ADMIN_ROOM = '#not-mocha'
    asjon.send 'asjon controlla gli aggiornamenti'

  ss = ['operazione in corso: ', 'operazione "completata": ']
  regexes = [/operazione in corso: (.+)/i, /operazione "completata": (.+)/i]

  it 'dovrebbe riconoscere la stanza autorizzata', (done) ->
    acc = 0
    asjon.receive (e,l) ->
      l.join().should.match regexes[acc]
      acc++
      if acc is 2 then done()
    process.env.ADMIN_ROOM = '#mocha'
    asjon.send 'asjon controlla gli aggiornamenti'

  it 'dovrebbe eseguire i comandi corretti per installare gli aggiornamenti', (done) ->
    cmd = 'git pull && yarn install'
    acc = 0
    asjon.receive (e,l) ->
      l.join().should.equal ss[acc]+cmd
      acc++
      if acc is 2 then done()
    process.env.ADMIN_ROOM = '#mocha'
    asjon.send 'asjon aggiornati'

  it 'dovrebbe eseguire i comandi corretti per controllare gli aggiornamenti', (done) ->
    cmd = 'git fetch && git status'
    acc = 0
    asjon.receive (e,l) ->
      l.join().should.equal ss[acc]+cmd
      acc++
      if acc is 2 then done()
    process.env.ADMIN_ROOM = '#mocha'
    asjon.send 'asjon controlla gli aggiornamenti'

  it 'dovrebbe eseguire i comandi corretti per installare le dipendenze', (done) ->
    cmd = 'yarn install'
    acc = 0
    asjon.receive (e,l) ->
      l.join().should.equal ss[acc]+cmd
      acc++
      if acc is 2 then done()
    process.env.ADMIN_ROOM = '#mocha'
    asjon.send 'asjon installa le dipendenze'

  it 'dovrebbe eseguire i comandi corretti per eseguire i test', (done) ->
    cmd = 'yarn test'
    acc = 0
    asjon.receive (e,l) ->
      l.join().should.equal ss[acc]+cmd
      acc++
      if acc is 2 then done()
    process.env.ADMIN_ROOM = '#mocha'
    asjon.send 'asjon esegui i test'

  it 'dovrebbe autoriavviarsi in caso di update se richiesto', (done) ->
    data = ref: 'refs/heads/master'
    params = room: '#mocha', user: '#mocha'
    acc = 0
    asjon.receive (e,l) ->
      if acc is 0
        l.join().should.equal 'operazione in corso: git pull && yarn install'
      if acc is 1
        l.join().should.equal 'operazione "completata": git pull && yarn install'
      if acc is 2
        l.join().should.equal 'riavvio in 5 SECONDI'
      acc++
      if acc is 3
        done()
    process.env.AUTO_KILL_ON_UPDATE = 'true'
    asjon.robot.emit 'githook', data, params