import pytest
from unittest import TestCase, mock

import core.config
import core.widget
import modules.contrib.publicip


def build_module():
    config = core.config.Config([])
    return modules.contrib.publicip.Module(config=config, theme=None)

def widget(module):
    return module.widgets()[0]

class PublicIPTest(TestCase):
    def test_load_module(self):
        __import__("modules.contrib.publicip")

    @mock.patch('util.location.location_info')
    def test_public_ip(self, location_mock):
        location_mock.return_value = {
            'public_ip': '5.12.220.2',
            'latitude': 0,
            'longitude': 2,
            'country': 'some country',
            'country_code': 'sc',
            'city_name': '???',
        }

        module = build_module()
        module.update()

        assert widget(module).full_text() == '5.12.220.2 (sc)'

    @mock.patch('util.location.location_info')
    def test_public_ip2(self, location_mock):
        location_mock.return_value = {
            'public_ip': None,
            'latitude': 0,
            'longitude': 2,
            'country': 'some country',
            'country_code': 'sc',
            'city_name': '???',
        }

        module = build_module()
        module.update()

        assert widget(module).full_text() == 'n/a'

    @mock.patch('util.location.location_info')
    def test_public_ip_with_exception(self, location_mock):
        location_mock.side_effect = Exception

        module = build_module()
        module.update()

        assert widget(module).full_text() == 'n/a'

    def test_interval_seconds(self):
        module = build_module()

        assert module.parameter('interval') == 3600