nock = require 'nock' expect = require("chai").should() Asjon = require './asjon-testing.coffee' asjon = undefined loc_payload = city: "Milano" key = 'totally-legit-key' payload = name: loc_payload.city sys: sunrise: 12345 sunset: 12345 main: humidity: 50 temp: 20 weather: [ description: 'ok' ] describe 'modulo meteo', -> before (done) -> # Inizializzo robot Asjon (assa) -> asjon = assa after asjon.after afterEach asjon.clear beforeEach nock.disableNetConnect require('../scripts/meteo.coffee')(asjon.robot) done() it 'non dovrebbe rispondere se manca l\'API key', (done) -> process.env.WEATHER_API_KEY = '' asjon.receive (e,l) -> l.join().should.equal 'errore nel guardare il cielo:\nnon ho la chiave per openweathermap :(' done() asjon.send 'asjon meteo' it 'dovrebbe rispondere quando interrogato', (done) -> process.env.WEATHER_API_KEY = key questions = [ "asjon mi dici il tempo per roma?" "asjon dammi le previsioni!" "asjon dammi le previsioni per milano" "asjon mi dai il meteo per l'aquila?" "asjon che tempo c'è in grecia?" "asjon che tempo fa a crema?" "asjon che tempo c'è?" "asjon che tempo fa?" ] nock('http://api.openweathermap.org') .get('/data/2.5/weather?lang=it&units=metric&appid='+key+'&q='+loc_payload.city) .times questions.length .reply 200, payload nock('http://ip-api.com') .get('/json') .times 2 .reply 200, loc_payload 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 nel payload', (done) -> process.env.WEATHER_API_KEY = key nock('http://api.openweathermap.org') .get('/data/2.5/weather?lang=it&units=metric&appid='+key+'&q='+loc_payload.city) .reply 500, 'very error' asjon.receive (e,l) -> l.join().should.match /^errore nel guardare il cielo/g done() asjon.send 'asjon meteo' it 'dovrebbe trovare la posizione correttamente', (done) -> process.env.WEATHER_API_KEY = key nock('http://api.openweathermap.org') .get('/data/2.5/weather?lang=it&units=metric&appid='+key+'&q='+loc_payload.city) .reply 200, payload nock('http://ip-api.com') .get('/json/') .times 1 .reply 200, loc_payload asjon.receive (e,l) -> l.join().split(' ')[2].should.equal loc_payload.city+":\n" l.join().should.match /^meteo per /g done() asjon.send 'asjon meteo'