import pytest
import json

import util.location


@pytest.fixture
def urllib_req(mocker):
    util.location.reset()
    return mocker.patch("util.location.urllib.request")


@pytest.fixture
def secondaryLocation():
    return {
        "country": "Middle Earth",
        "longitude": "10.0",
        "latitude": "20.5",
        "ip": "127.0.0.1",
    }


@pytest.fixture
def primaryLocation():
    return {
        "country_name": "Rivia",
        "longitude": "-10.0",
        "latitude": "-23",
        "ip": "127.0.0.6",
    }


def test_primary_provider(urllib_req, primaryLocation):
    urllib_req.urlopen.return_value.read.return_value = json.dumps(primaryLocation)

    assert util.location.country() == primaryLocation["country_name"]
    assert util.location.coordinates() == (
        primaryLocation["latitude"],
        primaryLocation["longitude"],
    )
    assert util.location.public_ip() == primaryLocation["ip"]


def test_secondary_provider(mocker, urllib_req, secondaryLocation):
    urlopen = mocker.MagicMock()
    urlopen.read.return_value = json.dumps(secondaryLocation)
    urllib_req.urlopen.side_effect = [RuntimeError(), urlopen]

    assert util.location.country() == secondaryLocation["country"]
    assert util.location.coordinates() == (
        secondaryLocation["latitude"],
        secondaryLocation["longitude"],
    )
    assert util.location.public_ip() == secondaryLocation["ip"]


# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4