import pytest from pydantic import ValidationError as PydanticValidationError from src.models.metric_labels import ( MAX_LABEL_RESULTS, ListMetricLabelsRequest, ListMetricLabelValuesRequest, ) class TestListLabelsRequest: def test_valid_request_defaults_limit(self): req = ListMetricLabelsRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", } ) assert req.limit == MAX_LABEL_RESULTS assert req.match is None def test_normalizes_scope(self): req = ListMetricLabelsRequest.model_validate( { "cluster_id": " 123 ", "env": " Prod ", "deploy_type": " Premium ", } ) assert req.cluster_id == "123" assert req.env == "prod" assert req.deploy_type == "premium" def test_limit_bounds(self): with pytest.raises(PydanticValidationError): ListMetricLabelsRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "limit": 0, } ) with pytest.raises(PydanticValidationError): ListMetricLabelsRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "limit": 101, } ) def test_rejects_non_string_cluster_id(self): with pytest.raises(PydanticValidationError): ListMetricLabelsRequest.model_validate( { "cluster_id": 123, "env": "prod", "deploy_type": "premium", } ) def test_accepts_start_end(self): req = ListMetricLabelsRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "start": "2024-01-01T00:00:00Z", "end": "2024-01-01T01:00:00Z", } ) assert req.start == "2024-01-01T00:00:00Z" assert req.end == "2024-01-01T01:00:00Z" class TestLabelValuesRequest: def test_valid_request(self): req = ListMetricLabelValuesRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "label": "instance", } ) assert req.label == "instance" assert req.limit == MAX_LABEL_RESULTS def test_rejects_empty_label(self): with pytest.raises(PydanticValidationError): ListMetricLabelValuesRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "label": " ", } ) def test_rejects_invalid_label_name(self): with pytest.raises(PydanticValidationError): ListMetricLabelValuesRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "label": "bad-label", } ) def test_accepts_start_end(self): req = ListMetricLabelValuesRequest.model_validate( { "cluster_id": "123", "env": "prod", "deploy_type": "premium", "label": "instance", "start": "2024-01-01T00:00:00Z", "end": "2024-01-01T01:00:00Z", } ) assert req.start == "2024-01-01T00:00:00Z" assert req.end == "2024-01-01T01:00:00Z"