test(mr): close linked issues when a merge request auto-merges
1 file · +27 -0
M internal/usecase/issue_links_test.go +27 -0
| @@ -11,8 +11,10 @@ import ( | |||
| 11 | 11 | ||
| 12 | 12 | "bnema.dev/ermite/internal/domain" | |
| 13 | 13 | "bnema.dev/ermite/internal/ports" | |
| 14 | + | "bnema.dev/ermite/internal/ports/mocks" | |
| 14 | 15 | "bnema.dev/ermite/internal/usecase" | |
| 15 | 16 | "github.com/stretchr/testify/assert" | |
| 17 | + | "github.com/stretchr/testify/mock" | |
| 16 | 18 | "github.com/stretchr/testify/require" | |
| 17 | 19 | ) | |
| 18 | 20 | ||
| @@ -233,3 +235,28 @@ func TestIssueLinksMergeReindexesRequestsWhoseSourceMoved(t *testing.T) { | |||
| 233 | 235 | require.Len(t, after, 1) | |
| 234 | 236 | assert.Equal(t, issue.Number, after[0].Issue) | |
| 235 | 237 | } | |
| 238 | + | ||
| 239 | + | func TestAutoMergeClosesLinkedIssue(t *testing.T) { | |
| 240 | + | r, _, issues := linkedRig(t) | |
| 241 | + | issue, err := issues.Create(r.ctx, root, r.repo, ports.CreateIssueParams{Title: "bug"}) | |
| 242 | + | require.NoError(t, err) | |
| 243 | + | r.feature("feat") | |
| 244 | + | mr, err := r.mrs.Create(r.ctx, root, r.repo, ports.CreateMergeRequestParams{Title: "fix", Source: "feat", Description: fmt.Sprintf("closes #%d", issue.Number)}) | |
| 245 | + | require.NoError(t, err) | |
| 246 | + | _, err = r.repos.Update(r.ctx, root, r.repo, ports.UpdateRepoParams{AllowAutoMerge: ptr(true)}) | |
| 247 | + | require.NoError(t, err) | |
| 248 | + | checks := mocks.NewCIChecksReader(t) | |
| 249 | + | r.mrs.SetChecks(checks) | |
| 250 | + | enableAuto(t, r, mr) | |
| 251 | + | checks.EXPECT().CommitChecks(mock.Anything, r.repo, r.head().String()).Return([]domain.CICheck{{Status: domain.CICompleted, Conclusion: domain.CISuccess}}, nil).Twice() | |
| 252 | + | a := autoEvaluator(r, checks, nil, nil) | |
| 253 | + | defer a.Close(r.ctx) | |
| 254 | + | require.True(t, a.Evaluate(r.repo)) | |
| 255 | + | r.mrs.Wait(r.ctx) | |
| 256 | + | merged := storedAuto(t, r, mr) | |
| 257 | + | require.Equal(t, domain.MRStateMerged, merged.State) | |
| 258 | + | require.True(t, merged.AutoMerged) | |
| 259 | + | got, err := issues.Get(r.ctx, root, r.repo, issue.Number) | |
| 260 | + | require.NoError(t, err) | |
| 261 | + | assert.False(t, got.Issue.IsOpen()) | |
| 262 | + | } | |
| @@ -11,8 +11,10 @@ import ( | |||||
| 11 | 11 | ||||
| 12 | "bnema.dev/ermite/internal/domain" | 12 | "bnema.dev/ermite/internal/domain" | ||
| 13 | "bnema.dev/ermite/internal/ports" | 13 | "bnema.dev/ermite/internal/ports" | ||
| 14 | + | "bnema.dev/ermite/internal/ports/mocks" | |||
| 14 | "bnema.dev/ermite/internal/usecase" | 15 | "bnema.dev/ermite/internal/usecase" | ||
| 15 | "github.com/stretchr/testify/assert" | 16 | "github.com/stretchr/testify/assert" | ||
| 17 | + | "github.com/stretchr/testify/mock" | |||
| 16 | "github.com/stretchr/testify/require" | 18 | "github.com/stretchr/testify/require" | ||
| 17 | ) | 19 | ) | ||
| 18 | 20 | ||||
| @@ -233,3 +235,28 @@ func TestIssueLinksMergeReindexesRequestsWhoseSourceMoved(t *testing.T) { | |||||
| 233 | require.Len(t, after, 1) | 235 | require.Len(t, after, 1) | ||
| 234 | assert.Equal(t, issue.Number, after[0].Issue) | 236 | assert.Equal(t, issue.Number, after[0].Issue) | ||
| 235 | } | 237 | } | ||
| 238 | + | ||||
| 239 | + | func TestAutoMergeClosesLinkedIssue(t *testing.T) { | |||
| 240 | + | r, _, issues := linkedRig(t) | |||
| 241 | + | issue, err := issues.Create(r.ctx, root, r.repo, ports.CreateIssueParams{Title: "bug"}) | |||
| 242 | + | require.NoError(t, err) | |||
| 243 | + | r.feature("feat") | |||
| 244 | + | mr, err := r.mrs.Create(r.ctx, root, r.repo, ports.CreateMergeRequestParams{Title: "fix", Source: "feat", Description: fmt.Sprintf("closes #%d", issue.Number)}) | |||
| 245 | + | require.NoError(t, err) | |||
| 246 | + | _, err = r.repos.Update(r.ctx, root, r.repo, ports.UpdateRepoParams{AllowAutoMerge: ptr(true)}) | |||
| 247 | + | require.NoError(t, err) | |||
| 248 | + | checks := mocks.NewCIChecksReader(t) | |||
| 249 | + | r.mrs.SetChecks(checks) | |||
| 250 | + | enableAuto(t, r, mr) | |||
| 251 | + | checks.EXPECT().CommitChecks(mock.Anything, r.repo, r.head().String()).Return([]domain.CICheck{{Status: domain.CICompleted, Conclusion: domain.CISuccess}}, nil).Twice() | |||
| 252 | + | a := autoEvaluator(r, checks, nil, nil) | |||
| 253 | + | defer a.Close(r.ctx) | |||
| 254 | + | require.True(t, a.Evaluate(r.repo)) | |||
| 255 | + | r.mrs.Wait(r.ctx) | |||
| 256 | + | merged := storedAuto(t, r, mr) | |||
| 257 | + | require.Equal(t, domain.MRStateMerged, merged.State) | |||
| 258 | + | require.True(t, merged.AutoMerged) | |||
| 259 | + | got, err := issues.Get(r.ctx, root, r.repo, issue.Number) | |||
| 260 | + | require.NoError(t, err) | |||
| 261 | + | assert.False(t, got.Issue.IsOpen()) | |||
| 262 | + | } | |||