import sys
import types

import pytest

if "aiomysql" not in sys.modules:
    fake_aiomysql = types.ModuleType("aiomysql")
    fake_aiomysql.DictCursor = object
    fake_aiomysql.Pool = object

    async def _dummy_connect(*args, **kwargs):
        raise AssertionError("aiomysql.connect should not be called in tests")

    async def _dummy_create_pool(*args, **kwargs):
        raise AssertionError("aiomysql.create_pool should not be called in tests")

    fake_aiomysql.connect = _dummy_connect
    fake_aiomysql.create_pool = _dummy_create_pool
    sys.modules["aiomysql"] = fake_aiomysql

if "requests" not in sys.modules:
    fake_requests = types.ModuleType("requests")
    sys.modules["requests"] = fake_requests

if "flask" not in sys.modules:
    fake_flask = types.ModuleType("flask")

    class _DummyRequest:  # pylint: disable=too-few-public-methods
        pass

    fake_flask.Request = _DummyRequest
    sys.modules["flask"] = fake_flask

import ocpi_cdr_forwarder as forwarder  # pylint: disable=wrong-import-position


@pytest.mark.parametrize(
    "remote_url, version, expected",
    [
        (
            "https://csms.example.com/ocpi/versions",
            "2.2",
            "https://csms.example.com/ocpi/2.2/cdrs",
        ),
        (
            "https://csms.example.com/ocpi/versions/",
            "2.2",
            "https://csms.example.com/ocpi/2.2/cdrs",
        ),
        (
            "https://csms.example.com/api/ocpi/versions",
            "2.1.1",
            "https://csms.example.com/api/ocpi/2.1.1/cdrs",
        ),
        (
            "https://csms.example.com/ocpi",
            "2.1.1",
            "https://csms.example.com/ocpi/2.1.1/cdrs",
        ),
    ],
)
def test_build_cdr_endpoint_appends_single_ocpi(remote_url, version, expected):
    backend = {"remote_versions_url": remote_url, "active_version": version}

    assert forwarder._build_cdr_endpoint(backend) == expected  # pylint: disable=protected-access
