Files
MokoGitea/models/user/user_system_test.go
T
Jonathan Miller d4824dc05b
Branch Policy Check / Verify merge target (pull_request) Successful in 1s
PR RC Release / Build RC Release (pull_request) Successful in 2s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || 'development' }}) (pull_request) Successful in 1m13s
feat(actions): rebrand actions bot user and add branch protection whitelist
Rebrand the built-in actions bot user from upstream Gitea naming to
MokoGitea branding:
- Name: gitea-actions → mokogitea-actions
- FullName: Gitea Actions → MokoGitea Actions
- Email: teabot@gitea.io → mokogitea-actions[bot]@mokoconsulting.tech

Add backward-compatible name recognition so all three bot name variants
(mokogitea-actions, gitea-actions, github-actions) with optional [bot]
suffix resolve to the same system user.

Add WhitelistActionsUser, MergeWhitelistActionsUser, and
ForcePushAllowlistActionsUser toggles to branch protection rules,
allowing CI/CD workflows to push to protected branches when explicitly
enabled. Previously the actions bot (virtual user ID -2) could never be
added to whitelist because updateUserWhitelist() only validates real
database users.

Closes #233

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-30 10:37:43 -05:00

67 lines
1.7 KiB
Go

// Copyright 2025 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package user
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestSystemUser(t *testing.T) {
uid, u, err := GetPossibleUserByID(t.Context(), -1)
require.NoError(t, err)
assert.Equal(t, int64(-1), uid)
assert.Equal(t, "Ghost", u.Name)
assert.Equal(t, "ghost", u.LowerName)
assert.True(t, u.IsGhost())
u = GetSystemUserByName("gHost")
require.NotNil(t, u)
assert.Equal(t, "Ghost", u.Name)
uid, u, err = GetPossibleUserByID(t.Context(), -2)
require.NoError(t, err)
assert.Equal(t, int64(-2), uid)
assert.Equal(t, "mokogitea-actions", u.Name)
assert.Equal(t, "mokogitea-actions", u.LowerName)
assert.True(t, u.IsActions())
assert.True(t, u.IsGiteaActions()) // deprecated alias
// canonical name lookup
u = GetSystemUserByName("mokogitea-actions")
require.NotNil(t, u)
assert.Equal(t, "MokoGitea Actions", u.FullName)
// legacy name lookups
u = GetSystemUserByName("Gitea-actionS")
require.NotNil(t, u)
assert.Equal(t, "MokoGitea Actions", u.FullName)
u = GetSystemUserByName("github-actions")
require.NotNil(t, u)
assert.Equal(t, "MokoGitea Actions", u.FullName)
// [bot] suffix lookups
u = GetSystemUserByName("mokogitea-actions[bot]")
require.NotNil(t, u)
assert.Equal(t, "MokoGitea Actions", u.FullName)
u = GetSystemUserByName("gitea-actions[bot]")
require.NotNil(t, u)
u = GetSystemUserByName("github-actions[bot]")
require.NotNil(t, u)
// unknown name returns nil
u = GetSystemUserByName("unknown-bot")
assert.Nil(t, u)
uid, u, err = GetPossibleUserByID(t.Context(), 999999)
require.NoError(t, err)
assert.Equal(t, int64(-1), uid)
assert.Equal(t, "Ghost", u.Name)
}