import pytest from pydantic import ValidationError as PydanticValidationError from src.models.get_metric_metadata import MAX_METADATA_METRICS, MetricMetadataRequest class TestMetricMetadataRequestValidation: def test_valid_minimal_request(self): req = MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", } ) assert req.cluster_id == "123" assert req.metric is None assert req.match is None assert req.limit is None def test_single_metric_lookup(self): req = MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "metric": "topsql_cpu_time_ms", } ) assert req.metric == "topsql_cpu_time_ms" def test_metric_strips_whitespace(self): req = MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "metric": " topsql_cpu_time_ms ", } ) assert req.metric == "topsql_cpu_time_ms" def test_empty_metric_becomes_none(self): req = MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "metric": " ", } ) assert req.metric is None def test_valid_match_regex(self): req = MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "match": "^topsql_", } ) assert req.match == "^topsql_" def test_invalid_match_regex_rejected(self): with pytest.raises(PydanticValidationError): MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "match": "[invalid", } ) def test_limit_upper_bound(self): with pytest.raises(PydanticValidationError): MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "limit": MAX_METADATA_METRICS + 1, } ) def test_limit_lower_bound(self): with pytest.raises(PydanticValidationError): MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "limit": 0, } ) def test_normalizes_env_and_deploy_type(self): req = MetricMetadataRequest.model_validate( { "cluster_id": "123", "env": " Prod ", "deploy_type": " Premium ", } ) assert req.env == "prod" assert req.deploy_type == "premium" def test_rejects_non_string_cluster_id(self): with pytest.raises(PydanticValidationError): MetricMetadataRequest.model_validate( { "cluster_id": 123, "env": "prod", "deploy_type": "premium", } )