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 che tempo c'è a crema" "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'