mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
Source files keep their SPDX-License-Identifier and Hanzo copyright line; the Gitea, Gogs and LFS Test Server copyrights they used to repeat now live once in NOTICE, alongside LICENSE. The header lint accepts any copyright line above the SPDX line, so it no longer demands an upstream one. Co-authored-by: Hanzo Dev <[email protected]>
91 lines
3.9 KiB
Go
91 lines
3.9 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package org
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hanzoai/git/models/organization"
|
|
repo_model "github.com/hanzoai/git/models/repo"
|
|
"github.com/hanzoai/git/models/unittest"
|
|
user_model "github.com/hanzoai/git/models/user"
|
|
"github.com/hanzoai/git/modules/structs"
|
|
"github.com/hanzoai/git/modules/util"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
unittest.MainTest(m)
|
|
}
|
|
|
|
func TestOrg(t *testing.T) {
|
|
require.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
t.Run("UpdateOrgEmailAddress", func(t *testing.T) {
|
|
org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
|
|
originalEmail := org.Email
|
|
|
|
require.NoError(t, UpdateOrgEmailAddress(t.Context(), org, nil))
|
|
unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3, Email: originalEmail})
|
|
|
|
newEmail := "[email protected]"
|
|
require.NoError(t, UpdateOrgEmailAddress(t.Context(), org, &newEmail))
|
|
unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3, Email: newEmail})
|
|
|
|
invalidEmail := "invalid email"
|
|
err := UpdateOrgEmailAddress(t.Context(), org, &invalidEmail)
|
|
require.ErrorIs(t, err, util.ErrInvalidArgument)
|
|
unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3, Email: newEmail})
|
|
|
|
require.NoError(t, UpdateOrgEmailAddress(t.Context(), org, new("")))
|
|
org = unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3, Email: ""})
|
|
assert.Empty(t, org.Email)
|
|
})
|
|
|
|
t.Run("DeleteOrganization", func(t *testing.T) {
|
|
org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 6})
|
|
assert.NoError(t, DeleteOrganization(t.Context(), org, false))
|
|
unittest.AssertNotExistsBean(t, &organization.Organization{ID: 6})
|
|
unittest.AssertNotExistsBean(t, &organization.OrgUser{OrgID: 6})
|
|
unittest.AssertNotExistsBean(t, &organization.Team{OrgID: 6})
|
|
|
|
org = unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
|
|
err := DeleteOrganization(t.Context(), org, false)
|
|
assert.Error(t, err)
|
|
assert.True(t, repo_model.IsErrUserOwnRepos(err))
|
|
|
|
user := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 5})
|
|
assert.Error(t, DeleteOrganization(t.Context(), user, false))
|
|
unittest.CheckConsistencyFor(t, &user_model.User{}, &organization.Team{})
|
|
})
|
|
|
|
t.Run("ChangeVisibilityWithUserFork", func(t *testing.T) {
|
|
// org 19 has a repository 27 which has a forked repository 29 by user 20
|
|
org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 19})
|
|
require.NoError(t, ChangeOrganizationVisibility(t.Context(), org, structs.VisibleTypePrivate))
|
|
unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: org.ID, Visibility: structs.VisibleTypePrivate})
|
|
})
|
|
|
|
t.Run("ChangeVisibilityClearsWatchesAndStars", func(t *testing.T) {
|
|
// org3 is a public organization owning the public repo32
|
|
org := unittest.AssertExistsAndLoadBean(t, &organization.Organization{ID: 3})
|
|
require.Equal(t, structs.VisibleTypePublic, org.Visibility)
|
|
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 32, OwnerID: org.ID})
|
|
|
|
// an outside user watches and stars the repo while the org is still visible
|
|
watcher := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
|
|
require.NoError(t, repo_model.WatchRepo(t.Context(), watcher, repo, true))
|
|
require.NoError(t, repo_model.StarRepo(t.Context(), watcher, repo, true))
|
|
unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{UserID: watcher.ID, RepoID: repo.ID})
|
|
|
|
require.NoError(t, ChangeOrganizationVisibility(t.Context(), org, structs.VisibleTypePrivate))
|
|
|
|
// making the org private must drop watches, not only stars, from users who can no longer see it
|
|
unittest.AssertNotExistsBean(t, &repo_model.Watch{UserID: watcher.ID, RepoID: repo.ID})
|
|
unittest.AssertNotExistsBean(t, &repo_model.Star{UID: watcher.ID, RepoID: repo.ID})
|
|
})
|
|
}
|