Files
2026-07-13 13:22:34 +08:00

133 lines
3.5 KiB
Python

import pytest
from mlflow.demo.base import (
DEMO_EXPERIMENT_NAME,
DEMO_PROMPT_PREFIX,
BaseDemoGenerator,
DemoFeature,
DemoResult,
)
def test_demo_feature_enum():
assert DemoFeature.TRACES == "traces"
assert DemoFeature.EVALUATION == "evaluation"
assert isinstance(DemoFeature.TRACES, str)
def test_demo_result_with_enum():
result = DemoResult(
feature=DemoFeature.TRACES,
entity_ids=["trace-1"],
navigation_url="/traces",
)
assert result.feature == DemoFeature.TRACES
assert result.feature == "traces"
def test_demo_result_fields():
result = DemoResult(
feature=DemoFeature.TRACES,
entity_ids=["a", "b"],
navigation_url="/test",
)
assert result.feature == DemoFeature.TRACES
assert result.entity_ids == ["a", "b"]
assert result.navigation_url == "/test"
def test_constants():
assert DEMO_EXPERIMENT_NAME == "MLflow Demo"
assert DEMO_PROMPT_PREFIX == "mlflow-demo"
def test_generator_requires_name():
class NoNameGenerator(BaseDemoGenerator):
def generate(self):
pass
def _data_exists(self):
return False
with pytest.raises(ValueError, match="must define 'name'"):
NoNameGenerator()
def test_generator_with_name(stub_generator):
assert stub_generator.name == DemoFeature.TRACES
def test_generator_default_version():
class VersionedGenerator(BaseDemoGenerator):
name = DemoFeature.TRACES
def generate(self):
pass
def _data_exists(self):
return False
generator = VersionedGenerator()
assert generator.version == 1
def test_generator_custom_version():
class CustomVersionGenerator(BaseDemoGenerator):
name = DemoFeature.EVALUATION
version = 5
def generate(self):
pass
def _data_exists(self):
return False
generator = CustomVersionGenerator()
assert generator.version == 5
def test_generator_generate_returns_result(stub_generator):
result = stub_generator.generate()
assert isinstance(result, DemoResult)
assert result.feature == DemoFeature.TRACES
assert stub_generator.generate_called
def test_is_generated_false_when_no_data(stub_generator):
stub_generator.data_exists_value = False
assert stub_generator.is_generated() is False
def test_is_generated_true_when_data_and_version_match(stub_generator):
stub_generator.data_exists_value = True
stub_generator.stored_version_value = 1
stub_generator.version = 1
assert stub_generator.is_generated() is True
def test_is_generated_false_when_version_mismatch(stub_generator):
stub_generator.data_exists_value = True
stub_generator.stored_version_value = 1
stub_generator.version = 2
assert stub_generator.is_generated() is False
def test_is_generated_calls_delete_demo_on_version_mismatch(stub_generator):
stub_generator.data_exists_value = True
stub_generator.stored_version_value = 1
stub_generator.version = 2
stub_generator.is_generated()
assert stub_generator.delete_demo_called is True
def test_is_generated_no_delete_when_no_data(stub_generator):
stub_generator.data_exists_value = False
stub_generator.is_generated()
assert stub_generator.delete_demo_called is False
def test_is_generated_false_when_no_stored_version(stub_generator):
stub_generator.data_exists_value = True
stub_generator.stored_version_value = None
assert stub_generator.is_generated() is False