@@ -187,6 +187,81 @@ def test_sync_status_resolve_in_next_release_with_releases(self):
187187 "version" : release2 .version ,
188188 }
189189
190+ def test_sync_status_does_not_override_existing_recent_group_resolution (self ):
191+ """
192+ Test that the sync_status_inbound does not override the existing group resolution
193+ if the group was recently resolved
194+ """
195+ release = Release .objects .create (organization_id = self .project .organization_id , version = "a" )
196+ release2 = Release .objects .create (organization_id = self .project .organization_id , version = "b" )
197+ release .add_project (self .project )
198+ release2 .add_project (self .project )
199+ group = self .create_group (status = GroupStatus .UNRESOLVED )
200+ # add releases in the reverse order
201+ self .create_group_release (group = group , release = release2 )
202+ self .create_group_release (group = group , release = release )
203+
204+ assert group .status == GroupStatus .UNRESOLVED
205+
206+ # Resolve the group in old_release
207+ group .update (status = GroupStatus .RESOLVED , substatus = None )
208+ resolution = GroupResolution .objects .create (release = release , group = group )
209+ assert resolution .current_release_version is None
210+ assert resolution .release == release
211+ activity = Activity .objects .create (
212+ group = group ,
213+ project = group .project ,
214+ type = ActivityType .SET_RESOLVED_IN_RELEASE .value ,
215+ ident = resolution .id ,
216+ data = {"version" : release .version },
217+ )
218+
219+ with assume_test_silo_mode (SiloMode .CONTROL ):
220+ integration = self .create_provider_integration (provider = "example" , external_id = "123456" )
221+ integration .add_organization (group .organization , self .user )
222+
223+ for oi in OrganizationIntegration .objects .filter (
224+ integration_id = integration .id , organization_id = group .organization .id
225+ ):
226+ oi .update (
227+ config = {
228+ "sync_comments" : True ,
229+ "sync_status_outbound" : True ,
230+ "sync_status_inbound" : True ,
231+ "sync_assignee_outbound" : True ,
232+ "sync_assignee_inbound" : True ,
233+ "resolution_strategy" : "resolve_next_release" ,
234+ }
235+ )
236+
237+ external_issue = ExternalIssue .objects .create (
238+ organization_id = group .organization .id , integration_id = integration .id , key = "APP-123"
239+ )
240+
241+ GroupLink .objects .create (
242+ group_id = group .id ,
243+ project_id = group .project_id ,
244+ linked_type = GroupLink .LinkedType .issue ,
245+ linked_id = external_issue .id ,
246+ relationship = GroupLink .Relationship .references ,
247+ )
248+
249+ installation = integration .get_installation (group .organization .id )
250+ assert isinstance (installation , ExampleIntegration )
251+
252+ with self .feature ("organizations:integrations-issue-sync" ), self .tasks ():
253+ installation .sync_status_inbound (
254+ external_issue .key ,
255+ {"project_id" : "APP" , "status" : {"id" : "12345" , "category" : "done" }},
256+ )
257+
258+ assert Group .objects .get (id = group .id ).status == GroupStatus .RESOLVED
259+ resolution .refresh_from_db ()
260+ assert resolution .release == release
261+ assert resolution .current_release_version is None
262+ activity .refresh_from_db ()
263+ assert activity .data ["version" ] == release .version
264+
190265 def test_sync_status_resolve_in_next_release_with_semver (self ):
191266 release = Release .objects .create (
192267 organization_id = self .project .organization_id , version = "app@1.2.4"
0 commit comments