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