Skip to content

Commit 0727439

Browse files
committed
feat: add web knowledge creation tests with default sync settings
1 parent 8996f63 commit 0727439

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

‎apps/knowledge/serializers/knowledge.py‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import tempfile
77
import zipfile
88
from collections import defaultdict
9+
from copy import deepcopy
910
from functools import partial, reduce
1011
from tempfile import TemporaryDirectory
1112
from typing import Dict, List
@@ -72,6 +73,7 @@
7273
restore_resources,
7374
validate_archive,
7475
)
76+
from knowledge.services.knowledge_sync_schedule import DEFAULT_KNOWLEDGE_SYNC_SETTING
7577
from knowledge.services.multimodal_retrieval import (
7678
MAX_QUERY_IMAGE_COUNT,
7779
get_hit_asset_map,
@@ -1318,6 +1320,7 @@ def save_web(self, instance: Dict, with_valid=True):
13181320
"selector": selector,
13191321
"embedding_model_id": instance.get("embedding_model_id"),
13201322
"doc_strategy": doc_strategy,
1323+
"sync_setting": deepcopy(DEFAULT_KNOWLEDGE_SYNC_SETTING),
13211324
},
13221325
)
13231326
knowledge.save()

‎apps/knowledge/tests.py‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
from knowledge.services.image_documents import ImageDocumentService
6666
from knowledge.services.incremental_sync import IncrementalDocumentSync, MergeResult, prepare_remote_paragraphs
6767
from knowledge.services.knowledge_sync_schedule import (
68+
DEFAULT_KNOWLEDGE_SYNC_SETTING,
6869
deploy_knowledge_sync_job,
6970
normalize_knowledge_sync_setting,
7071
)
@@ -1160,6 +1161,64 @@ def test_replace_crawl_keeps_old_document_when_new_document_creation_fails(
11601161
delete_document_data.assert_not_called()
11611162

11621163

1164+
class WebKnowledgeCreationTests(SimpleTestCase):
1165+
def setUp(self):
1166+
self.save = self.enterContext(patch("knowledge.serializers.knowledge.Knowledge.save", autospec=True))
1167+
self.enterContext(patch("knowledge.serializers.knowledge.UserResourcePermissionSerializer"))
1168+
self.enterContext(patch("knowledge.serializers.knowledge.update_resource_mapping_by_knowledge"))
1169+
self.crawl = self.enterContext(patch("knowledge.serializers.knowledge.sync_web_knowledge.delay"))
1170+
self.deploy_schedule = self.enterContext(
1171+
patch("knowledge.serializers.knowledge.deploy_knowledge_sync_job.delay")
1172+
)
1173+
1174+
def create_web(self, with_valid=True):
1175+
serializer = KnowledgeSerializer.Create(
1176+
data={"user_id": "00000000-0000-0000-0000-000000000012", "workspace_id": "default"}
1177+
)
1178+
response = serializer.save_web(
1179+
{
1180+
"name": "Web docs",
1181+
"folder_id": "default",
1182+
"embedding_model_id": "00000000-0000-0000-0000-000000000013",
1183+
"source_url": "https://example.com",
1184+
"selector": ".content",
1185+
"doc_strategy": {"split": {"max_length": 1024}},
1186+
},
1187+
with_valid=with_valid,
1188+
)
1189+
return self.save.call_args.args[0], response
1190+
1191+
def test_web_creation_persists_and_returns_disabled_default_sync_setting(self):
1192+
for with_valid in (True, False):
1193+
with self.subTest(with_valid=with_valid):
1194+
self.save.reset_mock()
1195+
self.crawl.reset_mock()
1196+
knowledge, response = self.create_web(with_valid)
1197+
self.save.assert_called_once()
1198+
self.assertEqual(knowledge.meta["sync_setting"], DEFAULT_KNOWLEDGE_SYNC_SETTING)
1199+
self.assertFalse(knowledge.meta["sync_setting"]["enabled"])
1200+
self.assertEqual(response["meta"]["sync_setting"], DEFAULT_KNOWLEDGE_SYNC_SETTING)
1201+
self.assertEqual(knowledge.meta["doc_strategy"]["split"]["max_length"], 1024)
1202+
self.crawl.assert_called_once_with(
1203+
str(knowledge.id),
1204+
"00000000-0000-0000-0000-000000000012",
1205+
"https://example.com",
1206+
".content",
1207+
knowledge.meta["doc_strategy"],
1208+
)
1209+
self.deploy_schedule.assert_not_called()
1210+
1211+
def test_sync_defaults_are_independent_between_created_knowledge_bases(self):
1212+
first, _response = self.create_web()
1213+
first.meta["sync_setting"]["enabled"] = True
1214+
first.meta["sync_setting"]["time"].append("02:00")
1215+
second, _response = self.create_web()
1216+
self.assertFalse(second.meta["sync_setting"]["enabled"])
1217+
self.assertEqual(second.meta["sync_setting"]["time"], ["01:00"])
1218+
self.assertFalse(DEFAULT_KNOWLEDGE_SYNC_SETTING["enabled"])
1219+
self.assertEqual(DEFAULT_KNOWLEDGE_SYNC_SETTING["time"], ["01:00"])
1220+
1221+
11631222
class KnowledgeModelUpdateTests(SimpleTestCase):
11641223
@patch("knowledge.task.sync.QuerySet")
11651224
@patch("knowledge.serializers.knowledge.sync_replace_web_knowledge.delay")

0 commit comments

Comments
 (0)