import uuid from uuid import UUID from ntr_text_fragmentation.models.linker_entity import LinkerEntity class TestLink: """Набор тестов для проверки функциональности связей (линков) с использованием LinkerEntity.""" def test_create_link(self): """Тест создания объекта LinkerEntity с параметрами связи.""" link_id = uuid.uuid4() name = "Тестовая связь" text = "Это текст тестовой связи" in_search_text = "Текст для поиска связи" metadata = {"key": "value"} source_id = uuid.uuid4() target_id = uuid.uuid4() link = LinkerEntity( id=link_id, name=name, text=text, in_search_text=in_search_text, metadata=metadata, source_id=source_id, target_id=target_id, type="Link" ) assert link.id == link_id assert link.name == name assert link.text == text assert link.in_search_text == in_search_text assert link.metadata == metadata assert link.source_id == source_id assert link.target_id == target_id assert link.type == "Link" assert link.number_in_relation is None assert link.is_link() is True def test_link_fixture(self, sample_link): """Тест использования фикстуры с предустановленными значениями.""" assert sample_link.id == UUID('98765432-9876-5432-9876-543298765432') assert sample_link.name == "Тестовая связь" assert sample_link.text == "Текст тестовой связи" assert sample_link.in_search_text is None # Значение по умолчанию assert sample_link.metadata == {"test_key": "test_value"} assert sample_link.source_id == UUID('12345678-1234-5678-1234-567812345678') assert sample_link.target_id == UUID('87654321-8765-4321-8765-432187654321') assert sample_link.type == "Link" assert sample_link.number_in_relation is None assert sample_link.is_link() is True def test_link_with_number_in_relation(self): """Тест создания объекта LinkerEntity с указанным номером в связи.""" link_id = uuid.uuid4() name = "Тестовая связь" text = "Это текст тестовой связи" in_search_text = "Текст для поиска связи" metadata = {"key": "value"} source_id = uuid.uuid4() target_id = uuid.uuid4() number_in_relation = 1 link = LinkerEntity( id=link_id, name=name, text=text, in_search_text=in_search_text, metadata=metadata, source_id=source_id, target_id=target_id, number_in_relation=number_in_relation, type="Link" ) assert link.id == link_id assert link.name == name assert link.text == text assert link.in_search_text == in_search_text assert link.metadata == metadata assert link.source_id == source_id assert link.target_id == target_id assert link.type == "Link" assert link.number_in_relation == number_in_relation assert link.is_link() is True def test_link_to_string(self): """Тест метода __str__().""" # Без in_search_text link = LinkerEntity( id=uuid.uuid4(), name="Тестовая связь", text="Текст тестовой связи", metadata={}, source_id=uuid.uuid4(), target_id=uuid.uuid4(), type="Link" ) expected_string = "Тестовая связь: Текст тестовой связи" assert str(link) == expected_string # С in_search_text link_with_search_text = LinkerEntity( id=uuid.uuid4(), name="Тестовая связь", text="Текст тестовой связи", in_search_text="Специальный текст для поиска", metadata={}, source_id=uuid.uuid4(), target_id=uuid.uuid4(), type="Link" ) assert str(link_with_search_text) == "Специальный текст для поиска" def test_link_compare(self, sample_link): """Тест метода __eq__ для сравнения связей.""" # Создаем копию с теми же основными атрибутами same_link = LinkerEntity( id=sample_link.id, name=sample_link.name, text=sample_link.text, in_search_text="Другой текст для поиска", # Отличается от sample_link metadata={}, # Отличается от sample_link source_id=sample_link.source_id, target_id=sample_link.target_id, type="Link" ) # Должны быть равны по __eq__, так как метаданные и in_search_text не учитываются в сравнении assert sample_link == same_link # Создаем связь с другим ID different_id_link = LinkerEntity( id=uuid.uuid4(), name=sample_link.name, text=sample_link.text, metadata=sample_link.metadata, source_id=sample_link.source_id, target_id=sample_link.target_id, type="Link" ) assert sample_link != different_id_link def test_invalid_link_creation(self): """Тест создания некорректной связи (без source_id или target_id).""" link_id = uuid.uuid4() # Пробуем создать связь только с source_id try: LinkerEntity( id=link_id, name="Некорректная связь", text="Текст некорректной связи", metadata={}, source_id=uuid.uuid4() ) assert False, "Создание связи только с source_id должно вызывать исключение" except ValueError: pass # Пробуем создать связь только с target_id try: LinkerEntity( id=link_id, name="Некорректная связь", text="Текст некорректной связи", metadata={}, target_id=uuid.uuid4() ) assert False, "Создание связи только с target_id должно вызывать исключение" except ValueError: pass def test_linker_entity_as_link(self): """Тест использования LinkerEntity как связи.""" entity_id = uuid.uuid4() source_id = uuid.uuid4() target_id = uuid.uuid4() # Создаем LinkerEntity с source_id и target_id linking_entity = LinkerEntity( id=entity_id, name="Связывающая сущность", text="Текст связывающей сущности", metadata={}, source_id=source_id, target_id=target_id ) # Проверяем, что LinkerEntity может выступать как связь assert linking_entity.is_link() is True assert linking_entity.source_id == source_id assert linking_entity.target_id == target_id # Создаем обычную сущность regular_entity = LinkerEntity( id=uuid.uuid4(), name="Обычная сущность", text="Текст обычной сущности", metadata={} ) # Проверяем, что обычная сущность не является связью assert regular_entity.is_link() is False