@@ -384,6 +384,77 @@ func TestMergePullRequest(t *testing.T) {
384384 }
385385}
386386
387+ func TestConvertGitlabMR_MergeCommitSelection (t * testing.T ) {
388+ testCases := []struct {
389+ name string
390+ glMR gitlab.BasicMergeRequest
391+ expectedMerged bool
392+ expectedMergeCommit string
393+ }{
394+ {
395+ name : "merged - prefers MergeCommitSHA when present" ,
396+ glMR : gitlab.BasicMergeRequest {
397+ IID : 1 ,
398+ State : "merged" ,
399+ MergeCommitSHA : "merge_sha" ,
400+ SquashCommitSHA : "squash_sha" ,
401+ SHA : "head_sha" ,
402+ WebURL : "https://gitlab.com/group/project/-/merge_requests/1" ,
403+ },
404+ expectedMerged : true ,
405+ expectedMergeCommit : "merge_sha" ,
406+ },
407+ {
408+ name : "merged - falls back to SquashCommitSHA when MergeCommitSHA is empty" ,
409+ glMR : gitlab.BasicMergeRequest {
410+ IID : 2 ,
411+ State : "merged" ,
412+ SquashCommitSHA : "squash_sha" ,
413+ SHA : "head_sha" ,
414+ WebURL : "https://gitlab.com/group/project/-/merge_requests/2" ,
415+ },
416+ expectedMerged : true ,
417+ expectedMergeCommit : "squash_sha" ,
418+ },
419+ {
420+ name : "merged - falls back to SHA when both MergeCommitSHA and SquashCommitSHA are empty" ,
421+ glMR : gitlab.BasicMergeRequest {
422+ IID : 3 ,
423+ State : "merged" ,
424+ SHA : "head_sha" ,
425+ WebURL : "https://gitlab.com/group/project/-/merge_requests/3" ,
426+ },
427+ expectedMerged : true ,
428+ expectedMergeCommit : "head_sha" ,
429+ },
430+ {
431+ name : "not merged - merge commit is empty regardless of fields" ,
432+ glMR : gitlab.BasicMergeRequest {
433+ IID : 4 ,
434+ State : "opened" ,
435+ MergeCommitSHA : "merge_sha" ,
436+ SquashCommitSHA : "squash_sha" ,
437+ SHA : "head_sha" ,
438+ WebURL : "https://gitlab.com/group/project/-/merge_requests/4" ,
439+ },
440+ expectedMerged : false ,
441+ expectedMergeCommit : "" ,
442+ },
443+ }
444+
445+ for _ , tc := range testCases {
446+ t .Run (tc .name , func (t * testing.T ) {
447+ pr := convertGitlabMR (tc .glMR )
448+
449+ require .Equal (t , tc .expectedMerged , pr .Merged )
450+ require .Equal (t , tc .expectedMergeCommit , pr .MergeCommitSHA )
451+ require .Equal (t , tc .glMR .IID , pr .Number )
452+ require .Equal (t , tc .glMR .WebURL , pr .URL )
453+ require .Equal (t , tc .glMR .SHA , pr .HeadSHA )
454+ })
455+ }
456+ }
457+
387458func TestParseGitLabURL (t * testing.T ) {
388459 const expectedProjectName = "akuity/kargo"
389460 testCases := []struct {
0 commit comments