File size: 8,554 Bytes
86c402d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
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