""" Unit tests for discover engine utilities. Tests I18nString, Metadata, and Component utilities. """ from __future__ import annotations from langbot.pkg.discover.engine import I18nString, Metadata, Component class TestI18nString: """Tests for I18nString Pydantic model.""" def test_create_with_english_only(self): """Create I18nString with only English.""" i18n = I18nString(en_US="Hello") assert i18n.en_US == "Hello" assert i18n.zh_Hans is None def test_create_with_multiple_languages(self): """Create I18nString with multiple languages.""" i18n = I18nString( en_US="Hello", zh_Hans="你好", zh_Hant="你好", ja_JP="こんにちは", ) assert i18n.en_US == "Hello" assert i18n.zh_Hans == "你好" assert i18n.zh_Hant == "你好" assert i18n.ja_JP == "こんにちは" def test_to_dict_with_english_only(self): """to_dict returns only non-None fields.""" i18n = I18nString(en_US="Hello") result = i18n.to_dict() assert result == {"en_US": "Hello"} def test_to_dict_with_multiple_languages(self): """to_dict returns all non-None fields.""" i18n = I18nString( en_US="Hello", zh_Hans="你好", ) result = i18n.to_dict() assert result == {"en_US": "Hello", "zh_Hans": "你好"} def test_to_dict_excludes_none(self): """to_dict excludes None values.""" i18n = I18nString( en_US="Hello", zh_Hans=None, ja_JP="こんにちは", ) result = i18n.to_dict() assert "zh_Hans" not in result assert "en_US" in result assert "ja_JP" in result def test_to_dict_all_languages(self): """to_dict with all supported languages.""" i18n = I18nString( en_US="Hello", zh_Hans="你好", zh_Hant="你好", ja_JP="こんにちは", th_TH="สวัสดี", vi_VN="Xin chào", es_ES="Hola", ) result = i18n.to_dict() assert len(result) == 7 class TestMetadata: """Tests for Metadata Pydantic model.""" def test_create_minimal(self): """Create Metadata with required fields only.""" from langbot.pkg.discover.engine import I18nString metadata = Metadata( name="test-component", label=I18nString(en_US="Test Component"), ) assert metadata.name == "test-component" assert metadata.label.en_US == "Test Component" def test_create_with_all_fields(self): """Create Metadata with all optional fields.""" from langbot.pkg.discover.engine import I18nString metadata = Metadata( name="test-component", label=I18nString(en_US="Test"), description=I18nString(en_US="A test component"), version="1.0.0", icon="test-icon", author="Test Author", repository="https://github.com/test/repo", ) assert metadata.version == "1.0.0" assert metadata.icon == "test-icon" assert metadata.author == "Test Author" class TestComponentManifest: """Tests for Component manifest detection.""" def test_is_component_manifest_valid(self): """is_component_manifest returns True for valid manifest.""" manifest = { 'apiVersion': 'v1', 'kind': 'Component', 'metadata': {'name': 'test'}, 'spec': {}, } assert Component.is_component_manifest(manifest) is True def test_is_component_manifest_missing_apiversion(self): """is_component_manifest returns False without apiVersion.""" manifest = { 'kind': 'Component', 'metadata': {'name': 'test'}, 'spec': {}, } assert Component.is_component_manifest(manifest) is False def test_is_component_manifest_missing_kind(self): """is_component_manifest returns False without kind.""" manifest = { 'apiVersion': 'v1', 'metadata': {'name': 'test'}, 'spec': {}, } assert Component.is_component_manifest(manifest) is False def test_is_component_manifest_missing_metadata(self): """is_component_manifest returns False without metadata.""" manifest = { 'apiVersion': 'v1', 'kind': 'Component', 'spec': {}, } assert Component.is_component_manifest(manifest) is False def test_is_component_manifest_missing_spec(self): """is_component_manifest returns False without spec.""" manifest = { 'apiVersion': 'v1', 'kind': 'Component', 'metadata': {'name': 'test'}, } assert Component.is_component_manifest(manifest) is False def test_is_component_manifest_empty(self): """is_component_manifest returns False for empty dict.""" manifest = {} assert Component.is_component_manifest(manifest) is False def test_is_component_manifest_extra_fields_ok(self): """is_component_manifest accepts extra fields.""" manifest = { 'apiVersion': 'v1', 'kind': 'Component', 'metadata': {'name': 'test'}, 'spec': {}, 'extraField': 'ignored', } assert Component.is_component_manifest(manifest) is True