text: 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
  