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

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

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

  it 'risponde quando richiesto', (done) ->
    replies = 0
    arr = ["cos'è","qual'è","qual è","qualè","chi è","cosa sono","quand'è"]
    asjon.receive (envelope,strings) ->
      replies++
      if replies is arr.length then done()
    arr.map (x) -> 'asjon ' + x + ' test' + (if Math.random() > 0.5 then '?' else '')
       .forEach (x) -> asjon.send x

  it 'permette di memorizzare un ricordo', (done) ->
    asjon.receive (e,l) ->
      l.join().should.match /non sapevo che (.+)/i
      done()
    asjon.send 'asjon ricordati che a è b'

  it 'permette di alterare un ricordo', (done) ->
    acc = 0
    asjon.receive (e,l) ->
      l.join().should.match /pensavo che a fosse(ro)? (?:b|c). Mi ricorderò che invece è (?:c|b)/i
      acc++
      if acc is 3 then done()
    asjon.send "asjon ricordati che a è c"
    asjon.send "asjon ricordati che a = b"
    asjon.send "asjon ricordati che a sono c"

  it 'permette di eliminare un ricordo', (done) ->
    asjon.receive (e,l) ->
      l.join().should.match /^in caso cambi idea/i
      done()
    asjon.send 'asjon dimentica a'

  it 'permette di visualizzare una data', (done) ->
    asjon.receive (e,l) ->
      l.join().should.match /^l'8 dicembre è Martedì 8º dicembre 2015 ovvero/i
      done()
    asjon.send "asjon quand'è l'8 dicembre"

  it 'visualizza un argomento data solo se opportuno', (done) ->
    asjon.receive (e,l) ->
      l.join().should.not.match /^l'8 dicembre è Martedì 8º dicembre 2015 ovvero/i
      done()
    asjon.send "asjon chi è l'8 dicembre"

  it 'visualizza un valore data solo se opportuno', (done) ->
    acc = 0
    asjon.receive (e,l) ->
      acc++
      l.join().should.not.match /a è Martedì .+/i
      if acc is 2 then done()
    asjon.send "asjon ricordati che a è l'8 dicembre"
    asjon.send "asjon chi è a?"

  it 'offre un memory dump per debugging', (done) ->
    asjon.receive (e,l) ->
      JSON.parse(l.join()).should.be.a 'object'
      done()
    asjon.send 'asjon memory-dump'

  it 'non interferisce con "circolari"', (done) ->
    # se done() viene chiamato piu di 1 volta il test fallisce
    asjon.receive (e,l) -> done()
    asjon.send 'asjon cosa sono a?'
    asjon.send 'asjon cosa sono le circolari'