"""Invariant tests for model-facing connector names and wire-slug recovery."""

import pytest

from tools.connectors.gateway.names import (
    format_connector_name,
    parse_connector_name,
    vendor_slug_candidates,
)


ENCODE_CASES = [
    (
        "gmail",
        "GMAIL_GET_PROFILE",
        "connectors__gmail__GET_PROFILE",
        True,
    ),
    (
        "better_stack_mcp",
        "BETTER_STACK_MCP_ACKNOWLEDGE_INCIDENT",
        "connectors__better_stack_mcp__ACKNOWLEDGE_INCIDENT",
        True,
    ),
    (
        "gmail",
        "FETCH_PROFILE",
        "connectors__gmail__FETCH_PROFILE",
        False,
    ),
    (
        "gmail",
        "GMAIL",
        "connectors__gmail__GMAIL",
        False,
    ),
    (
        "granola",
        "GRANOLA_MCP_GET_MEETINGS",
        "connectors__granola__MCP_GET_MEETINGS",
        True,
    ),
]


@pytest.mark.parametrize("connector,vendor_slug,composed,_stripped", ENCODE_CASES)
def test_format_connector_name_strips_only_the_exact_toolkit_prefix(
    connector, vendor_slug, composed, _stripped
):
    assert format_connector_name(connector, vendor_slug) == composed


def test_vendor_slug_candidates_are_prefixed_then_literal():
    assert vendor_slug_candidates("gmail", "GET_PROFILE") == (
        "GMAIL_GET_PROFILE",
        "GET_PROFILE",
    )


@pytest.mark.parametrize("connector,vendor_slug,composed,stripped", ENCODE_CASES)
def test_every_encoded_vendor_slug_has_a_wire_recovery_candidate(
    connector, vendor_slug, composed, stripped
):
    parsed = parse_connector_name(composed)
    assert parsed is not None

    candidates = vendor_slug_candidates(parsed.connector, parsed.tool)
    assert vendor_slug in candidates
    if stripped:
        assert candidates[0] == vendor_slug
