diff --git a/integrationtests/test_issues.py b/integrationtests/test_issues.py index 76392f3a4ce20d7ed6b6ccc30c79f1ce400001f7..ea5af8eadda714f82cc9de216527ca42d02bf617 100644 --- a/integrationtests/test_issues.py +++ b/integrationtests/test_issues.py @@ -28,6 +28,8 @@ from linkahead.cached import cache_clear from linkahead.utils.register_tests import clear_database, set_test_key from pytest import fixture, mark, raises +import tempfile + set_test_key("10b128cf8a1372f30aa3697466bb55e76974e0c16a599bb44ace88f19c8f61e2") @@ -328,3 +330,35 @@ def test_indiscale_87(clear_database): print(db.apiutils.compare_entities(rec, retrieved)) assert db.apiutils.empty_diff(rec, retrieved) print("---") + + +def test_issue_existing_file_id(clear_database): + """ + Issue title: Synchronization with IDs fails + + https://gitlab.indiscale.com/caosdb/src/caosdb-crawler/-/issues/174 + """ + + rt1 = db.RecordType(name="RT1") + rt2 = db.RecordType(name="RT2").insert() + rt1.add_property(rt2, importance=db.OBLIGATORY) + rt1.insert() + + r = db.Record() + r.add_parent(rt1) + with tempfile.NamedTemporaryFile() as tmpf: + f = db.File(name="test_parent", path="parent_test/file.txt", file=tmpf.name) + f.insert() + + f2 = db.File(name="test_parent", path="parent_test/file.txt", file=tmpf.name) + f2.id = f.id + + f2.add_parent(rt2) + r.add_property(name="RT2", value=f2) + + ident = CaosDBIdentifiableAdapter() + ident.register_identifiable("RT1", db.RecordType().add_parent( + name="RT1").add_property(name="RT2")) + crawler = Crawler(identifiableAdapter=ident) + crawler.synchronize(crawled_data=[f2, r]) +