package access_test import ( "testing" actions_model "forgejo.org/models/actions" "forgejo.org/models/db" perm_model "forgejo.org/models/perm" "forgejo.org/models/perm/access" repo_model "forgejo.org/models/repo" "forgejo.org/models/unittest" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func assertAccess(t *testing.T, expectedMode perm_model.AccessMode, perm *access.Permission) { assert.Equal(t, expectedMode, perm.AccessMode) for _, unit := range perm.Units { assert.Equal(t, expectedMode, perm.UnitAccessMode(unit.Type)) } } func TestActionTaskCanAccessOwnRepo(t *testing.T) { require.NoError(t, unittest.PrepareTestDatabase()) actionTask := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 47}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: actionTask.RepoID}) perm, err := access.GetActionRepoPermission(db.DefaultContext, repo, actionTask) require.NoError(t, err) assertAccess(t, perm_model.AccessModeWrite, &perm) } func TestActionTaskCanAccessPublicRepo(t *testing.T) { require.NoError(t, unittest.PrepareTestDatabase()) actionTask := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 47}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) perm, err := access.GetActionRepoPermission(db.DefaultContext, repo, actionTask) require.NoError(t, err) assertAccess(t, perm_model.AccessModeRead, &perm) } func TestActionTaskCanAccessPublicRepoOfLimitedOrg(t *testing.T) { require.NoError(t, unittest.PrepareTestDatabase()) actionTask := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 47}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 38}) perm, err := access.GetActionRepoPermission(db.DefaultContext, repo, actionTask) require.NoError(t, err) assertAccess(t, perm_model.AccessModeRead, &perm) } func TestActionTaskNoAccessPublicRepoOfPrivateOrg(t *testing.T) { require.NoError(t, unittest.PrepareTestDatabase()) actionTask := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 47}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 40}) perm, err := access.GetActionRepoPermission(db.DefaultContext, repo, actionTask) require.NoError(t, err) assertAccess(t, perm_model.AccessModeNone, &perm) } func TestActionTaskNoAccessPrivateRepo(t *testing.T) { require.NoError(t, unittest.PrepareTestDatabase()) actionTask := unittest.AssertExistsAndLoadBean(t, &actions_model.ActionTask{ID: 47}) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}) perm, err := access.GetActionRepoPermission(db.DefaultContext, repo, actionTask) require.NoError(t, err) assertAccess(t, perm_model.AccessModeNone, &perm) }