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

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

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

  it 'non dovrebbe rispondere se manca l\'API key', (done) ->
    process.env.WOLFRAM_API_KEY=''
    asjon.receive (e,l) ->
      l.join().should.equal 'non ho le chiavi per Wolfram Alpha :('
      done()
    asjon.send 'asjon wfa test'

  it 'dovrebbe reagire correttamente in caso di risposta malformata', (done) ->
    process.env.WOLFRAM_API_KEY = 'totally-legit-key'
    nock('http://api.wolframalpha.com')
      .get('/v2/query?input=test&appid=totally-legit-key')
      .reply 400, 'no eenterwebz for u'
    acc = 0
    asjon.receive (e,l) ->
      if acc is 0
        l.join().should.match /(\w+| )+\.{3}$/g
      else
        l.join().split(':')[0].should.equal "c'รจ qualche problema"
      acc++
      if acc is 2 then done()
    asjon.send 'asjon wfa test'

  it 'dovrebbe parsare correttamente la risposta', (done) ->
    process.env.WOLFRAM_API_KEY = 'totally-legit-key'
    nock('http://api.wolframalpha.com')
      .get('/v2/query?input=test&appid=totally-legit-key')
      .replyWithFile 200, __dirname+'/wolfram.xml'
    acc = 0
    asjon.receive (e,l) ->
      if acc is 0
        l.join().should.match /(\w+| )+\.{3}$/g
      else
        list = l.join().split '\n'
        list[0].should.equal '=== Input interpretation'
        list[1].should.match /^Answer to the/g
        list[2].should.equal '=== Result'
        list[3].should.equal '42'
      acc++
      if acc is 2 then done()
    asjon.send 'asjon wfa test'