asjon/test/meteo-test.coffee
2018-09-15 13:29:13 +02:00

90 lines
2.6 KiB
CoffeeScript

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'