Test Failed
Pull Request — master (#86)
by Daniel
04:59
created

test_weather   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 7
eloc 27
dl 0
loc 40
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A WeatherTest.testWeatherRequest() 0 8 3
A WeatherTest.testWeatherResponse() 0 14 4
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