diff --git a/README.md b/README.md index 3c2c440..1e1698d 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Asjon necessita di: 1. lanciare `bin/hubot` per testare il bot. Per usare le variabili d'ambiente usare la sintassi di bash `VARIABILE=valore VAR2=valore2 bin/hubot`. -### Testing +### Utilizzo Puoi avviare asjon eseguendo @@ -58,6 +58,19 @@ Se tutto va bene dovrebbe comparire una cosa del genere: Puoi interagire con asjon scrivendo `asjon help` o qualsiasi altro suo comando. +### Test + +Asjon dispone di alcuni test d'integrità nella cartella `test/`. + +Per eseguirli, occorre: + +1. installare [mocha](http://mochajs.org) tramite `npm install -g mocha` (potrebbe essere necessario sudo) +1. installare le dipendenze di sviluppo tramite `npm install --dev` +1. lanciare i test tramite `npm test` dalla cartella della repo + +__Nota Bene:__ è opportuno __eseguire sempre i test d'integrità prima di contribuire una modifica__. Ancora meglio sarebbe +allegare dei test di integrità insieme alle nuove funzioni aggiunte + ### Scripting Gli script di Asjon sono nella cartella `scripts`. diff --git a/asjon-testing.coffee b/asjon-testing.coffee new file mode 100644 index 0000000..e985a1c --- /dev/null +++ b/asjon-testing.coffee @@ -0,0 +1,30 @@ +#expect = require("chai").expect +path = require("path") + +Robot = require("hubot/src/robot") +TextMessage = require("hubot/src/message").TextMessage + +before = (done) -> + robot = new Robot null, "mock-adapter", no, 'asjon' + robot.adapter.on 'connected', -> + #robot.loadFile (path.resolve path.join 'scripts/memoria.coffee'), 'memoria.coffee' + user = robot.brain.userForId "1", { name: 'mocha', room: '#mocha' } + adapter = robot.adapter + send = (s) -> robot.adapter.receive new TextMessage user, s + receive = (f) -> robot.adapter.on 'send', f + after = -> robot.shutdown() + clear = -> robot.adapter.removeAllListeners(); robot.httpListener = [] + # Mock http calls + ### + robot.onHttp = (f) -> robot.httpListener = f + robot.http = (addr) -> + get: -> + robot.onHttp addr, + ### + done + robot: robot, user: user, send: send, receive: receive + TextMessage: TextMessage, Robot: Robot + adapter: adapter, after: after, clear: clear + robot.run() + +module.exports = before diff --git a/package.json b/package.json index 536b498..b81471a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "asjon", - "version": "0.0.0", + "version": "1.1.2", "private": true, "author": "Enrico Fasoli ", "description": "Il miglior amico della 5IA", @@ -29,7 +29,14 @@ "soupselect": "^0.2.0", "weak": "^0.4.0" }, + "scripts": { + "test": "mocha test/ --compilers coffee:coffee-script/register" + }, "engines": { "node": "0.10.x" + }, + "devDependencies": { + "chai": "^2.3.0", + "hubot-mock-adapter": "^1.0.0" } } diff --git a/test/memoria-test.coffee b/test/memoria-test.coffee new file mode 100644 index 0000000..eb5033b --- /dev/null +++ b/test/memoria-test.coffee @@ -0,0 +1,79 @@ +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'è","chi è","cosa sono","quand'è"] + asjon.receive (envelope,strings) -> + replies++ + if replies is 5 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' +