""" 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