@@ -140,6 +140,60 @@ async def test_merge_relationship_many(
140140 assert len (await org1_main .tags .get (db = db )) == 3
141141
142142
143+ async def test_merge_relationship_one (
144+ db : InfrahubDatabase ,
145+ person_tag_schema : None ,
146+ default_branch : Branch ,
147+ tag_blue_main : Node ,
148+ tag_red_main : Node ,
149+ tag_black_main : Node ,
150+ person_jack_main : Node ,
151+ ):
152+ await person_jack_main .primary_tag .update (db = db , data = [tag_blue_main ])
153+ await person_jack_main .save (db = db )
154+
155+ branch1 = await create_branch (db = db , branch_name = "branch1" )
156+ component_registry = get_component_registry ()
157+ diff_coordinator = await component_registry .get_component (DiffCoordinator , db = db , branch = branch1 )
158+
159+ person_jack_branch = await NodeManager .get_one (id = person_jack_main .id , branch = branch1 , db = db )
160+ await person_jack_branch .primary_tag .update (db = db , data = [tag_red_main ])
161+ await person_jack_branch .save (db = db )
162+
163+ await diff_coordinator .update_branch_diff (base_branch = default_branch , diff_branch = branch1 )
164+ diff_merger = await component_registry .get_component (DiffMerger , db = db , branch = branch1 )
165+ await diff_merger .merge_graph (at = Timestamp ())
166+
167+ # check person on main
168+ fresh_jack_on_main = await NodeManager .get_one (db = db , id = person_jack_main .id )
169+ tag_rels = await fresh_jack_on_main .primary_tag .get_relationships (db = db )
170+ assert len (tag_rels ) == 1
171+ assert tag_rels [0 ].peer_id == tag_red_main .id
172+
173+ # update person on main
174+ await fresh_jack_on_main .primary_tag .update (db = db , data = [tag_black_main ])
175+ await fresh_jack_on_main .save (db = db )
176+ refreshed_jack_on_main = await NodeManager .get_one (db = db , id = person_jack_main .id )
177+ tag_rels = await refreshed_jack_on_main .primary_tag .get_relationships (db = db )
178+ assert len (tag_rels ) == 1
179+ assert tag_rels [0 ].peer_id == tag_black_main .id
180+
181+ # check person on branch
182+ fresh_jack_on_branch = await NodeManager .get_one (db = db , branch = branch1 , id = person_jack_main .id )
183+ tag_rels = await fresh_jack_on_branch .primary_tag .get_relationships (db = db )
184+ assert len (tag_rels ) == 1
185+ assert tag_rels [0 ].peer_id == tag_red_main .id
186+
187+ # update person on branch
188+ await fresh_jack_on_branch .primary_tag .update (db = db , data = [tag_black_main ])
189+ await fresh_jack_on_branch .save (db = db )
190+ refreshed_jack_on_branch = await NodeManager .get_one (db = db , branch = branch1 , id = person_jack_main .id )
191+
192+ tag_rels = await refreshed_jack_on_branch .primary_tag .get_relationships (db = db )
193+ assert len (tag_rels ) == 1
194+ assert tag_rels [0 ].peer_id == tag_black_main .id
195+
196+
143197async def test_merge_update_schema (
144198 db : InfrahubDatabase ,
145199 default_branch : Branch ,
0 commit comments