import unittest import json import urllib.request import util.location class location(unittest.TestCase): def setUp(self): patcher = unittest.mock.patch('util.location.urllib.request') self.addCleanup(patcher.stop) self.request = patcher.start() util.location.reset() self.primary = { 'country': 'Middle Earth', 'longitude': '10.0', 'latitude': '20.5', 'ip': '127.0.0.1', } self.secondary = { 'country_name': 'Rivia', 'longitude': '-10.0', 'latitude': '-23', 'ip': '127.0.0.6', } def test_primary_provider(self): self.request.urlopen.return_value.read.return_value = json.dumps(self.primary) util.location.country() self.assertEqual(self.primary['country'], util.location.country()) self.assertEqual((self.primary['latitude'], self.primary['longitude']), util.location.coordinates()) self.assertEqual(self.primary['ip'], util.location.public_ip()) def test_secondary_provider(self): urlopen = unittest.mock.MagicMock() urlopen.read.return_value = json.dumps(self.secondary) self.request.urlopen.side_effect = [ RuntimeError(), urlopen ] self.assertEqual(self.secondary['country_name'], util.location.country()) self.assertEqual((self.secondary['latitude'], self.secondary['longitude']), util.location.coordinates()) self.assertEqual(self.secondary['ip'], util.location.public_ip()) # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4