import pytest
from urllib3_mock import Responses

from test.fixtures import (  # noqa: F401
    iptrunk_side_subscription_factory,
    iptrunk_subscription_factory,
    router_subscription_factory,
    site_subscription_factory,
)


@pytest.fixture(autouse=True)
def responses():
    responses_mock = Responses("requests.packages.urllib3")

    def _find_request(call):
        mock_url = responses_mock._find_match(call.request)  # noqa: SLF001
        if not mock_url:
            pytest.fail(f"Call not mocked: {call.request}")
        return mock_url

    def _to_tuple(url_mock):
        return url_mock["url"], url_mock["method"], url_mock["match_querystring"]

    with responses_mock:
        yield responses_mock

        mocked_urls = map(_to_tuple, responses_mock._urls)  # noqa: SLF001
        used_urls = map(_to_tuple, map(_find_request, responses_mock.calls))
        not_used = set(mocked_urls) - set(used_urls)
        if not_used:
            pytest.fail(f"Found unused responses mocks: {not_used}", pytrace=False)