|
1
|
|
|
""" |
|
2
|
|
|
Tests for the Marvin Weather action |
|
3
|
|
|
""" |
|
4
|
|
|
|
|
5
|
|
|
import json |
|
6
|
|
|
import os |
|
7
|
|
|
|
|
8
|
|
|
from unittest import mock |
|
9
|
|
|
|
|
10
|
|
|
import requests |
|
11
|
|
|
|
|
12
|
|
|
from test_action import ActionTest |
|
13
|
|
|
from irc2phpbb import marvin_actions |
|
14
|
|
|
|
|
15
|
|
|
class WeatherTest(ActionTest): |
|
16
|
|
|
"""Tests for the Marvin Weather action""" |
|
17
|
|
|
def testWeatherRequest(self): |
|
18
|
|
|
"""Test that marvin sends the expected requests for weather info""" |
|
19
|
|
|
with mock.patch("irc2phpbb.marvin_actions.requests") as r: |
|
20
|
|
|
self.executeAction(marvin_actions.marvinWeather, "väder") |
|
21
|
|
|
for url in ["https://opendata-download-metobs.smhi.se/api/version/1.0/parameter/13/station/65090/period/latest-hour/data.json", |
|
22
|
|
|
"https://opendata-download-metobs.smhi.se/api/version/1.0/parameter/13/codes.json", |
|
23
|
|
|
"https://opendata-download-metfcst.smhi.se/api/category/pmp3g/version/2/geotype/point/lon/15.5890/lat/56.1500/data.json"]: |
|
24
|
|
|
self.assertTrue(mock.call(url, timeout=5) in r.get.call_args_list) |
|
25
|
|
|
|
|
26
|
|
|
def testWeatherResponse(self): |
|
27
|
|
|
"""Test that marvin properly parses weather responses""" |
|
28
|
|
|
responses = [] |
|
29
|
|
|
for responseFile in ["station.json", "codes.json", "weather.json"]: |
|
30
|
|
|
path = os.path.join(os.path.dirname(__file__), "resources", "weather", responseFile) |
|
31
|
|
|
with open(path, "r", encoding="UTF-8") as f: |
|
32
|
|
|
response = requests.models.Response() |
|
33
|
|
|
response._content = str.encode(json.dumps(json.load(f))) |
|
34
|
|
|
responses.append(response) |
|
35
|
|
|
|
|
36
|
|
|
with mock.patch("irc2phpbb.marvin_actions.requests") as r: |
|
37
|
|
|
r.get.side_effect = responses |
|
38
|
|
|
expected = "Karlskrona just nu: 11.7 °C. Inget signifikant väder observerat." |
|
39
|
|
|
self.assertActionOutput(marvin_actions.marvinWeather, "väder", expected) |
|
40
|
|
|
|