mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-10-24 11:02:42 +00:00
(cherry picked from commitb7fe7cf401) (cherry picked from commitcf339eed4f) (cherry picked from commit4f3a16168b) (cherry picked from commit6f5bbc53fc) (cherry picked from commitaca42b422e) (cherry picked from commit5a7f7580e5) (cherry picked from commit06c383c807) (cherry picked from commitfe831dcb53) (cherry picked from commitcd12cd0dbc) (cherry picked from commitcc79163703) (cherry picked from commit0102a5715e) (cherry picked from commit403f7520b3) (cherry picked from commita3b61510a2) (cherry picked from commitf83f0f9feb) (cherry picked from commitfd1c3a6d09) (cherry picked from commitf7cdc3d6f1) (cherry picked from commit060121b644) (cherry picked from commit62c847ff02) (cherry picked from commit4d051b51c2) (cherry picked from commit86e6981a93)
87 lines
2.6 KiB
Go
87 lines
2.6 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package db_test
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"code.gitea.io/gitea/models/db"
|
|
issues_model "code.gitea.io/gitea/models/issues"
|
|
"code.gitea.io/gitea/models/unittest"
|
|
"code.gitea.io/gitea/modules/setting"
|
|
|
|
_ "code.gitea.io/gitea/cmd" // for TestPrimaryKeys
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDumpDatabase(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
dir := t.TempDir()
|
|
|
|
type Version struct {
|
|
ID int64 `xorm:"pk autoincr"`
|
|
Version int64
|
|
}
|
|
assert.NoError(t, db.GetEngine(db.DefaultContext).Sync(new(Version)))
|
|
|
|
for _, dbType := range setting.SupportedDatabaseTypes {
|
|
assert.NoError(t, db.DumpDatabase(filepath.Join(dir, dbType+".sql"), dbType))
|
|
}
|
|
}
|
|
|
|
func TestDeleteOrphanedObjects(t *testing.T) {
|
|
assert.NoError(t, unittest.PrepareTestDatabase())
|
|
|
|
countBefore, err := db.GetEngine(db.DefaultContext).Count(&issues_model.PullRequest{})
|
|
assert.NoError(t, err)
|
|
|
|
_, err = db.GetEngine(db.DefaultContext).Insert(&issues_model.PullRequest{IssueID: 1000}, &issues_model.PullRequest{IssueID: 1001}, &issues_model.PullRequest{IssueID: 1003})
|
|
assert.NoError(t, err)
|
|
|
|
orphaned, err := db.CountOrphanedObjects(db.DefaultContext, "pull_request", "issue", "pull_request.issue_id=issue.id")
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 3, orphaned)
|
|
|
|
err = db.DeleteOrphanedObjects(db.DefaultContext, "pull_request", "issue", "pull_request.issue_id=issue.id")
|
|
assert.NoError(t, err)
|
|
|
|
countAfter, err := db.GetEngine(db.DefaultContext).Count(&issues_model.PullRequest{})
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, countBefore, countAfter)
|
|
}
|
|
|
|
func TestPrimaryKeys(t *testing.T) {
|
|
// Some dbs require that all tables have primary keys, see
|
|
// https://github.com/go-gitea/gitea/issues/21086
|
|
// https://github.com/go-gitea/gitea/issues/16802
|
|
// To avoid creating tables without primary key again, this test will check them.
|
|
// Import "code.gitea.io/gitea/cmd" to make sure each db.RegisterModel in init functions has been called.
|
|
|
|
beans, err := db.NamesToBean()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
whitelist := map[string]string{
|
|
"the_table_name_to_skip_checking": "Write a note here to explain why",
|
|
"forgejo_sem_ver": "seriously dude",
|
|
}
|
|
|
|
for _, bean := range beans {
|
|
table, err := db.TableInfo(bean)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if why, ok := whitelist[table.Name]; ok {
|
|
t.Logf("ignore %q because %q", table.Name, why)
|
|
continue
|
|
}
|
|
if len(table.PrimaryKeys) == 0 {
|
|
t.Errorf("table %q has no primary key", table.Name)
|
|
}
|
|
}
|
|
}
|