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

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

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

  it 'dovrebbe rispondere quando interrogato', (done) ->
    nock('https://drone.io')
      .get('/github.com/fazo96/asjon/files/coverage/coverage.json')
      .reply 200, { coverage: 0,  files: [] }
    questions = [
      "asjon mostrami la copertura dei test"
      "asjon copertura dei test"
      "asjon copertura"
      "asjon coverage"
    ]
    acc = 0
    asjon.receive (e,l) ->
      acc++
      if acc is questions.length then done()
    questions.map (q) -> asjon.send q

  it 'dovrebbe reagire correttamente a un errore', (done) ->
    nock('https://drone.io')
      .get('/github.com/fazo96/asjon/files/coverage/coverage.json')
      .reply 200, 'invalid answer'
    asjon.receive (e,l) ->
      l.join().should.match /^Errore: SyntaxError: Unexpected token/g
      done()
    asjon.send 'asjon coverage'

  it 'dovrebbe reagire correttamente quando il report non รจ disponibile (404)', (done) ->
    nock('https://drone.io')
      .get('/github.com/fazo96/asjon/files/coverage/coverage.json')
      .reply 404, '404 page not found'
    asjon.receive (e,l) ->
      l.join().should.match /^Coverage report non disponibile/g
      done()
    asjon.send 'asjon coverage'

  it 'dovrebbe parsare correttamente il report json', (done) ->
    nock('https://drone.io')
      .get('/github.com/fazo96/asjon/files/coverage/coverage.json')
      .replyWithFile 200, __dirname+'/coverage.json'
    asjon.receive (e,l) ->
      l.join().should.match /^=== Coverage: /g
      done()
    asjon.send 'asjon coverage'