dify/api/tests/unit_tests/controllers/console/test_feature.py

132 lines
4.4 KiB
Python

from inspect import unwrap
from pytest_mock import MockerFixture
from enums.deployment_edition import DeploymentEdition
from services.feature_service import (
FeatureModel,
LicenseLimitationModel,
LicenseModel,
LicenseStatus,
LimitationModel,
SystemFeatureModel,
)
class TestFeatureApi:
def test_get_tenant_features_success(self, mocker: MockerFixture):
from controllers.console.feature import FeatureApi
features = FeatureModel(
knowledge_rate_limit=42,
vector_space=LimitationModel(size=1, limit=2),
)
get_features = mocker.patch("controllers.console.feature.FeatureService.get_features")
get_features.return_value = features
api = FeatureApi()
raw_get = unwrap(FeatureApi.get)
result = raw_get(api, "tenant_123")
expected = features.model_dump()
expected.pop("vector_space")
assert result == expected
get_features.assert_called_once_with("tenant_123", exclude_vector_space=True)
class TestFeatureVectorSpaceApi:
def test_get_vector_space_success(self, mocker: MockerFixture):
from controllers.console.feature import FeatureVectorSpaceApi
get_vector_space = mocker.patch("controllers.console.feature.FeatureService.get_vector_space")
get_vector_space.return_value = LimitationModel(size=5120, limit=20480)
api = FeatureVectorSpaceApi()
raw_get = unwrap(FeatureVectorSpaceApi.get)
result = raw_get(api, "tenant_123")
assert result == {"size": 5120, "limit": 20480}
get_vector_space.assert_called_once_with("tenant_123")
class TestTrialModelsApi:
def test_get_trial_models_success(self, mocker: MockerFixture):
from controllers.console.feature import TrialModelsApi
get_trial_models = mocker.patch("controllers.console.feature.FeatureService.get_trial_models")
get_trial_models.return_value = ["langgenius/openai/openai"]
api = TrialModelsApi()
raw_get = unwrap(TrialModelsApi.get)
result = raw_get(api)
assert result == {"trial_models": ["langgenius/openai/openai"]}
get_trial_models.assert_called_once_with()
class TestAppDslVersionApi:
def test_get_app_dsl_version_success(self, mocker: MockerFixture):
from controllers.console.feature import AppDslVersionApi
get_app_dsl_version = mocker.patch("controllers.console.feature.FeatureService.get_app_dsl_version")
get_app_dsl_version.return_value = "0.6.0"
api = AppDslVersionApi()
result = api.get()
assert result == {"app_dsl_version": "0.6.0"}
get_app_dsl_version.assert_called_once_with()
class TestSystemFeatureApi:
def test_get_system_features_public(self, mocker: MockerFixture):
"""The public endpoint returns system features without any authentication input."""
from controllers.console.feature import SystemFeatureApi
system_features = SystemFeatureModel(
deployment_edition=DeploymentEdition.COMMUNITY,
is_allow_register=True,
enable_learn_app=True,
)
get_system_features = mocker.patch(
"controllers.console.feature.FeatureService.get_system_features",
return_value=system_features,
)
api = SystemFeatureApi()
result = api.get()
assert result == system_features.model_dump()
assert result["is_allow_register"] is True
assert result["enable_learn_app"] is True
assert result["license"] == {"status": LicenseStatus.NONE}
get_system_features.assert_called_once_with()
class TestSystemFeatureLicenseApi:
def test_get_license_success(self, mocker: MockerFixture):
from controllers.console.feature import SystemFeatureLicenseApi
license_model = LicenseModel(
status=LicenseStatus.ACTIVE,
expired_at="2025-12-31",
seats=LicenseLimitationModel(enabled=True, limit=5, size=2),
)
get_license = mocker.patch(
"controllers.console.feature.FeatureService.get_license",
return_value=license_model,
)
api = SystemFeatureLicenseApi()
raw_get = unwrap(SystemFeatureLicenseApi.get)
result = raw_get(api)
assert result == license_model.model_dump()
assert result["seats"] == {"enabled": True, "limit": 5, "size": 2}
get_license.assert_called_once_with()