diff --git a/services/automerge/automerge_test.go b/services/automerge/automerge_test.go new file mode 100644 index 0000000000..4ad5b70cce --- /dev/null +++ b/services/automerge/automerge_test.go @@ -0,0 +1,54 @@ +// Copyright 2026 Forgejo Authors. All rights reserved. +// SPDX-License-Identifier: GPL-3.0-or-later + +package automerge + +import ( + "testing" + + "forgejo.org/models/db" + issues_model "forgejo.org/models/issues" + "forgejo.org/models/perm" + access_model "forgejo.org/models/perm/access" + pull_model "forgejo.org/models/pull" + "forgejo.org/models/unit" + "forgejo.org/models/unittest" + user_model "forgejo.org/models/user" + "forgejo.org/modules/util" + "github.com/stretchr/testify/require" +) + +func TestRemoveScheduledAutoMerge(t *testing.T) { + defer unittest.OverrideFixtures("services/automerge/fixtures/TestRemoveScheduledAutoMerge")() + require.NoError(t, unittest.PrepareTestDatabase()) + + user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}) + user5 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}) + pull1 := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 1}) + pull2 := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}) + + t.Run("No automerge", func(t *testing.T) { + err := RemoveScheduledAutoMerge(t.Context(), user5, pull2, access_model.Permission{}) + require.ErrorIs(t, err, db.ErrNotExist{Resource: "auto_merge", ID: 2}) + }) + + t.Run("No permission", func(t *testing.T) { + err := RemoveScheduledAutoMerge(t.Context(), user5, pull1, access_model.Permission{}) + require.ErrorIs(t, err, util.ErrPermissionDenied) + + err = RemoveScheduledAutoMerge(t.Context(), user5, pull1, access_model.Permission{UnitsMode: map[unit.Type]perm.AccessMode{ + unit.TypePullRequests: perm.AccessModeRead, + }}) + require.ErrorIs(t, err, util.ErrPermissionDenied) + }) + + t.Run("Normal", func(t *testing.T) { + err := RemoveScheduledAutoMerge(t.Context(), user2, pull1, access_model.Permission{UnitsMode: map[unit.Type]perm.AccessMode{ + unit.TypePullRequests: perm.AccessModeWrite, + }}) + require.NoError(t, err) + + unittest.AssertExistsIf(t, false, &pull_model.AutoMerge{PullID: pull1.ID}) + unittest.AssertExistsIf(t, true, &issues_model.Comment{IssueID: pull1.IssueID, Type: issues_model.CommentTypePRUnScheduledToAutoMerge}) + }) +} diff --git a/services/automerge/fixtures/TestRemoveScheduledAutoMerge/pull_auto_merge.yml b/services/automerge/fixtures/TestRemoveScheduledAutoMerge/pull_auto_merge.yml new file mode 100644 index 0000000000..2cacb611c3 --- /dev/null +++ b/services/automerge/fixtures/TestRemoveScheduledAutoMerge/pull_auto_merge.yml @@ -0,0 +1,8 @@ +- + id: 1001 + pull_id: 1 + doer_id: 2 + merge_style: "merge" + message: "Automatically merged" + delete_branch_after_merge: false + created_unix: 1771800000 diff --git a/services/automerge/main_test.go b/services/automerge/main_test.go new file mode 100644 index 0000000000..8c0e558b17 --- /dev/null +++ b/services/automerge/main_test.go @@ -0,0 +1,14 @@ +// Copyright 2026 The Forgejo Authors. All rights reserved. +// SPDX-License-Identifier: GPL-3.0-or-later + +package automerge + +import ( + "testing" + + "forgejo.org/models/unittest" +) + +func TestMain(m *testing.M) { + unittest.MainTest(m) +}